← Tornar als articles
Seguretat· 3 min de lectura

ssh-keysign-pwn (CVE-2026-46333): una cursa a ptrace deixa llegir claus SSH i /etc/shadow

Un usuari local sense privilegis no hauria de poder llegir les claus privades del host SSH ni /etc/shadow. CVE-2026-46333, batejat ssh-keysign-pwn, obre exactament aquesta porta a través d’una cursa al subsistema ptrace del kernel Linux. Qualys el va reportar a l’equip de seguretat del kernel l’11 de maig de 2026, el pedaç es va integrar el 14 de maig i NVD va publicar l’entrada el 15 amb un CVSS de 7.1 (vector AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N).

On és l’error

El problema viu a __ptrace_may_access() i la lògica de get_dumpable(). Quan un procés acaba, el kernel separa primer el seu descriptor de memòria (mm) i només després tanca la seva taula de descriptors de fitxer. Entre aquests dos moments hi ha una finestra molt curta en què mm ja és NULL, i la comprovació d’accés de ptrace se salta la seva salvaguarda de “dumpable” precisament perquè no troba cap mapa de memòria associat.

Aquí entra pidfd_getfd(2), la interfície introduïda a Linux 5.6 que permet clonar un descriptor obert d’un altre procés. Durant aquesta finestra, un procés sense privilegis pot cridar pidfd_getfd(2) contra un binari SUID que estigui sortint i copiar-se els seus descriptors ja oberts. El blanc són binaris SUID que obren fitxers propietat de root a la seva ruta normal d’execució: sobretot ssh-keysign (que llegeix les claus privades del host SSH) i chage (que llegeix la base de dades de contrasenyes en ombra).

L’error no és nou. És al codi de mainline des del novembre de 2016 i arrenca d’una proposta de pedaç de Jann Horn que mai es va arribar a fusionar. Qualys va desenvolupar quatre exploits funcionals: contra chage, ssh-keysign, pkexec i accounts-daemon.

A qui afecta i amb quina gravetat

Qualsevol sistema amb un kernel que inclogui pidfd_getfd() (Linux 5.6 i posteriors) i la lògica vulnerable de ptrace. La llista de distribucions amb avís publicat inclou Debian 13, Ubuntu 24.04 i 26.04, Fedora 43 i 44, SUSE, AlmaLinux i CloudLinux.

No és execució remota ni dona root directe, i per això es queda en CVSS 7.1 en lloc de pujar més. Però llegir les claus de host SSH i els hash de /etc/shadow és greu de debò: amb la clau privada del host pots suplantar el servidor en atacs man-in-the-middle, i amb els hash de contrasenyes pots intentar trencar-les sense pressa fora de la màquina. En entorns multiusuari, hosting compartit o servidors amb comptes de poca confiança, el risc és directe.

Com mitigar-ho

El correcte és actualitzar el kernel a la versió amb pedaç que publiqui la teva distribució i reiniciar. Els avisos de Debian, Ubuntu, Fedora, SUSE, AlmaLinux i CloudLinux ja estaven disponibles a mitjans de maig de 2026.

Si has d’esperar el pedaç, hi ha una mitigació interina sòlida: puja kernel.yama.ptrace_scope a 2, que limita l’attach de ptrace només a administradors. Això bloqueja els exploits públics, perquè la seva ruta via pidfd_getfd(2) passa per __ptrace_may_access().

sysctl -w kernel.yama.ptrace_scope=2

Per fer-ho persistent, afegeix kernel.yama.ptrace_scope = 2 a /etc/sysctl.d/. Tingues en compte que això pot afectar depuradors i eines que necessitin ptrace entre processos del mateix usuari, així que prova-ho abans en producció.

És un altre recordatori que l’escalada local continua sent terreny fèrtil al kernel. Si vols veure casos semblants, fes una ullada a Copy Fail (CVE-2026-31431), una altra escalada a root al mòdul crypto del kernel. I per seguir les versions del kernel i els seus pedaços, tens la fitxa de Linux kernel.

Font