Po sieci krąży kolejny „Dirty", tym razem DirtyClone. To podatność typu local privilege escalation w jądrze Linuksa, oznaczona jako CVE-2026-43503 z oceną CVSS 8.8. Pozwala zwykłemu, nieuprzywilejowanemu użytkownikowi zostać rootem, a robi to wyjątkowo cicho: nadpisuje zaufany plik binarny w pamięci, nie dotykając go na dysku. Publiczny opis exploita opublikował 25 czerwca zespół JFrog Security Research.

Na czym polega błąd

Sercem problemu jest jedna funkcja jądra, __pskb_copy_fclone(). Podczas klonowania pakietu sieciowego (struktura sk_buff) gubi ona flagę SKBFL_SHARED_FRAG. Ta flaga to mechanizm bezpieczeństwa: oznacza, że fragmenty bufora wskazują na współdzielone strony z page cache, czyli na pamięć podpiętą do pliku na dysku. Kiedy flaga jest ustawiona, IPsec przed deszyfrowaniem robi kopię, zamiast pisać w oryginalne strony.

Gubiąc flagę podczas klonowania, jądro zaczyna traktować strony podpięte do pliku jako zwykłą, bezpiecznie zapisywalną pamięć pakietu. To otwiera prymityw zapisu w cudzą, plikową pamięć.

Jak wygląda atak

Łańcuch jest sprytny i składa się z kilku kroków:

  1. Atakujący ładuje do pamięci uprzywilejowany plik, na przykład /usr/bin/su, tak żeby jego strony znalazły się w page cache.
  2. Podpina te strony jako fragmenty do pakietu sieciowego.
  3. Wymusza sklonowanie pakietu przez netfilterowy target TEE, który wewnętrznie woła nf_dup_ipv4(), a ten __pskb_copy_fclone(). W tym momencie ginie flaga SKBFL_SHARED_FRAG.
  4. Przepuszcza pakiet przez kontrolowany przez siebie tunel IPsec. Deszyfrowanie ESP działa w miejscu (in-place) i wpisuje kontrolowane bajty prosto w strony page cache należące do /usr/bin/su.
  5. Nadpisane zostają instrukcje sprawdzające uprawnienia w su. Od tej pory uruchomienie su daje roota.

Żeby to wszystko ustawić (reguła TEE, tunel IPsec, CAP_NET_ADMIN), atakujący korzysta z nieuprzywilejowanych przestrzeni nazw użytkownika.

Dlaczego to takie groźne

Modyfikacja żyje wyłącznie w pamięci jądra. Plik /usr/bin/su na dysku ani drgnie, więc:

  • narzędzia do kontroli integralności plików (AIDE, Tripwire, sumy kontrolne) niczego nie wykryją, bo na dysku nic się nie zmieniło,
  • atak nie zostawia wpisów w logach jądra ani śladu w audycie,
  • po restarcie systemu oryginalny plik wraca z dysku, więc dowód znika sam.

To dokładnie ten rodzaj podatności, który wymyka się klasycznemu monitoringowi.

Rodzina DirtyFrag

DirtyClone nie jest osamotniony. To czwarty błąd z tej samej rodziny, wszystkie mają wspólny korzeń: pamięć podpięta do pliku bywa traktowana jak dane pakietu, a operacja sieciowa pisze w miejscu tam, gdzie powinna zrobić kopię.

  • CVE-2026-43284 i CVE-2026-43500 (pierwotny DirtyFrag)
  • CVE-2026-46300 (Fragnesia)
  • CVE-2026-43503 (DirtyClone)

Kogo to dotyczy

Podatne są popularne dystrybucje z włączonymi nieuprzywilejowanymi przestrzeniami nazw użytkownika: Debian, Fedora i Ubuntu, o ile ich jądro nie ma pełnego łańcucha poprawek. Szczególnie narażone są środowiska wielodostępne: serwery z wieloma użytkownikami, runnery CI, hosty kontenerów i klastry Kubernetes, gdzie niezaufani użytkownicy mogą tworzyć przestrzenie nazw.

Jak się bronić

Najważniejsze: zaktualizuj jądro. Poprawka trafiła do mainline 21 maja (commit 48f6a5356a33) i pierwszy raz pojawiła się w Linux v7.1-rc5. Backporty do gałęzi stable weszły w kolejnych dniach, więc świeże jądro z dystrybucji załatwia problem.

Zanim zaktualizujesz, doraźnie:

  • Wyłącz nieuprzywilejowane przestrzenie nazw. Na Debianie i Ubuntu odcina to drogę do CAP_NET_ADMIN:
sysctl -w kernel.unprivileged_userns_clone=0
  • Zablokuj moduły dostarczające prymityw deszyfrowania in-place. To wyłącza IPsec i AFS, więc rób to świadomie:
echo -e "blacklist esp4\nblacklist esp6\nblacklist rxrpc" > /etc/modprobe.d/dirtyclone.conf

Warto też mieć na maszynie coś, co wykrywa manipulację poświadczeniami w czasie działania. Moduł LKRG potrafi zauważyć nagłą, nieautoryzowaną zmianę uprawnień procesu, czyli dokładnie efekt końcowy tego exploita.

Kalendarium

  • 19 maja 2026: JFrog zgłasza błąd maintainerom jądra
  • 21 maja: poprawka scalona do mainline (commit 48f6a5356a33), v7.1-rc5
  • 23 maja: opublikowane CVE-2026-43503
  • ok. 24 maja: backporty do stable
  • 25 czerwca: JFrog publikuje szczegółową analizę z działającym exploitem

Wniosek

DirtyClone dobrze pokazuje, że granica między stosem sieciowym a pamięcią plikową bywa cieńsza, niż się wydaje. Jedna zgubiona flaga zamienia niewinne klonowanie pakietu w zapis do cudzego, zaufanego pliku. Jeśli zarządzasz maszyną wielodostępną, potraktuj to priorytetowo: zaktualizuj jądro, a do czasu aktualizacji ogranicz nieuprzywilejowane przestrzenie nazw.

Źródła: JFrog Security Research, The Hacker News, SecurityWeek, Sansec