cd ~/blog

~/vulns/python-pydoc-arbitrary-file-read-cve-2021-3426.md

Python pydoc Arbitrary File Read (CVE-2021-3426)

miscautor: Jordy Pérez Osorio aviso legal
Pythonpydocarbitrary-file-readCVE-2021-3426

~2 min de lectura


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 pydoc activo.
  • El atacante debe alcanzar el puerto y conocerlo o descubrirlo.
  • La cuenta que ejecuta pydoc debe 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 pydoc en 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.

7. Clasificación y referencias

// relacionados