DirtyDecrypt — eine weitere Sicherheitsanfälligkeit der Klasse Copy Fail, die Root-Rechte in Linux ermöglicht

Im Linux-Kernel wurde eine Schwachstelle entdeckt, die analog zu den Schwachstellen Copy Fail, Dirty Frag und Fragnesia es einem unprivilegierten Benutzer ermöglicht, Root-Rechte zu erlangen, indem Daten im Seiten-Cache überschrieben werden. Der Schwachstelle wurde der Codename DirtyDecrypt zugewiesen (das Problem wird auch unter dem Namen DirtyCBC erwähnt). Ein Prototyp des Exploits ist verfügbar.

Die CVE-ID wird im Anhang des Exploits nicht erwähnt; es wird nur angegeben, dass die Forscher das Problem am 9. Mai entdeckten und dies den Entwicklern des Kernels mitteilten, die daraufhin antworteten, dass ihre Entdeckung einen anderen Bericht über eine bereits behobene Schwachstelle dupliziere. Da der Patch mit der Behebung bereits in den Kernel aufgenommen wurde, beschlossen die Forscher, ihren entwickelten Exploit zu veröffentlichen. Nach der Beschreibung im Inneren des Exploits wird die Schwachstelle CVE-2026-31635 verwendet, deren Behebung im April in den Kernel aufgenommen wurde und die Teil des Branches 7.0.0 ist sowie der am 18. April veröffentlichten Version 6.18.23. Das Problem tritt ab Kernel-Version 6.16 auf.

Wie im Fall der Serie von Schwachstellen Dirty Frag ist die neue Schwachstelle im RxRPC-Treiber vorhanden, der die AF_RXRPC-Socket-Familie und das gleichnamige RPC-Protokoll implementiert, das über UDP arbeitet. Das Problem wird durch einen Fehler bei der Überprüfung der Datenlänge in der Funktion rxgk_verify_response() verursacht – statt zu prüfen "if (auth_len > len)" wurde im Code "if (auth_len < len)" angegeben, was dazu führte, dass Daten mit einer Größe, die größer als zulässig war, an die Funktion rxgk_decrypt_skb() übergeben wurden. Bei der Ausführung der Funktion rxgk_decrypt_skb() wurde die Entschlüsselung der Daten durch direkte Änderungen im Seiten-Cache durchgeführt, um unnötige Pufferung zu vermeiden. Aufgrund der fehlerhaften Größenprüfung bestand die Möglichkeit, Daten im Seiten-Cache an einer gewählten Offset-Position zu überschreiben.

Die Ausnutzung der Schwachstelle besteht darin, eine Programmdatei mit dem SUID-Root-Flag zu lesen (um sie im Seiten-Cache zu speichern) und Teile des Programmcodes im Seiten-Cache durch Code zu ersetzen, um /usr/bin/sh auszuführen. Der anschließende Start des Programms führt dazu, dass nicht die originale ausführbare Datei von dem Speicher geladen wird, sondern eine geänderte Kopie aus dem Seiten-Cache. Als SUID-Programme sind im Exploit die Verwendung von "/usr/bin/su", "/bin/su", "/usr/bin/mount", "/usr/bin/passwd" und "/usr/bin/chsh" vorgesehen.

Um die Schwachstelle auszunutzen, muss beim Kompilieren des Kernels die Option CONFIG_RXGK aktiviert sein, und das Kernelmodul rxrpc.ko muss für das automatische Laden verfügbar sein (in einigen Systemen wird es nicht kompiliert). Der Status der Behebung von Schwachstellen in den Distributionen kann auf den folgenden Seiten geschätzt werden: Debian, Ubuntu, SUSE/openSUSE, RHEL, Arch, Fedora. Als Schutzmaßnahme kann das Laden des Kernelmoduls rxrpc blockiert werden:

sh -c «printf 'install rxrpc /bin/false\n' > /etc/modprobe.d/dirtydecrypt.conf; rmmod rxrpc 2>/dev/null; true»

Zusätzlich kann erwähnt werden, dass im Mailingliste der Linux-Kernel-Entwickler Patches veröffentlicht wurden, die die Optimierungen im Crypto API (AF_ALG), die direkten Zugriff auf den Seiten-Cache beim Entschlüsseln mit den Algorithmen „skcipher“ und „aead“ verwenden, vollständig deaktivieren. Diese Optimierungen vermeiden unnötiges Buffern von Daten, schaffen jedoch Risiken für schwerwiegende Schwachstellen. Es wird angenommen, dass ihre Deaktivierung lediglich zu einem geringen Rückgang der Leistung aufgrund einer zusätzlichen Kopieroperation in einen separaten Puffer führen wird. Die Patches wurden vom Betreuer des Crypto-API-Subsystems angenommen und in den Branch „cryptodev“ aufgenommen, in dem die Möglichkeiten für eine Aufnahme in die Hauptversion zukünftiger Kernel-Versionen entwickelt werden.

Quelle: opennet.ru

60GB SSD 8Gb DDR4