ssh-keysign-pwn – PoC für einen Linux-0-Day, mit dem nicht privilegierte Nutzer root-eigene Dateien lesen können
(github.com/0xdeadbeefnetwork)- ssh-keysign-pwn ist ein PoC für eine Linux-Schwachstelle, mit der nicht privilegierte Nutzer root-eigene Dateien lesen können; betroffen seien Kernel vor
31e62c2ebbfd - Der zentrale Bug besteht darin, dass
__ptrace_may_access()die dumpable-Prüfung überspringt, wenntask->mm == NULL, und dassdo_exit()exit_mm()vorexit_files()ausführt, wodurch ein Fenster entsteht, in dem Dateideskriptoren geöffnet bleiben - In diesem Fenster ist
pidfd_getfd(2)erfolgreich, wenn die uid des Aufrufers mit der des Zielprozesses übereinstimmt; dadurch lassen sich offene Dateideskriptoren eines Prozesses abrufen, der gerade beendet wird sshkeysign_pwnholt/etc/ssh/ssh_host_{ecdsa,ed25519,rsa}_keyund nutzt den Ablauf aus, bei demssh-keysign.cSchlüssel mit Rechten 0600 öffnet und vorpermanently_set_uid()mitEnableSSHKeysign=nobeendet wird, wodurch offene fds zurückbleibenchage_pwnholt/etc/shadowund zielt auf die Exit-Race in dem Ablauf, bei demchage -l <user>nachspw_open(O_RDONLY)mitsetreuid(ruid, ruid)seine Rechte vollständig ablegt- Die Ausführung erfolgt mit
makeund danach./sshkeysign_pwnfür Host-Schlüssel bzw../chage_pwn rootzur Ausgabe des Inhalts von/etc/shadowauf stdout; laut Beschreibung gelingt der Treffer innerhalb von 100 bis 2000 Spawns - Bestätigte Umgebungen sind Raspberry Pi OS Bookworm 6.12.75, Debian 13, Ubuntu 22.04 / 24.04 / 26.04, Arch und CentOS 9
- Als kontrollierte Ziel-PoC öffnet
vuln_target.c/etc/shadowund legt dann die Rechte ab;exploit_vuln_target.czeigtEPERM, solange das Ziel noch lebt, und fd-Hijacking nachSIGKILL - Die Schwachstelle wurde von Qualys gemeldet und von Linus am 2026-05-14 behoben; außerdem wird darauf hingewiesen, dass Jann Horn bereits im Oktober 2020 auf eine Form des FD-Hijackings hingewiesen hatte
- Das README verweist auf den NVD-Eintrag
https://nvd.nist.gov/vuln/detail/CVE-2026-46333
1 Kommentare
Lobste.rs-Kommentare
Das Deaktivieren von ptrace allein reicht nicht aus. Wegen der Commit-Message und des Funktionsnamens ist das leicht missverständlich, aber
ptrace_may_accesswird über mehrere Pfade aufgerufen, und auch dieser Proof of Concept (PoC) verwendet tatsächlich kein ptraceGeeignete Gegenmaßnahmen gibt es kaum; im Moment scheint es nur darauf hinauszulaufen, entweder 1) nur schwach auf genau diesen speziellen PoC zu reagieren, indem man das Ausführungs-Bit von
/usr/lib64/misc/ssh-keysignvollständig entfernt, oder 2) mit eBPF oder systemtap so etwas wie eine Sperre fürpidfd_getfdeinzurichten. Ersteres ist höchstens etwas, das man in Betracht zieht, wenn man weder den Kernel patchen noch den Dienst beenden kann und jetzt sofort schlafen mussIch habe den PoC nicht geprüft, und wie immer ist Vorsicht geboten, wenn man beliebige PoCs aus dem Internet ausführt
Das Qualys-Advisory ist noch nicht veröffentlicht, und Qualys hatte bereits erklärt, die Verteilung über linux-distros wegen der Linux-Kernel-Sicherheitsrichtlinie mit großem Bedauern einzustellen. Die Lage ist rauer geworden, weil LLMs aus verdächtig aussehenden Fix-Commits sehr schnell PoCs erzeugen können; früher hätte man vermutlich noch ein paar Tage warten können
Qualys ist ein wirklich großartiges Team, deshalb ist es schade, dass sie diesmal nicht den richtigen Moment bekommen haben, das selbst ordentlich anzukündigen. Wenn es veröffentlicht wird, wird es sicher ein hervorragendes Advisory sein
openssh ist nur ein bequemes Ziel für diesen Angriff und trägt keine Schuld; man könnte auch andere setuid-Binärdateien als Ziel wählen
/proc/sys/kernel/yama/ptrace_scopeauf 2 (admin-only attach) oder 3 (no attach) alle bekannten Exploits. Theoretisch könnte es aber andere Ausnutzungswege gebenpidfd_getfdschreiben lassen; das Ergebnis gibt es hier. Es muss mitstap -g block_pidfd_getfd.stpausgeführt werden, und wie bei allem aus dem Internet sollte man das Skript vor der Ausführung unbedingt prüfenIch wünschte, der Kernel würde damit aufhören, sich durch öffentliche Commits von Fixes im Main-Branch selbst 0-days offenzulegen. Im Commit steht sogar „Reported-by: Qualys“, also ist klar, dass es sich um einen Security-Fix handelt
Greg K-H schrieb, das Kernel-Sicherheitsteam könne nicht auswählen, wer Security-Fixes vorab erhält, weshalb am Ende niemand eine Vorab-Offenlegung bekommt
Das ist kein SSH-Problem, sondern ein Linux-Problem. Der Titel sollte das auch so zeigen
ssh-keysignvor dem Öffnen des privaten Host-Schlüssels zuerstEnableSSHKeysign=yesgeprüft hätte. Es überrascht mich, dassssh-keysigndiese Option nicht als Erstes prüftDer Proof of Concept ist erfreulich kurz, und meine Geräte waren tatsächlich ebenfalls verwundbar
Offenbar ermöglicht das unter bestimmten Bedingungen den Zugriff auf Dateideskriptoren, die von setuid-Programmen geöffnet wurden. Ich sehe keinen Grund, warum das auf Lesezugriff beschränkt sein sollte, und es scheint sich zu einer lokalen Privilegieneskalation (LPE) ausbauen zu lassen, bei der man keine Hashes knacken muss
Diesen speziellen PoC kann man mit
chmod -x /usr/lib/openssh/ssh-keysign /usr/bin/chageaußer Gefecht setzen. Denssh-keysign-Pfad muss man eventuell anpassen; siehe auch die Manpage. Das behebt aber nicht das Kernproblem, und es dürfte umgehbar sein. Soweit ich weiß, gibt es keine anderen GegenmaßnahmenBehoben wurde das Problem in ptrace: slightly saner 'get_dumpable()' logic, und genau dadurch wurde es öffentlich. Das ist gerade einmal 10 Stunden her
Es gibt auch eine öffentliche Mitteilung von Qualys an oss-security; dort heißt es, das Advisory werde noch nicht veröffentlicht, um Distributionen und Nutzern Zeit zum Patchen zu geben. Das dürfte ziemlich interessant werden; bis dahin kann man sich die Erklärung von Brad Spengler von grsecurity ansehen. Dieser Tweet scheint die Entwicklung dieses PoC ausgelöst zu haben
exploit_vuln_target/vuln_targetfunktionierte allerdings problemlos. Nicht besonders gutRealistisch betrachtet scheint das nur Systeme zu betreffen, auf denen es bereits einen nicht privilegierten Account gibt. Das heißt: Wenn es keinen gültigen Login gibt, kann man damit bei einem Server mit im Internet exponiertem SSH nicht direkt Remote Code Execution erreichen, richtig?