Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en Moby (CVE-2023-28840)

Gravedad CVSS v3.1:
ALTA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
04/04/2023
Última modificación:
15/09/2023

Descripción

Moby es un framework de contenedores de código abierto desarrollado por Docker Inc. que se distribuye como Docker, Mirantis Container Runtime y varios otros proyectos/productos posteriores. El componente Moby daemon (`dockerd`), que se desarrolla como moby/moby, se conoce comúnmente como *Docker*. El modo Swarm, que se compila y entrega de forma predeterminada en Dockerd y, por lo tanto, está presente en la mayoría de las principales versiones de Moby, es un orquestador de contenedores integrado y simple que se implementa mediante una combinación de SwarmKit y código de red de soporte. El controlador de red superpuesta es una característica central del modo Swarm, que proporciona LAN virtuales aisladas que permiten la comunicación entre contenedores y servicios en todo el clúster. Este controlador es una implementación/usuario de VXLAN, que encapsula tramas de capa de enlace (Ethernet) en datagramas UDP que etiquetan la trama con un ID de red VXLAN (VNI) que identifica la red superpuesta de origen. Además, el controlador de red superpuesta admite un modo cifrado opcional, desactivado de forma predeterminada, que resulta especialmente útil cuando los paquetes VXLAN atraviesan una red que no es de confianza entre nodos. Las redes superpuestas cifradas funcionan encapsulando los datagramas VXLAN mediante el uso del protocolo IPsec Encapsulating Security Payload en modo Transporte. Al implementar la encapsulación IPSec, las redes superpuestas cifradas obtienen propiedades adicionales de autenticación de origen mediante prueba criptográfica, integridad de datos mediante suma de verificación y confidencialidad mediante cifrado. Al configurar un endpoint en una red superpuesta cifrada, Moby instala tres reglas de iptables (firewall del kernel de Linux) que aplican IPSec tanto entrante como saliente. Estas reglas se basan en la extensión u32 iptables proporcionada por el módulo del kernel xt_u32 para filtrar directamente el campo VNI de un paquete VXLAN, de modo que las garantías IPSec se puedan aplicar en redes superpuestas cifradas sin interferir con otras redes superpuestas u otros usuarios de VXLAN. Dos reglas de iptables sirven para filtrar datagramas VXLAN entrantes con un VNI que corresponde a una red cifrada y descarta los datagramas no cifrados. Las reglas se agregan al final de la cadena de filtros de ENTRADA, siguiendo las reglas que haya establecido previamente el administrador del sistema. Las reglas establecidas por el administrador tienen prioridad sobre las reglas que Moby establece para descartar datagramas VXLAN no cifrados, que potencialmente pueden admitir datagramas no cifrados que deberían haberse descartado. La inyección de tramas Ethernet arbitrarias puede permitir un ataque de denegación de servicio. Un atacante sofisticado puede establecer una conexión UDP o TCP a través de la puerta de enlace de salida del contenedor que, de otro modo, sería bloqueada por un firewall con estado, o llevar a cabo otras escaladas más allá de la simple inyección mediante el contrabando de paquetes en la red superpuesta. Los parches están disponibles en las versiones 23.0.3 y 20.10.24 de Moby. Como las versiones 20.10 de Mirantis Container Runtime tienen numeración diferente, los usuarios de esa plataforma deben actualizar a la versión 20.10.16. Algunos workarounds están disponibles. Cierre el puerto VXLAN (de forma predeterminada, el puerto UDP 4789) al tráfico entrante en el límite de Internet para evitar toda inyección de paquetes VXLAN y/o asegúrese de que el módulo del kernel `xt_u32` esté disponible en todos los nodos del clúster Swarm.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:mobyproject:moby:*:*:*:*:*:*:*:* 1.12.0 (incluyendo) 20.10.24 (excluyendo)
cpe:2.3:a:mobyproject:moby:*:*:*:*:*:*:*:* 23.0.0 (incluyendo) 23.0.3 (excluyendo)