{"id":38208,"date":"2026-05-21T09:57:12","date_gmt":"2026-05-21T07:57:12","guid":{"rendered":"https:\/\/enginsight.com\/?p=38208"},"modified":"2026-05-21T10:56:54","modified_gmt":"2026-05-21T08:56:54","slug":"fragnesia-cve-2026-46300-und-die-zukunft-der-kernel-page-cache-exploits","status":"publish","type":"post","link":"https:\/\/enginsight.com\/de\/blog\/fragnesia-cve-2026-46300-und-die-zukunft-der-kernel-page-cache-exploits\/","title":{"rendered":"Fragnesia (CVE-2026-46300) und die Zukunft der Kernel-Page-Cache-Exploits"},"content":{"rendered":"<p>Am 13.05.2026 fand der Sicherheitsforscher William Bowling eine weitere Schwachstelle in Kernels von Linux Systemen. Auch hier handelt es sich um eine lokale Rechtausweitung, die eine Kombination aus drei Subsystemen ausnutzt. Das XFRM-Framework (IPsec), den TCP ULP-Mechanismus (Upper Layer Protocol) und den Splice-Syscall mit Page-Cache-Sharing, wobei ein willk&#xFC;rlicher Write in den VFS Page Cache, ohne root Rechte, erfolgt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Funktion-der-Sicherheitsl&#xFC;cke:\">Funktion der Sicherheitsl&#xFC;cke:<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Zusamenfassung:\"><strong>Zusammenfassung:<\/strong><\/h3>\n\n\n\n<p>Ein normaler Benutzer erstellt zun&#xE4;chst einen eigenen User- und Netzwerk-Namespace. Dadurch erh&#xE4;lt der Prozess innerhalb dieser isolierten Umgebung Netzwerk-Adminrechte (<code>CAP_NET_ADMIN<\/code>), obwohl er auf dem eigentlichen System kein Root ist.<\/p>\n\n\n\n<p>Mit diesen Rechten richtet der Angreifer eine manipulierte IPsec-Konfiguration (Security Association) ein und nutzt anschlie&#xDF;end einen Fehler im Zusammenspiel von <code>splice()<\/code>, <code>espintcp<\/code> und dem Linux-Page-Cache aus. Der Kernel entschl&#xFC;sselt Daten direkt im Speicher und merkt dabei nicht, dass dieser Speicher gleichzeitig zum Cache einer schreibgesch&#xFC;tzten Systemdatei geh&#xF6;rt.<\/p>\n\n\n\n<p>Dadurch kann der Angreifer den Inhalt eines System-Binaries wie <code>\/usr\/bin\/su<\/code> im Arbeitsspeicher gezielt ver&#xE4;ndern und beim n&#xE4;chsten Start des Programms Root-Rechte erhalten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Ausf&#xFC;hrliche-Erkl&#xE4;rung:\"><strong>Ausf&#xFC;hrliche Erkl&#xE4;rung:<\/strong><\/h3>\n\n\n\n<p><strong>Schritt 1: Eigene isolierte Umgebung erstellen<\/strong><\/p>\n\n\n\n<p>Namespaces sind normalerweise zur Isolation von Ressourcen, Prozessen oder Daten gedacht, wobei sie darin dem Prozess aber genug Rechte geben, um bestimmte Netzwerkfunktionen des Kernels zu konfigurieren.<\/p>\n\n\n\n<p>In dieser Schwachstelle nutzt der Angreifer das und erstellt zun&#xE4;chst einen neuen User &#x2013; und Netzwerk &#x2013; Namespace mit:<br><code>unshare(CLONE_NEWUSER | CLONE_NEWNET)<\/code><\/p>\n\n\n\n<p>Dadurch bekommt der Prozess innerhalb dieser isolierten Umgebung Netzwerk-Adminrechte (<code>CAP_NET_ADMIN<\/code>).<br>Wichtig: Auf dem eigentlichen System hat der Angreifer weiterhin keine Root-Rechte.<\/p>\n\n\n\n<p><strong>Schritt 2: IPsec-Verbindung mit bekanntem Schl&#xFC;ssel anlegen<\/strong><\/p>\n\n\n\n<p>Der Angreifer richtet &#xFC;ber <code>NETLINK_XFRM<\/code> eine IPsec Security Association (SA) ein. Das ist eine IPsec &#x2013; Konfiguration, die dem Kernel sagt, wie bestimmte Netzwerkdaten verschl&#xFC;seslt und entschl&#xFC;sselt werden sollen.<\/p>\n\n\n\n<p>Dabei wird verwendet:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ESP-in-TCP<\/strong> &#x2192; IPsec-Daten werden &#xFC;ber TCP &#xFC;bertragen<\/li>\n\n\n\n<li><strong>AES-128-GCM<\/strong> &#x2192; der Verschl&#xFC;sselungsalgorithmus<\/li>\n\n\n\n<li><strong>ein selbst gew&#xE4;hlter Schl&#xFC;ssel<\/strong> &#x2192; der Angreifer kennt ihn vollst&#xE4;ndig<\/li>\n\n\n\n<li><strong>SPI 0x100<\/strong> &#x2192; eine Kennung f&#xFC;r diese Verbindung<\/li>\n<\/ul>\n\n\n\n<p>Da der Angreifer den Schl&#xFC;ssel selbst festlegt, wei&#xDF; er genau, wie der Kernel sp&#xE4;ter Daten ver- und entschl&#xFC;sselt. Dadurch kann er gezielt beeinflussen, welche Bytes bei der Entschl&#xFC;sselung im Speicher ver&#xE4;ndert werden.<\/p>\n\n\n\n<p><strong>Schritt 3 : Tabelle vorberechnen, um gezielt Bytes zu ver&#xE4;ndern<\/strong><\/p>\n\n\n\n<p>Nachdem die Security Association eingerichtet wurde, berechnet der Angreifer vorbereitend viele m&#xF6;gliche Verschl&#xFC;sselungszust&#xE4;nde durch. Hintergrund ist, dass AES-GCM intern mit einem sogenannten Counter-Mode arbeitet. Dabei erzeugt der Algorithmus einen Keystream, der sp&#xE4;ter per XOR auf die Daten angewendet wird.<\/p>\n\n\n\n<p>Da der Angreifer den Schl&#xFC;ssel kennt und bestimmte Werte wie den IV (Initialisierungsvektor bzw. Nonce) selbst kontrollieren kann, l&#xE4;sst sich genau vorhersagen, welche Bytes der Kernel sp&#xE4;ter erzeugen wird. Durch das systematische Variieren dieser Werte erstellt der Angreifer eine Art Nachschlagetabelle: F&#xFC;r nahezu jede gew&#xFC;nschte Byte-Ver&#xE4;nderung gibt es einen passenden IV.<\/p>\n\n\n\n<p>Damit besitzt er sp&#xE4;ter die M&#xF6;glichkeit, einzelne Bytes im Speicher gezielt zu ver&#xE4;ndern, ohne direkt auf die Datei schreiben zu m&#xFC;ssen.<\/p>\n\n\n\n<p><strong>Schritt 4: Ausnutzen der eigentlichen Schwachstelle<\/strong><\/p>\n\n\n\n<p>Wie in den vorherigen Kernel CVEs, verwendet der Angreifer die Funktion <code>splice()<\/code>, um Daten aus einer Datei wie <code>\/usr\/bin\/su<\/code> direkt in einen TCP-Socket zu &#xFC;bertragen. Der Socket-Puffer und der Page Cache der Datei teilen sich dabei dieselbe physische Speicherseite.<\/p>\n\n\n\n<p>Anschlie&#xDF;end aktiviert der Angreifer <code>TCP_ULP espintcp<\/code>, also die ESP-Verarbeitung im TCP-Stack, allerdings erst nachdem sich die Daten bereits im Socket-Puffer befinden. Der Kernel versucht nun, die Daten direkt im vorhandenen Speicher zu entschl&#xFC;sseln (<em>in-place decryption<\/em>).<\/p>\n\n\n\n<p>Hierbei geht der Kernel davon aus, dass der Speicher ausschlie&#xDF;lich zum Socket geh&#xF6;rt. Er erkennt nicht, dass dieselbe Speicherseite gleichzeitig Teil des Dateisystem-Caches einer eigentlich schreibgesch&#xFC;tzten Datei ist.<\/p>\n\n\n\n<p>Dadurch wird der kryptographische Output direkt auf den Page Cache angewendet. Der Entschl&#xFC;sselungsvorgang ver&#xE4;ndert also ungewollt den Inhalt einer Systemdatei im Speicher.<\/p>\n\n\n\n<p><strong>Schritt 5: Gezieltes &#xDC;berschreiben einzelner Bytes<\/strong><\/p>\n\n\n\n<p>Der Angriff wird nun mehrfach wiederholt, um die gew&#xFC;nschte Datei Schritt f&#xFC;r Schritt zu manipulieren.<\/p>\n\n\n\n<p>F&#xFC;r jedes Byte berechnet der Angreifer zun&#xE4;chst den Unterschied zwischen dem aktuellen Wert und dem gew&#xFC;nschten Zielwert. Anschlie&#xDF;end sucht er in seiner vorberechneten Keystream-Tabelle nach einem passenden IV, der genau diese Ver&#xE4;nderung erzeugt.<\/p>\n\n\n\n<p>Danach wird ein neuer ESP-Datensatz erzeugt und erneut durch die fehlerhafte Entschl&#xFC;sselungsroutine verarbeitet. Auf diese Weise lassen sich einzelne Bytes kontrolliert ver&#xE4;ndern, obwohl die Datei eigentlich schreibgesch&#xFC;tzt ist.<\/p>\n\n\n\n<p>Der Vorgang wird so oft wiederholt, bis der gew&#xFC;nschte Payload vollst&#xE4;ndig im Speicher liegt.<\/p>\n\n\n\n<p><strong>Schritt 6: Ausf&#xFC;hrung des manipulierten Programms<\/strong><\/p>\n\n\n\n<p>Am Ende befindet sich im Page Cache eine manipulierte Version von <code>\/usr\/bin\/su<\/code>. Die Datei auf der Festplatte wurde dabei nicht ver&#xE4;ndert, betroffen ist nur die im Speicher gecachte Version.<\/p>\n\n\n\n<p>Wird das Programm anschlie&#xDF;end gestartet, verwendet der Kernel zun&#xE4;chst den bereits vorhandenen Cache-Inhalt. Dadurch wird nicht mehr der originale Code ausgef&#xFC;hrt, sondern die manipulierte Version.<\/p>\n\n\n\n<p>Der eingeschleuste Code setzt die Benutzer- und Gruppen-ID auf Root und startet anschlie&#xDF;end eine Shell. Dadurch erh&#xE4;lt der Angreifer Root-Rechte, obwohl er urspr&#xFC;nglich keinerlei privilegierten Zugriff auf das System hatte.<\/p>\n\n\n\n<p>Quelle:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Vergleich-CopyFail,-Dirty-Frag-und-Fragnesia\">Vergleich CopyFail, Dirty Frag und Fragnesia<\/h2>\n\n\n\n<p>Alle drei Schwachstellen unterliegen dem gleichen Grundmuster, bei dem der Kernel so manipuliert wird, dass er einen Schreibvorgang direkt auf einer Page Cache Seite durchf&#xFC;hrt, auf die ein unprivilegierter Nutzer eigentlich nur lesend zugreifen darf. Das Ergebnis ist jeweils, ein zuverl&#xE4;ssiger Root-Exploit gegen <code>\/usr\/bin\/su<\/code>, bei dem keine Race Conditions auftreten.<\/p>\n\n\n\n<p>CopyFail nutzt das <code>crypto\/algif_aead<\/code>-Subsystem (eine Kernel-Schnittstelle f&#xFC;r AEAD-Kryptografie wie AES-GCM) aus und ist deshalb der einzige der drei Exploits, der keinen privilegierten User-Namespace ben&#xF6;tigt. Der Angriffsweg ist dadurch direkter als bei den anderen beiden.<\/p>\n\n\n\n<p>Dirty Frag und Fragnesia ben&#xF6;tigen beide <code>CLONE_NEWUSER | CLONE_NEWNET<\/code> (Namespace-Flags zum Erstellen isolierter User- und Netzwerk-Namespaces), um innerhalb dieses isolierten Kontexts <code>CAP_NET_ADMIN<\/code> (Administratorrechte f&#xFC;r Netzwerkfunktionen) zu erhalten. Beide greifen anschlie&#xDF;end Komponenten aus dem XFRM\/IPsec-Bereich an, also Teilen des Kernels, die f&#xFC;r IPsec-Verschl&#xFC;sselung und Paketverarbeitung zust&#xE4;ndig sind.<\/p>\n\n\n\n<p>Der Unterschied zwischen Dirty Frag und Fragnesia liegt vor allem im Aufbau des Exploits. Dirty Frag kombiniert zwei getrennte Kernel-Bugs. Einen im <code>xfrm<\/code>-ESP-Pfad (dem Kernelpfad f&#xFC;r IPsec-ESP-Pakete) und einen weiteren in <code>RxRPC<\/code> (einem Remote-Procedure-Call-Protokoll im Linux-Kernel). Dadurch ist der Exploit deutlich komplexer aufgebaut.<\/p>\n\n\n\n<p>Fragnesia dagegen basiert nur auf einem einzelnen Bug. Beim Coalescing (dem Zusammenf&#xFC;hren mehrerer Netzwerkfragmente) verliert ein <code>skb<\/code> (<code>sk_buff<\/code>, die zentrale Kernel-Datenstruktur f&#xFC;r Netzwerkpakete) das <code>SKBFL_SHARED_FRAG<\/code>-Flag (ein Kennzeichen daf&#xFC;r, dass Speicherfragmente gemeinsam genutzt werden). Dadurch behandelt der Kernel beim Wechsel in den <code>espintcp<\/code>-ULP-Modus (eine TCP-basierte ESP\/IPsec-Transporterweiterung) gepufferte File-Seiten f&#xE4;lschlicherweise als ESP-Chiffretext und XORt den AES-GCM-Keystream (den von AES-GCM erzeugten Verschl&#xFC;sselungsstrom) direkt in diese Seiten hinein. Der Aufbau ist damit einfacher als bei Dirty Frag, die Schreibprimitive arbeitet aber trotzdem deterministisch und schreibt Byte f&#xFC;r Byte zuverl&#xE4;ssig in den Speicher.<\/p>\n\n\n\n<p>Beim aktuellen Patch-Status ist Fragnesia das kritischste Problem. CopyFail wird zwar bereits aktiv ausgenutzt, ist aber schon gepatcht. F&#xFC;r Dirty Frag existiert ebenfalls bereits ein Upstream-Patch (ein bereits in die offizielle Kernel-Entwicklung integrierter Fix). F&#xFC;r Fragnesia gibt es aktuell nur einen Patch auf der Netdev-Mailingliste (der zentralen Mailingliste f&#xFC;r Linux-Netzwerkentwicklung), dieser wurde bisher weder in den Mainline-Kernel noch in Stable-Kernel &#xFC;bernommen.<\/p>\n\n\n\n<p>Als Schutzma&#xDF;nahme k&#xF6;nnen die betroffenen Kernel-Module deaktiviert beziehungsweise geblacklistet werden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>algif_aead<\/code> f&#xFC;r CopyFail<\/li>\n\n\n\n<li><code>esp4<\/code>, <code>esp6<\/code> und <code>rxrpc<\/code> f&#xFC;r Dirty Frag und Fragnesia.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Ausblick-in-die-Zukunft\">Ausblick in die Zukunft<\/h2>\n\n\n\n<p>Innerhalb von zwei Wochen, CopyFail am 29. April, Dirty Frag am 7. Mai, Fragnesia am 13. Mai, wurden drei Root-Exploits auf denselben Linux-Kernel-Pfad offengelegt. Alle drei Schwachstellen wurden mit Unterst&#xFC;tzung gro&#xDF;er Sprachmodelle entdeckt und kurz nach der Entdeckung ver&#xF6;ffentlicht.<\/p>\n\n\n\n<p>Die neue Schwachstelle DirtyCBC zeigt, dass die oben genannten Schwachstellen wahrscheinlich kein Einzelfall bleiben. Auch DirtyCBC folgt demselben Muster. Der Kernel verarbeitet Daten direkt auf Speicherseiten, die &#xFC;ber <code>splice()<\/code> beziehungsweise <code>MSG_SPLICE_PAGES<\/code> in Netzwerk- oder Kryptopfade gelangen, und schreibt dabei in Page-Cache-Seiten, bevor ausreichend gepr&#xFC;ft wurde, ob diese Seiten &#xFC;berhaupt ver&#xE4;ndert werden d&#xFC;rfen. Bei DirtyCBC passiert das im AF_RXRPC\/RxGK-Pfad. Dabei werden AES-CBC-Daten in-place entschl&#xFC;sselt, bevor die Integrit&#xE4;tspr&#xFC;fung fehlschl&#xE4;gt. Dadurch bleibt trotzdem eine Ver&#xE4;nderung im Page Cache zur&#xFC;ck. Delphos Labs beschreibt die Schwachstelle ausdr&#xFC;cklich als &#x201E;Sibling of DirtyFrag&#x201C; und als lokale Page-Cache-Poisoning-Primitive.<\/p>\n\n\n\n<p>F&#xFC;r Schwachstellen dieser Klasse ist das zugrunde liegende Muster inzwischen relativ klar erkennbar und damit auch systematisch analysierbar. Dabei werden Kernel-Pfade gesucht, in denen In-Place-Kryptografie direkt auf externen oder gemeinsam genutzten Puffern ausgef&#xFC;hrt wird, ohne vorher eindeutig zu pr&#xFC;fen, wem diese Speicherbereiche tats&#xE4;chlich geh&#xF6;ren und ob sie &#xFC;berhaupt beschrieben werden d&#xFC;rfen. Gerade hier wird KI in zukunft die Entwicklung massiv beschleunigen, da nicht nur einzelne Codefragmente analysieren werden, sondern auch Commit-Historien, Patches, Subsystem-Zusammenh&#xE4;nge und wiederkehrende Bugmuster. Das f&#xFC;hrt dazu, dass deutlich mehr Schwachstellen mit demselben Grundmuster entdeckt werden. Besonders betroffen d&#xFC;rften weiterhin komplexe Kernel-Bereiche sein, in denen Netzwerk-Stacks, Kryptografie, <code>splice()<\/code>-Mechanismen, skb-Fragmente und Zero-Copy-Optimierungen miteinander interagieren.<\/p>\n\n\n\n<p>Aus diesem Grund werden zuk&#xFC;nftige Schwachstellen dieser Art voraussichtlich &#xFC;berwiegend zusammengefasst betrachtet und nur besonders kritische CVEs noch einzeln behandelt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Am 13.05.2026 fand der Sicherheitsforscher William Bowling eine weitere Schwachstelle in Kernels von Linux Systemen. Auch hier handelt es sich um eine lokale Rechtausweitung, die eine Kombination aus drei Subsystemen ausnutzt. Das XFRM-Framework (IPsec), den TCP ULP-Mechanismus (Upper Layer Protocol) und den Splice-Syscall mit Page-Cache-Sharing, wobei ein willk&#xFC;rlicher Write in den VFS Page Cache, ohne [&#x2026;]<\/p>\n","protected":false},"author":36,"featured_media":38219,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_eb_attr":"","footnotes":""},"categories":[334],"tags":[],"class_list":["post-38208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-schwachstellen"],"_links":{"self":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/38208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/comments?post=38208"}],"version-history":[{"count":3,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/38208\/revisions"}],"predecessor-version":[{"id":38223,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/posts\/38208\/revisions\/38223"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/media\/38219"}],"wp:attachment":[{"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/media?parent=38208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/categories?post=38208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enginsight.com\/de\/wp-json\/wp\/v2\/tags?post=38208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}