BookinglyTech News
Ciberseguridad

AnyIO 4.14.0 y 4.14.1 no bajan privilegios: un typo deja pasar los grupos del padre

El fallo, CVE-2026-63349 con CVSS 7.0, hace que los subprocesos hereden los grupos suplementarios del padre en lugar de los que pide el desarrollador. Corregido en la 4.14.2.

2 min de lecturaDev.to0 vistas

AnyIO 4.14.0 y 4.14.1 no propagan correctamente los grupos suplementarios al lanzar subprocesos en POSIX. Un error de asignación en el código hace que el proceso hijo se quede con los grupos del padre —piense en docker o shadow— en vez de con los que pidió el desarrollador. La bajada de privilegios que se daba por hecha, no ocurre. El fallo está corregido en la 4.14.2, publicada el 18 de septiembre, y ya hay una prueba de concepto pública.

El identificador es CVE-2026-63349, con CVSS v4.0 de 7.0 (alto), vector de ataque local y clasificado como CWE-266 y CWE-269. Afecta al componente anyio._core._subprocesses en cualquier versión igual o superior a 4.14.0 y anterior a 4.14.2. No está en el catálogo KEV, es decir, no consta explotación activa contra objetivos reales.

Dónde estaba el error

En la función open_process, cuando el llamante pasaba grupos extra, el código asignaba a la clave extra_groups el valor de la variable group en lugar del de extra_groups. Una letra de diferencia. El resultado es que el backend de ejecución nunca recibe los grupos suplementarios solicitados y el subproceso hereda los del proceso padre, que suelen ser más privilegiados. El arreglo llega en el commit eb562e6462, una línea corregida.

La gravedad depende del contexto: si un servicio corre como root y lanza subprocesos con la intención de rebajar privilegios, esos hijos se quedan con acceso a grupos como docker, shadow o sudo, que es exactamente la frontera que se quería cerrar.

Qué hacer

Lo primero, actualizar a AnyIO 4.14.2 o superior. Para saber qué hay instalado, pip show anyio, y después fijar la dependencia en requirements.txt, pyproject.toml o Pipfile con anyio >= 4.14.2. El aviso de seguridad de GHSA-3w57-8xmc-8v26 recoge el detalle.

Si no se puede actualizar de inmediato, la alternativa es ejecutar esos procesos con el módulo subprocess nativo de Python en lugar de pasar por AnyIO. Es un rodeo que rompe parte del modelo asíncrono, pero deja la bajada de privilegios en manos del intérprete.

Merece la pena revisarlo aunque el CVSS sea 7.0 y no 9.8, porque la librería está en la base de media docena de frameworks asíncronos y no siempre aparece en un pip freeze revisado a conciencia. Cualquier servicio que combine ejecución como root con subprocesos lanzados por AnyIO debería mirar qué grupos acaban teniendo esos hijos.