Copy Fail: 732 Byte ile Linux'ta Root (CVE-2026-31431)

2017'deki bir optimizasyon commiti algif_aead'de bug zinciri açtı; 732 byte'lık script ile major Linux dağıtımlarında root olunuyor (CVE-2026-31431).

2017’de küçük bir optimization commiti merge edildi.

algif_aead modülünde AEAD operasyonlarını in-place işleme almaya başlayan bir değişiklik.

O zaman kimse fark etmedi. Geçen ay Wiz ekibi bu değişikliğin getirdiği bug zinciriyle 732 byte Python script ile bütün major Linux dağıtımlarında root oluyor.

Adı Copy Fail. CVE-2026-31431. CVSS 7.8.

Lokal privilege escalation, ama lokalin cloud, container ve CI/CD ortamlarında ne kadar geniş bir saldırı yüzeyi olduğunu hatırlatmak lazım. Multi tenant ortamda hayli tehlikeli.

Mekanizma şöyle: AF_ALG, kernel’deki userspace crypto API’si. Saldırgan oraya bir socket açıyor, “authencesn(hmac(sha256),cbc(aes))” template’ine bind ediyor.

Sonra “splice()” ile sistemde okuma yetkisi olduğu herhangi bir dosyanın page cache sayfalarını bu sokete besliyor.

AEAD operasyonu in-place çalıştığı için kernel sayfayı destination scatterlist’e alıyor.

“sendmsg()” ile gönderilen “AAD” verisinin belirli bir 4 byte’lık slotu, hedef dosyanın page cache’ine deterministik şekilde yazılıyor.

Yani kullanıcıya ait olmayan bir dosyanın memory’deki kopyasına 4 byte yazma primitive.

Küçük gibi görünüyor.

Default exploit “/usr/bin/su“yu hedef alıyor.

Setuid root binary, çoğu dağıtımda hazır var. Shellcode 4’er byte chunk’larla payload page yazılıyor.

İlginç detay: kernel bu sayfayı writeback için dirty olarak işaretlemiyor.

Disk üzerindeki dosya değişmiyor. AIDE, integrity check araçları, on-disk hash karşılaştırması…

Hiçbiri görmüyor.

Ama page cache zaten kim okusa onu döndürüyor, dolayısıyla bozuk in-memory versiyon sistemde aktif.

Etkilenen kernel sürümleri: 4.14’ten 7.0-rc’ye kadar olan ana hat. 6.18.22 öncesi 6.18.x’ler ve 6.19.12 öncesi 6.19.x’ler.

Sürümünü kontrol etmek için klasik:

uname -r

Sistemde hangi setuid binary’lere sahip olduğunu görmek istiyorsan:

find / -perm -4000 -type f 2>/dev/null

Mitigation tarafında AF_ALG’yi container’lardan ve unprivileged user’lardan kaldırmak ilk adım.

seccomp profilleriyle “socket(AF_ALG, …)” çağrısını block etmek mümkün.

Ubuntu, RHEL, SUSE, Amazon Linux yamalarını çıkardı.

Kernel update yapılabiliyorsa öncelik orada.

Container breakout’a dair bir not: page cache host ile shared olduğundan bu primitive container sınırlarını da aşıyor.

Yani container içindeki bir saldırgan, host üzerindeki bir setuid binary’yi etkileyebiliyor.

Kubernetes ortamlarında bu olay ayrıca konuşuluyor şu sıralar.

Bu çapta bir şeyin 8 yıl boyunca radarın altında kalması bizi çok şaşırtmamalı.

Crypto API’nin kullanıcı space’inden kullanılır olması zaten her zaman tartışmalı bir tasarım kararıydı.

Kaynaklar:

https://www.wiz.io/blog/copyfail-cve-2026-31431-linux-privilege-escalation-vulnerability
https://nvd.nist.gov/vuln/detail/CVE-2026-31431