CVE-2026-46300 jalur ESP-in-TCP pada subsistem XFRM Linux kernel. Secara praktek bug ini bukan memory corruption biasa, karena primitive yang didapat attacker langsung menyentuh page cache file-backed. Masalah utamanya bukan berasal dari parser paket yang gagal validasi atau overflow linear klasik. Root cause-nya lebih ke transisi state internal socket buffer setelah patch DirtyFrag sebelumnya mengubah asumsi ownership terhadap page fragment, karena bug ini memiliki kaitan dengan bug atau celah sebelumnya yang yaitu Dirty Frag. Begitu ownership model bergeser, jalur decrypt XFRM mulai bekerja terhadap memori yang sebenarnya masih mereferensikan page cache file asli.
Jalur Masuk: Namespace dan CAP_NET_ADMIN Palsu
Penyerang tidak punya CAP_NET_ADMIN di host utama, tetapi Linux tetap memberikan capability tersebut di namespace baru. Itu cukup untuk: membuat konfigurasi XFRM/IPsec, mengatur ESP-in-TCP, memasang key material melalui NETLINK_XFRM, dan mengontrol lifecycle socket yang dibutuhkan exploit. Kondisi tersebut membuat kondisi supaya kernel memperlakukan buffer tertentu sebagai traffic ESP valid.
Aktivitas namespace + konfigurasi XFRM oleh proses non-network-facing userland sebetulnya sudah cukup aneh. Terutama bila host bukan appliance VPN atau node tunnel IPsec. Karena penyerang justru bisa menggunakan fitur isolasi ini untuk mendapatkan hak CAP_NET_ADMIN.
Meskipun hak ini hanya berlaku di dalam kotak namespace tersebut, bug Fragnesia memungkinkan hak tersebut bocor dan memengaruhi Page Cache milik host utama. Ini adalah anomali besar di mana proses yang seharusnya terisolasi bisa memanipulasi memori global sistem. NETLINK_XFRM adalah saluran komunikasi khusus antara proses di userland dan kernel untuk mengatur aturan IPsec. Aktivitas tersebut tidak mungkin dilakukan oleh kondisi normal sistem karena bukan tidak memiliki fungsi dalam sistem.
Bagaimana Page Cache Bisa Masuk ke Receive Queue
Bagian penting exploit ada di penggunaan splice(), normalnya fungsional sistem receive queue TCP diisi skb yang berasal dari jaringan. Di bug ini justru memasukkan data dari file-backed page ke queue socket, sehingga membuat kernel menyimpan fragment yang masih terhubung ke page cache file asli. Ini penting karena sebagian besar mitigasi memory corruption modern bergantung pada pemisahan ownership memori: network buffer dianggap transient, page cache dianggap persistent, crypto transform diasumsikan bekerja pada buffer private.
Fragnesia mematahkan asumsi tersebut, patch DirtyFrag sebelumnya ternyata mengubah alur tertentu sehingga fragment hasil splice tidak lagi diperlakukan secara defensif saat state socket berubah menjadi ESP-in-TCP, akibatnya fragment file-backed tersebut ikut melewati jalur decrypt.
Root Cause: State Transition Socket yang Salah Asumsi
Masalah sebenarnya muncul ketika ESP-in-TCP diaktifkan setelah queue sudah terisi fragment splice, karena kernel menganggap data yang ada di receive queue merupakan payload ESP terenkripsi yang aman untuk diproses in-place padahal buffer tersebut bukan hasil receive jaringan biasa dan masih memegang referensi ke page cache file asli. Di jalur internal XFRM, decrypt dilakukan langsung terhadap fragment tanpa memastikan backing memory aman dimodifikasi.
Di jalur internal XFRM, decrypt dilakukan langsung terhadap fragment tanpa memastikan backing memory aman dimodifikasi. Flow konseptual: file page cache - splice() - TCP receive queue - ESP-in-TCP enabled - XFRM decrypt path - in-place XOR transform - page cache corruption. Masalahnya adalah decrypt path memang dirancang untuk melakukan modifikasi buffer langsung agar supaya proses efisiensi, pada jalur normal itu valid karena skb payload mutable. Begitu fragment berasal dari page cache, model mutability berubah total, dan bug ini terjadi karena networking subsystem, page cache, dan crypto transform (boundary).
Primitive Utama: Controlled XOR ke File-Backed Memory
Primitive exploit Fragnesia cukup clean karena ESP decryption pada dasarnya menghasilkan plaintext = ciphertext XOR keystream. Karena proses exploit bekerja dengan mengontrol: ciphertext key, material XFRM, dan timing aktivasi ESP yang bisa memprediksi hasil akhir XOR pada fragment page cache. Jadi ini bukan arbitrary write penuh seperti memcpy bebas offset. Lebih ke deterministic bit manipulation terhadap cached executable content. Executable ELF sangat sensitif terhadap beberapa byte awal: entry stub, branch instruction, credential check, dan loader path.
Perubahan kecil bisa mengubah flow eksekusi total, Dalam demonstrasi, target yang dipakai adalah /usr/bin/su. penggunaan file tersebut karena, executable tersebut hampir selalu tersedia, dijalankan setuid root, dan mudah dipicu ulang setelah page cache berubah. Disk file asli tetap utuh, coruption hanya terjadi pada representasi cached di memori kernel. Karena Linux lebih memilih page cache dibanding reload disk langsung, proses baru akan mengeksekusi versi yang sudah dimodifikasi exploit.
Kenapa Primitive Kecil Ini Cukup untuk Root
Fragnesia menargetkan executable privileged, attacker tidak perlu ROP kompleks atau pivot heap besar. Mereka cuma perlu: memodifikasi beberapa instruction, mem-bypass auth branch atau mengganti flow menuju shell spawn sederhana. Begitu binary setuid dieksekusi ulang, privilege escalation terjadi secara natural lewat mekanisme UNIX normal.
Yang membuatnya menarik adalah exploit chain ini hampir tidak menyentuh userspace memory corruption tradisional. Tidak ada: stack smash, heap feng shui besar, dan use-after-free klasik. Eksploitasi murni bermain di: page ownership, skb fragment lifecycle, dan crypto transform semantics.
Kenapa Patch DirtyFrag Melahirkan Bug Baru
Fragnesia cukup relevan buat developer kernel karena memperlihatkan pola umum patch regression pada subsistem kompleks. DirtyFrag sebelumnya mencoba memperbaiki corruption flow tertentu dengan mengubah handling fragment dan reference semantics. Tetapi perubahan kecil pada ownership expectation ternyata membuka jalur baru ketika: socket state berubah dinamis, fragment sudah berada di queue, dan subsystem lain mengasumsikan buffer mutable ini tipe bug yang sulit terlihat lewat audit lokal. Karena secara teknis splice logic tampak, XFRM decrypt, skb handling tampak valid.
Masalah baru muncul ketika seluruh lifecycle digabung, itulah sebabnya fuzzing subsystem tunggal sering tidak cukup untuk bug seperti ini.
Langkah Mitigasi
Kalau host tidak membutuhkan IPsec ESP: printf 'install esp4 /bin/false\ninstall esp6 /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf rmmod esp4 esp6 2>/dev/null. Pendekatan ini efektif karena memotong jalur exploit sebelum XFRM ESP aktif. Kalau IPsec wajib dipakai, pembatasan user namespace lebih relevan: echo "user.max_user_namespaces=0" > /etc/sysctl.d/dirtyfrag.conf sysctl --system.
Ini tidak memperbaiki bug inti, tetapi memutus kemampuan attacker memperoleh CAP_NET_ADMIN terisolasi. Untuk environment containerized, mitigasi ini perlu dihitung hati-hati karena banyak runtime modern bergantung pada user namespaces dan patch kernel terbaru tetap jadi solusi utama karena root cause ada pada transisi ownership fragment di jalur XFRM.
Baca Juga Tentang: CopyFail DirtyFrag
Benediktus Sava – Security Researcher
Sumber:
.png)
.png)



.png)

.png)