
Kernel-Patches für die Dirty-Frag-Schwachstelle (CVE-2026-43284, CVE-2026-43500)
Patch-Serie für die Dirty Frag-Schwachstellenklasse, entdeckt von Hyunwoo Kim (@v4bel).
Dirty Frag ermöglicht es einem nicht privilegierten lokalen Benutzer, beliebige Bytes des Page-Cache von schreibgeschützten Dateien (z. B. /usr/bin/su, /etc/passwd) zu überschreiben, was auf allen gängigen Linux-Distributionen zu lokaler Rechteausweitung auf Root führt.
Die Patches in diesem Repository wurden NICHT vom Betreuer dieses Repos geschrieben.
- CVE-2026-43284 (ESP-Patch): verfasst von Hyunwoo Kim (@v4bel) und Kuan-Ting Chen. In den Linux-Kernel-Mainline zusammengeführt im Commit
f4c50a4034e6.- CVE-2026-43500 (RxRPC-Patch): verfasst von Hyunwoo Kim (@v4bel). Eingereicht bei der netdev-Mailingliste unter
afKV2zGR6rrelPC7@v4bel, Zusammenführung ausstehend.Dieses Repository ist ein formatierter Spiegel dieser Patches, hier zur Bequemlichkeit im
git am-bereiten Format gesammelt. Alle Anerkennung gebührt den ursprünglichen Autoren. Ursprüngliche Forschung und PoC: https://github.com/V4bel/dirtyfrag
4.10 (Commit cac2661c53f3, 2017-01-17) bis 6.x vor f4c50a4034e66.4 (Commit 2dc334f1a63a, 2023-06-08) bis upstream (noch kein Patch zusammengeführt)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# Patch 1 anwenden (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# Patch 2 anwenden (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch anwenden (falls git am aufgrund von Kontextabweichungen fehlschlägt)patch -p1 < 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
patch -p1 < 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
Wenn Sie den Patch nicht sofort anwenden können, blockieren Sie die anfälligen Module:
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf && \
rmmod esp4 esp6 rxrpc 2>/dev/null; \
echo 3 > /proc/sys/vm/drop_caches"
Warnung: Das Entfernen von
esp4/esp6deaktiviert IPsec ESP. Bewerten Sie die Auswirkungen, bevor Sie dies auf Produktionssystemen anwenden.
Beide Varianten teilen dieselbe Grundursache: Der Zero-Copy-splice()-Pfad des Kernels platziert eine schreibgeschützte Page-Cache-Seite direkt in ein skb-Fragment ohne Copy-on-Write-Semantik. Nachfolgende In-Place-Krypto-Operationen schreiben dann in diese Page-Cache-Seite und verändern den gecachten Dateiinhalt dauerhaft.
splice(file_fd → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- kein CoW!
│
▼
[esp_input / rxkad_verify_packet_1]
In-Place-AEAD/fcrypt-Entschlüsselung src == dst == &P
│
▼
STORE zu page_cache_page_P <- beliebiges Schreiben in den Cache schreibgeschützter Dateien
| Datei | CVE | Subsystem | Status |
|---|
0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch | CVE-2026-43284 | net/ipv4/esp4.c, net/ipv6/esp6.c, net/ipv4/ip_output.c, net/ipv6/ip6_output.c | ✅ Im Mainline zusammengeführt (f4c50a4034e6) |
0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch | CVE-2026-43500 | net/rxrpc/call_event.c, net/rxrpc/conn_event.c | ⏳ Bei der netdev-ML eingereicht (afKV2zGR6rrelPC7@v4bel), Zusammenführung ausstehend |
| Variante | Ansatz |
|---|
| ESP | Splice-Fragmente mit SKBFL_SHARED_FRAG markieren; dieses Flag in esp_input()/esp6_input() prüfen, um skb_cow_data() vor der In-Place-Krypto zu erzwingen |
| RxRPC | skb_cloned()-Gate auf (skb_cloned(skb) || skb->data_len) erweitern, sodass nicht-lineare skbs (die Splice-Fragmente enthalten können) vor der In-Place-Entschlüsselung immer kopiert werden |