Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/justinsteven/sudo_digest_toctou_poc_cve-2015-8239
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónLabs y Práctica
GitHubjustinsteven/sudo_digest_toctou_poc_cve-2015-8239

sudo_digest_toctou_poc_CVE-2015-8239

Prueba de concepto basada en Docker que demuestra una explotación de condición de carrera TOCTOU contra la función Digest_Spec de sudo (CVE-2015-8239) utilizando inotify para ataques de reemplazo de archivos entre usuarios.

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
2hace 5 añosAún no revisado

sudoers Digest_Spec TOCTOU POC

Justificación

Alyssa Milburn (https://twitter.com/noopwafel) descubrió un error de condición de carrera TOCTOU en sudo cuando se utiliza la configuración Digest_Spec. La configuración Digest_Spec se puede utilizar para permitir que un usuario ejecute sudo en un binario si y solo si su hash coincide con un valor prescrito. Consulte man sudoers y busque Digest_Spec para obtener más información sobre esta función, y consulte http://noopwafel.net/notes/2015/sudo-digest-race-condition.html para obtener más información sobre el error descubierto por Alyssa. El problema fue asignado como CVE-2015-8239.

El problema fue mitigado añadiendo documentación a man sudoers advirtiendo sobre la posibilidad de una condición de carrera, y añadiendo algo de magia fexecve() a sudo para intentar evitar que ciertos tipos de modificaciones de archivos sean efectivas.

Curiosamente, cve-assign dijo lo siguiente en https://seclists.org/oss-sec/2015/q4/256:

root@kitploit:~
As far as we know, the Digest_Spec feature can be useful if the user
invoking sudo doesn't have write access to the program file, but a
second (and potentially untrusted) user does have write access to the
program file. In the envisioned scenario, the second user is not
allowed to use sudo, the second user has no way to predict when anyone
else may use sudo, and the second user cannot use their write access
often. Thus, if the second user attempts a file-replacement attack,
the attack will almost certainly occur at an ineffective instant of
time, and the Digest_Spec feature will successfully prevent the
attacker's desired outcome.

Este POC demuestra que esta afirmación no es necesariamente cierta, siempre y cuando el usuario "escritor" pueda ejecutar código persistente en el sistema. El usuario "escritor" puede aprovechar inotify para detectar cuándo el usuario "ejecutor" está ejecutando el archivo usando sudo y puede intentar un ataque de reemplazo de archivo en ese momento.

Acerca de

Este proyecto crea una imagen Docker que:

  • Tiene un archivo en /opt/sudoable que es escribible por el usuario editor, y es ejecutable mediante sudo por el usuario executor si y solo si su hash SHA256 coincide con un valor particular
  • Tiene un archivo en /opt/hello (El archivo "bueno" cuyo hash SHA256 está integrado en sudoers) y un archivo en /opt/goodbye (Un archivo "malo")
  • Tiene /opt como escribible solo por el usuario root (Por lo tanto, el usuario editor puede reemplazar el contenido de /opt/sudoable pero no puede realizar una operación de intercambio de archivos a nivel de sistema de archivos)
  • Un exploit TOCTOU basado en inotify en /home/editor/exploit/exploit.py

Cuando /home/editor/exploit/exploit.py es ejecutado por el usuario editor, se utiliza inotify para monitorear eventos del sistema de archivos. Cuando se accede al archivo /opt/sudoable, se reemplaza con /opt/goodbye. Después de que el archivo se cierra, se reemplaza con /opt/hello para dejar las cosas en un estado "normal".

Asumiendo que esta carrera tiene éxito cuando el usuario executor ejecuta sudo /opt/sudoable (Lo cual ocurre la mayoría de las veces en mi máquina), el usuario editor puede hacer que el usuario executor ejecute un binario malicioso como root independientemente de que el hash SHA256 esté especificado como el valor Digest_Spec dentro de sudoers.

Construcción

Ejecute make all

Ejecución

  1. Ejecute ./instantiate.sh
  2. Ejecute tmux new-session y divida el panel (Ctrl+b luego "; use Ctrl+b luego Arriba/Abajo para cambiar de panel)
  3. En el panel superior, ejecute sudo -u executor sudo /opt/sudoable y observe la salida Hello uid=0
  4. En el panel inferior, ejecute sudo -u editor cp /opt/goodbye /opt/sudoable
  5. En el panel superior, ejecute sudo -u executor sudo /opt/sudoable y observe que se le solicita una contraseña (es decir, la operación sudo falló debido a una discrepancia de digest)
  6. En el panel inferior, ejecute sudo -u editor /home/editor/exploit/exploit.py
  7. En el panel superior, ejecute sudo -u executor sudo /opt/sudoable varias veces y observe la salida ocasional de

Salida de ejemplo

Panel superior:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Hello uid=0

Panel inferior:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor cp /opt/goodbye /opt/sudoable

Panel superior:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:

Panel inferior:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor /home/editor/exploit/exploit.py

Panel superior:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
sudo: unable to execute /opt/sudoable: Text file busy

Trabajo adicional

¿En qué casos es realmente efectiva la mitigación de fexecve()? Si un usuario tiene acceso de escritura al archivo sudoable pero no al directorio en el que se encuentra, puede modificar el archivo que abre sudo. Si el usuario tiene acceso de escritura al directorio pero no al archivo, puede mover el archivo a un lado y recrearlo de manera que pueda modificarlo, y volvemos al punto de partida.

Agradecimientos

Gracias a Luke (https://twitter.com/lukejahnke) por hablarme sobre la configuración Digest_Spec, intercambiar ideas y pensar en usar inotify para un POC limpio entre usuarios.

Descargar herramienta
Goodbye uid=0