Sprawdź czy Twój kernel jest podatny na CopyFail (CVE-2026-31431)
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ć:
- Otwórz Kernel Checker
- Wrzuć swój plik
.config(znajdziesz go w/boot/config-$(uname -r)) - 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