Pod koniec kwietnia ujawniono CVE-2026-31431, nazwaną CopyFail. Podatność w module algif_aead pozwala każdemu lokalnemu użytkownikowi uzyskać roota, bez race condition, ze 100% skutecznością. Siedziała w kernelu od 2017 roku.

Kluczowa opcja to CONFIG_CRYPTO_USER_API_AEAD. Jeśli jest włączona (y lub m), system jest podatny (o ile nie ma jeszcze patcha w kernelu).

Ale sam AEAD to nie jedyny problem. Eric Biggers, maintainer podsystemu kryptograficznego kernela, zalecił wyłączenie całej rodziny CONFIG_CRYPTO_USER_API_*, bo AF_ALG to interfejs, którego większość systemów nie potrzebuje, a który niepotrzebnie zwiększa powierzchnię ataku.

Sprawdź w Kernel Checkerze

Kernel Checker sprawdza teraz 7 opcji związanych z CopyFail:

CONFIG_CRYPTO_USER_API             = is not set
CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE = is not set
CONFIG_CRYPTO_USER_API_AEAD        = is not set
CONFIG_CRYPTO_USER_API_HASH        = is not set
CONFIG_CRYPTO_USER_API_RNG         = is not set
CONFIG_CRYPTO_USER_API_RNG_CAVP    = is not set
CONFIG_CRYPTO_USER_API_SKCIPHER    = is not set

Wszystkie powinny być wyłączone. Jeśli którakolwiek jest ustawiona na y lub m, Kernel Checker oznaczy ją jako FAIL w kategorii Cut Attack Surface.

Żeby sprawdzić:

  1. Otwórz Kernel Checker
  2. Wrzuć swój plik .config (znajdziesz go w /boot/config-$(uname -r))
  3. W wynikach szukaj sekcji Cut Attack Surface i opcji CRYPTO_USER_API*

Szybkie sprawdzenie z terminala

Jeśli chcesz tylko sprawdzić CopyFail bez pełnej analizy:

grep CONFIG_CRYPTO_USER_API /boot/config-$(uname -r)

Bezpieczny wynik:

# CONFIG_CRYPTO_USER_API is not set

Niebezpieczny:

CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_AEAD=m

Co zrobić jeśli jest włączone

Opcja 1: zablokuj moduł (bez rekompilacji)

Jeśli opcja jest ustawiona jako m (moduł), możesz go zablokować:

sudo tee /etc/modprobe.d/disable-algif.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/false
EOF

Sprawdź czy moduł nie jest już załadowany:

lsmod | grep algif_aead

Jeśli jest, potrzebny restart.

Opcja 2: rekompilacja kernela

Przy następnej kompilacji wyłącz całą rodzinę:

scripts/config --disable CONFIG_CRYPTO_USER_API
scripts/config --disable CONFIG_CRYPTO_USER_API_AEAD
scripts/config --disable CONFIG_CRYPTO_USER_API_HASH
scripts/config --disable CONFIG_CRYPTO_USER_API_RNG
scripts/config --disable CONFIG_CRYPTO_USER_API_SKCIPHER
make oldconfig
make -j$(nproc)
sudo make modules_install install

Opcja 3: poczekaj na patch dystrybucji

Jeśli nie kompilujesz kernela samodzielnie, czekaj na aktualizację od swojej dystrybucji. Poprawka jest w mainline (commit a664bf3d603d). W międzyczasie zastosuj opcję 1.

Kto nie jest podatny

Jeśli CONFIG_CRYPTO_USER_API_AEAD jest wyłączone, exploit nie zadziała, bo nie da się otworzyć socketu AF_ALG z typem AEAD. Nawet jeśli CONFIG_CRYPTO_AEAD=y (wewnętrzne API kernela), bez interfejsu userspace atakujący nie ma jak do niego dotrzeć.


Więcej o samej podatności: CopyFail: 9 lat ukrytej eskalacji uprawnień w kernelu

Pełna analiza konfiguracji kernela: Kernel Checker | cz. 2: sysctl | cz. 3: parametry boota