Una vulnerabilidad iSCSI del kernel de Linux permite la elevación de privilegios
Hace poco se dio a conocer información importante sobre la identificación de una vulnerabilidad (catalogada como CVE-2021-27365) en el código del subsistema iSCSI del kernel de Linux que permite a un usuario local sin privilegios ejecutar código a nivel del kernel y obtener privilegios de root en el sistema.
El problema es causado por un fallo en la funcióndel módulo iscsi_host_get_param() de la libiscsi, introducido hacia atrás en 2006 durante el desarrollo del subsistema iSCSI. Debido a la falta de controles de tamaño adecuados, algunos atributos de cadena iSCSI, como el nombre de host o el nombre de usuario, pueden exceder el valor PAGE_SIZE (4 KB).
La vulnerabilidad podría explotarse mediante el envío de mensajes Netlink por un usuario sin privilegios que establezca los atributos iSCSI en valores superiores a PAGE_SIZE. Al leer datos de atributos a través de sysfs o seqfs, se llama al código para pasar los atributos a sprintf para que se copien en un búfer cuyo tamaño es PAGE_SIZE.
El subsistema particular en cuestión es el transporte de datos SCSI (Small Computer System Interface), que es un estándar para transferir datos hechos para conectar computadoras con dispositivos periféricos, originalmente a través de un cable físico, como discos duros. SCSI es un estándar venerable publicado originalmente en 1986 y era el método de referencia para las configuraciones de servidor, e iSCSI es básicamente SCSI sobre TCP. SCSI todavía se usa hoy en día, especialmente si se trata de ciertas situaciones de almacenamiento, pero ¿cómo se convierte esto en una superficie de ataque en un sistema Linux predeterminado?
La explotación de la vulnerabilidad en las distribuciones depende del soporte para la carga automática del módulo del kernel scsi_transport_iscsi cuando se intenta crear un socket NETLINK_ISCSI.
En distribuciones en las que este módulo se carga automáticamente, el ataque puede llevarse a cabo independientemente del uso de la funcionalidad iSCSI. Al mismo tiempo, para el uso exitoso del exploit, se requiere adicionalmente el registro de al menos un transporte iSCSI. A su vez, para registrar un transporte, puede utilizar el módulo de kernel ib_iser, que se carga automáticamente cuando un usuario sin privilegios intenta crear un socket NETLINK_RDMA.
La carga automática de los módulos necesarios para usar el exploit es compatible con CentOS 8, RHEL 8 y Fedora al instalar el paquete rdma-core en el sistema, que es una dependencia para algunos paquetes populares y se instala por defecto en configuraciones para estaciones de trabajo, servidor sistemas con GUI y virtualización de entornos host.
Al mismo tiempo, rdma-core no se instala cuando se usa una compilación de servidor que solo funciona en modo consola y cuando se instala una imagen de instalación mínima. Por ejemplo, el paquete está incluido en la distribución base de Fedora 31 Workstation, pero no incluido en Fedora 31 Server.
Debian y Ubuntu son menos susceptibles al problema, ya que el paquete rdma-core solo carga los módulos del kernel necesarios para un ataque si el hardware RDMA está disponible. Sin embargo, el paquete de Ubuntu del lado del servidor incluye el paquete open-iscsi, que incluye el archivo /lib/modules-load.d/open-iscsi.conf para garantizar que los módulos iSCSI se carguen automáticamente en cada inicio.
Un prototipo funcional del exploit está disponible para probar en el siguiente enlace.
La vulnerabilidad se corrigió en las actualizaciones del kernel de Linux 5.11.4, 5.10.21, 5.4.103, 4.19.179, 4.14.224, 4.9.260 y 4.4.260. Las actualizaciones del paquete del kernel están disponibles en las distribuciones Debian (oldstable), Ubuntu, SUSE/openSUSE, Arch Linux y Fedora, mientras que para RHEL aún no se han publicado correcciones.
Además, en el subsistema iSCSI se han solucionado dos vulnerabilidades menos peligrosas que pueden provocar la fuga de datos del kernel: CVE-2021-27363 (información filtrada sobre el descriptor de transporte iSCSI a través de sysfs) y CVE-2021-27364 (lectura de un región fuera de los límites de la zona de influencia).
Estas vulnerabilidades se pueden aprovechar para comunicarse a través de un socket de enlace de red con el subsistema iSCSI sin los privilegios necesarios. Por ejemplo, un usuario sin privilegios puede conectarse a iSCSI y enviar un comando de fin de sesión.
Fuente: https://blog.grimm-co.com