ssh-keysign-pwn - PoC de un 0-day de Linux que permite a usuarios sin privilegios leer archivos propiedad de root
(github.com/0xdeadbeefnetwork)- ssh-keysign-pwn es una PoC de una vulnerabilidad de Linux que permite a usuarios sin privilegios leer archivos propiedad de root, e indica que afecta a kernels anteriores a
31e62c2ebbfd - El bug central es que
__ptrace_may_access()omite la verificación de dumpable cuandotask->mm == NULL, y quedo_exit()ejecutaexit_mm()antes queexit_files(), creando una ventana en la que los descriptores de archivo permanecen abiertos - En esa ventana, si el uid del llamador coincide con el del proceso objetivo,
pidfd_getfd(2)tiene éxito, lo que permite obtener descriptores de archivo abiertos de un proceso que está terminando sshkeysign_pwnobtiene/etc/ssh/ssh_host_{ecdsa,ed25519,rsa}_key, aprovechando el flujo en el quessh-keysign.cabre claves con permisos 0600 y luego termina conEnableSSHKeysign=noantes depermanently_set_uid(), dejando un fd abiertochage_pwnobtiene/etc/shadow, apuntando a la carrera de salida en el flujo dondechage -l <user>hacespw_open(O_RDONLY)y luego abandona completamente los privilegios consetreuid(ruid, ruid)- La ejecución consiste en usar
makey luego./sshkeysign_pwnpara las claves del host, o./chage_pwn rootpara imprimir el contenido de/etc/shadowen la salida estándar; se indica que suele acertar dentro de 100 a 2000 spawns - Los entornos confirmados son Raspberry Pi OS Bookworm 6.12.75, Debian 13, Ubuntu 22.04 / 24.04 / 26.04, Arch y CentOS 9
- Como PoC controlada para el objetivo,
vuln_target.cabre/etc/shadowy luego baja privilegios, mientrasexploit_vuln_target.cmuestraEPERMmientras sigue vivo y el robo del fd después deSIGKILL - La vulnerabilidad fue reportada por Qualys y Linus la corrigió el 2026-05-14; además, se indica que Jann Horn ya había señalado en octubre de 2020 la forma de robo de FD
- El README presenta como entrada de NVD
https://nvd.nist.gov/vuln/detail/CVE-2026-46333
1 comentarios
Opiniones en Lobste.rs
Desactivar
ptracepor sí solo no es suficiente. Es fácil confundirse por el mensaje del commit y el nombre de la función, peroptrace_may_accessse llama desde varias rutas y esta prueba de concepto (PoC) en realidad no usa ptraceNo parece haber una mitigación ideal y, por ahora, sería algo como 1) quitar todos los bits de ejecución de
/usr/lib64/misc/ssh-keysignsolo para responder débilmente a esta PoC específica, o 2) bloquearpidfd_getfdcon algo como eBPF o systemtap. Lo primero es más bien algo a considerar cuando no puedes parchear el kernel ni apagar el sistema y simplemente necesitas irte a dormir yaNo revisé la PoC y, como siempre, hay que tener cuidado al ejecutar PoC aleatorias sacadas de internet
El aviso de Qualys todavía no se ha publicado, y ya habían dicho que lamentaban mucho suspender la distribución en linux-distros debido a la política de seguridad del kernel de Linux. La situación se ha puesto más áspera porque los LLM ya pueden generar rápidamente una PoC a partir de commits de corrección que se ven sospechosos, y antes probablemente se podía esperar unos días
Qualys realmente es un equipo excelente, así que da pena que no hayan podido tener el momento adecuado para presentar esto por su cuenta. Cuando lo publiquen, seguro será un gran aviso
openssh solo es un objetivo conveniente para este ataque y no tiene la culpa; probablemente también se podrían elegir otros binarios setuid como objetivo
/proc/sys/kernel/yama/ptrace_scopeen 2 (admin-only attach) o 3 (no attach) bloquea todos los exploits conocidos. Aun así, en teoría podría haber otras formas de explotaciónpidfd_getfd, y el resultado está aquí. Hay que ejecutarlo constap -g block_pidfd_getfd.stp, y como con todo lo bajado de internet, hay que revisar el script antes de ejecutarloOjalá el kernel dejara de hacer su propia divulgación de 0-days al publicar commits de corrección en la rama principal. El commit incluso dice “Reported-by: Qualys”, así que claramente es una corrección de seguridad
Greg K-H escribió que, como el equipo de seguridad del kernel no puede elegir quién recibe divulgación anticipada de correcciones de seguridad, al final nadie la recibe
Esto no es un problema de ssh, es un problema de Linux. El título debería reflejar eso
ssh-keysignhubiera verificadoEnableSSHKeysign=yesantes de abrir la clave privada del host, entonces los sistemas donde esa opción está desactivada, como por defecto, no habrían sido vulnerables al robo de la clave del host. Sorprende quessh-keysignno revise esa opción primeroLa prueba de concepto es agradablemente corta, y mis equipos también resultaron vulnerables
Parece permitir acceso a descriptores de archivo abiertos por ejecutables setuid bajo ciertas condiciones. No veo por qué esto tendría que limitarse solo a lectura, y parece que podría adaptarse a una escalada local de privilegios (LPE) que no requiera crackear hashes
Esta PoC en particular se puede romper con
chmod -x /usr/lib/openssh/ssh-keysign /usr/bin/chage. Puede que haya que ajustar la ruta dessh-keysign, y también se puede consultar la página del manual. Pero eso no arregla el problema central y parece probable que se pueda esquivar. Hasta donde sé, no hay otras mitigacionesEste problema fue corregido en ptrace: slightly saner 'get_dumpable()' logic, y por eso terminó haciéndose público. Fue hace apenas 10 horas
También está el anuncio público de Qualys enviado a oss-security. Dicen que todavía no publican el aviso para darles tiempo a las distribuciones y a los usuarios de aplicar parches. Parece que va a ser un tema bastante interesante y, mientras tanto, se puede leer la explicación de Brad Spengler de grsecurity. Ese tuit parece haber sido el disparador de esta PoC
exploit_vuln_target/vuln_targetsí funcionó bien. No es nada buenoEn la práctica, esto parece afectar sistemas donde ya existe un usuario con una cuenta sin privilegios. O sea, si no hay un login válido, ¿es correcto que con esto no se puede lograr ejecución remota de código directamente en un servidor con SSH expuesto a internet?