Im Linux-Kernel wurde eine Schwachstelle entdeckt, die ähnlich wie die Schwächen Copy Fail, Dirty Frag und Fragnesia es einem unprivilegierten Benutzer ermöglicht, Root-Rechte zu erlangen, indem Daten im Page Cache überschrieben werden. Die Schwachstelle trägt den Codenamen DirtyDecrypt (das Problem wird auch unter dem Namen DirtyCBC erwähnt). Ein Prototyp eines Exploits ist verfügbar.
Die CVE-Identifikation wird in den Anmerkungen zum Exploit nicht erwähnt, es wird lediglich angegeben, dass die Forscher das Problem am 9. Mai entdeckt haben und dies den Kernel-Entwicklern mitgeteilt haben, 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. Laut der Beschreibung im Exploit nutzt dieser die Schwachstelle CVE-2026-31635, deren Behebung im April in den Kernel aufgenommen wurde und Teil des Releases 7.0.0 vom 18. April 6.18.23 ist. Das Problem tritt ab Kernel 6.16 auf.
Wie bei der Dirty Frag-Sicherheitsanfälligkeit betrifft die neue Schwachstelle den RxRPC-Treiber, der die AF_RXRPC-Socket-Familie und das gleichnamige RPC-Protokoll implementiert, das über UDP arbeitet. Das Problem resultiert aus einem Fehler bei der Überprüfung der Datengröße in der Funktion rxgk_verify_response() — anstelle der Überprüfung "if (auth_len > len)" war im Code "if (auth_len < len)" angegeben, was dazu führte, dass in der Funktion rxgk_decrypt_skb() Daten mit einer größeren Größe als zulässig übergeben wurden. Bei der Ausführung der Funktion rxgk_decrypt_skb() wurde die Entschlüsselung der Daten durchgeführt, indem Änderungen direkt im Seitencache vorgenommen wurden, um zusätzliche Pufferung zu vermeiden. Aufgrund der fehlerhaften Größenprüfung bestand die Möglichkeit, Daten im Seitencache an einer ausgewählten Verschiebung zu überschreiben.
Die Ausnutzung der Sicherheitsanfälligkeit besteht darin, eine Programmdaten-Datei mit dem suid-Root-Flag zu lesen (damit sie im Seitencache abgelegt wird) und im Seitencache einen Teil des Programmcodes durch Code zu ersetzen, um /usr/bin/sh auszuführen. Der anschließende Programmstart führt dazu, dass nicht die originale ausführbare Datei vom Speicher geladen wird, sondern eine modifizierte Kopie aus dem Seitencache. 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.
Für die Ausnutzung der Sicherheitsanfälligkeit muss beim Erstellen des Kernels die Option CONFIG_RXGK aktiviert sein und das Kernelmodul rxrpc.ko für den automatischen Start verfügbar sein (in einigen Systemen wird es nicht kompiliert). Der Status der Behebung von Sicherheitsanfälligkeiten in den Distributionen kann auf den folgenden Seiten bewertet werden: Debian, Ubuntu, SUSE/openSUSE, RHEL, Arch, Fedora. Als Umgehungsschutz 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 die Veröffentlichung in der Mailingliste der Kernel-Entwickler für Patches erwähnt werden, die die im crypto API (AF_ALG) verwendeten Optimierungen vollständig deaktivieren, die direkten Zugriff auf den Seiten-Cache beim Entschlüsseln mit den Algorithmen „skcipher“ und „aead“ nutzen. Diese Optimierungen vermeiden überflüssige Datenpufferung, bringen jedoch ernsthafte Sicherheitsrisiken mit sich. Es wird angenommen, dass deren Deaktivierung nur zu einem geringen Rückgang der Leistung führen wird, da eine zusätzliche Kopieroperation in einen separaten Puffer erforderlich ist. Die Patches wurden vom Betreuer des crypto API-Subsystems akzeptiert und in den Branch „cryptodev“ aufgenommen, der sich mit der Übertragung von Funktionen in zukünftige Versionen des Linux-Kernels beschäftigt.
Quelle: opennet.ru
