1. Descripción técnica
CVE-2021-3426 es una falla de divulgación de información en el servidor HTTP de pydoc. El endpoint getfile aceptaba una ruta mediante el parámetro key y devolvía el archivo sin restringirlo a documentación segura. El proceso del servidor se convierte así en un lector de archivos para otro usuario local o de una red adyacente que pueda alcanzarlo.
2. Mecanismo e impacto
La entrada controlada es una ruta del sistema de archivos. pydoc la abre con los permisos de la cuenta que inició el servidor y devuelve el contenido por HTTP. El impacto es Arbitrary File Read dentro de ese contexto: puede exponer claves, configuraciones y secretos, pero no proporciona escritura ni ejecución de comandos por sí mismo.
3. Condiciones necesarias
- Debe ejecutarse una versión vulnerable de Python con el servidor
pydocactivo. - El atacante debe alcanzar el puerto y conocerlo o descubrirlo.
- La cuenta que ejecuta
pydocdebe poder leer el archivo objetivo. - El archivo debe ser recuperable mediante la ruta aceptada por
getfile.
4. Validación y detección
Revisar procesos pydoc -p, puertos asociados y solicitudes a /getfile?key=. Una respuesta que devuelve un archivo fuera del contenido de documentación confirma la exposición. Que el puerto sólo escuche en localhost limita el vector remoto, pero no protege frente a otros usuarios o procesos ya presentes en la máquina.
5. Explotación documentada
5.1. Doc
bella podía iniciar /usr/bin/doc mediante sudo; el wrapper lanzaba pydoc3.9 -p 7890 como root. Desde una segunda shell local se solicitó /getfile?key=/root/root.txt, por lo que la lectura heredó los permisos del proceso privilegiado.
6. Mitigación
- Actualizar a una versión corregida de Python.
- No exponer servidores
pydocen sistemas multiusuario o redes no confiables. - Restringir la interfaz de escucha y el firewall como control compensatorio.
- Evitar wrappers privilegiados que inicien servicios de documentación controlables.