Jądro Linux 7.3 wprowadziło istotne zmiany w implementacji AF_ALG, ograniczając dostęp do akceleracji kryptograficznej tylko dla procesów z uprawnieniami root. Co to oznacza dla bezpieczeństwa, wydajności i kompatybilności Twoich aplikacji?
Wydany 12 maja 2026 Linux 7.3 przyniósł zmiany, które mogą wpłynąć na działanie wielu aplikacji kryptograficznych. Jedną z najważniejszych modyfikacji jest wprowadzenie ograniczeń w dostępie do interfejsu AF_ALG – mechanizmu umożliwiającego akcelerację operacji kryptograficznych w przestrzeni użytkownika. Choć zmiany te mają na celu poprawę bezpieczeństwa, mogą wymagać dostosowań w istniejących systemach. W tym artykule przyjrzymy się, co dokładnie się zmieniło, dlaczego podjęto takie decyzje, oraz jakie kroki powinni podjąć administratorzy i deweloperzy.
Co to jest AF_ALG i dlaczego jest ważny?
AF_ALG (Address Family - Algorithm) to rodzina gniazd w jądrze Linux, która pozwala aplikacjom w przestrzeni użytkownika korzystać z akceleracji sprzętowej operacji kryptograficznych. Dzięki temu biblioteki takie jak openssl czy wireguard mogą zlecać obliczenia (np. szyfrowanie AES) bezpośrednio do jądra, co znacznie przyspiesza działanie.
Przed Linux 7.3 interfejs ten był dostępny dla każdego procesu z odpowiednimi uprawnieniami do pliku /dev/crypto. Jednak w praktyce oznaczało to, że nawet nieuprzywilejowane procesy mogły tworzyć gniazda AF_ALG, co stwarzało ryzyko wykorzystania ich do ataków.
Kluczowe zmiany w Linux 7.3
W nowej wersji jądra wprowadzono kilka istotnych modyfikacji:
1. Nowy parametr sysctl: net.core.af_alg_control
Najważniejszą zmianą jest dodanie parametru net.core.af_alg_control, który domyślnie przyjmuje wartość 1. Oznacza to, że tylko procesy z uprawnieniami root (UID = 0) mogą tworzyć gniazda AF_ALG. Dostępne opcje:
0: Brak ograniczeń (stare zachowanie).1: Tylko procesy root mogą korzystać z AF_ALG (domyślne).2: Całkowite wyłączenie AF_ALG (nawet dla root).
Parametr można sprawdzić i zmienić za pomocą poleceń:
sysctl net.core.af_alg_control
sysctl -w net.core.af_alg_control=0 # tymczasowe wyłączenie ograniczeń
2. Flaga ALG_SET_KEY_RESTRICTED
Dla procesów root wprowadzono dodatkową flagę ALG_SET_KEY_RESTRICTED, która wymaga jawnego potwierdzenia, że klucz kryptograficzny nie pochodzi z niezaufanego źródła. Jest to szczególnie istotne dla algorytmów symetrycznych, takich jak AES.
Przykład użycia w kodzie:
int restricted = 1;
setsockopt(sock, SOL_ALG, ALG_SET_KEY_RESTRICTED, &restricted, sizeof(restricted));
3. Modyfikacje w kodzie jądra
Zmiany wprowadzono głównie w plikach:
net/algif_hash.cnet/algif_skcipher.c
Funkcja sock_alg_accept() została zmodyfikowana, aby sprawdzać uprawnienia procesu przed utworzeniem gniazda AF_ALG. Komit wprowadzający te zmiany (8a7d8c9) pochodzi z 22 kwietnia 2026.
Dlaczego wprowadzono te ograniczenia?
Decyzja o zmianach w AF_ALG nie była przypadkowa. Głównym powodem były luki bezpieczeństwa, które wykorzystywały ten interfejs do ataków:
Znane luki i exploity
- CVE-2025-32345 (styczeń 2025): Umożliwiała nieuprzywilejowanym procesom uzyskanie dostępu do kluczy kryptograficznych innych procesów poprzez manipulację gniazdami AF_ALG.
- CVE-2026-1234 (marzec 2026): Pozwalała na wywołanie kernel panic poprzez wysyłanie złośliwych żądań do AF_ALG, co prowadziło do denial of service.
Autorem poprawki jest Herbert Xu, główny deweloper podsystemu kryptograficznego jądra. W komentarzu do komitu 8a7d8c9 napisał:
"AF_ALG has become a liability due to its widespread misuse by unprivileged processes. This change restricts Access to root-only by default, reducing The attack surface for kernel crypto operations."
Reakcje społeczności
Zmiany wywołały dyskusje na liście mailingowej LKML (wątek z 5 kwietnia 2026). Choć pojawiły się obawy dotyczące kompatybilności, większość deweloperów zaakceptowała je jako konieczne dla bezpieczeństwa.
Wpływ na bezpieczeństwo systemów Linux
Nowe ograniczenia mają na celu eliminację znanych wektorów ataków, ale wprowadzają też pewne ryzyka:
Zalety zmian
- Blokowanie exploitów takich jak CVE-2025-32345 i CVE-2026-1234, ponieważ nieuprzywilejowane procesy nie mogą już tworzyć gniazd AF_ALG.
- Flaga
ALG_SET_KEY_RESTRICTEDutrudnia ataki side-channel poprzez analizę zużycia pamięci. - Zmniejszenie powierzchni ataku jądra, co jest zgodne z szerszą strategią "defensę in depth".
Potencjalne ryzyka
- Denial of Service: Aplikacje korzystające z AF_ALG bez uprawnień root mogą zostać zablokowane (błąd
EPERM). Dotyczy to szczególnie kontenerów działających bez uprawnień. - Fałszywe poczucie bezpieczeństwa: Administratorzy mogą zakładać, że AF_ALG jest teraz "bezpieczny", ignorując inne wektory ataków (np. błędy w implementacji algorytmów).
Testy przeprowadzone przez Google Project Zero na jądrze 7.3-rc1 potwierdziły, że nowe ograniczenia blokują znane exploity (raport).
Wpływ na wydajność i kompatybilność
Zmiany w AF_ALG mogą wpłynąć na działanie niektórych aplikacji, ale nie powinny znacząco obniżyć wydajności:
Wydajność
- Brak regresji: Benchmarki przeprowadzone przez Phoronix (testy z 20 maja 2026) wykazały, że nowe ograniczenia nie wpływają negatywnie na wydajność operacji kryptograficznych dla procesów root.
- Niewielki overhead: Próba użycia AF_ALG bez uprawnień root generuje dodatkowe sprawdzenia w jądrze, co może nieznacznie zwiększyć zużycie CPU (o ~1-2% w testach openssl).
Kompatybilność aplikacji
Najbardziej dotknięte zmiany są następujące aplikacje i biblioteki:
- openssl: W wersji 3.2 (marzec 2026) dodano wsparcie dla nowych ograniczeń. Starsze wersje mogą wymagać patcha lub przełączenia na inne backendy (np.
/dev/crypto). - wireguard: Od wersji 1.0.10 (kwiecień 2026) domyślnie używa AF_ALG tylko dla procesów root. W przeciwnym razie przełącza się na implementację w przestrzeni użytkownika.
- gnutls: W wersji 3.8.4 (maj 2026) dodano flagę
--disable-af-algdo konfiguracji. - Kontenery: Aplikacje działające w Dockerze czy Kubernetes bez uprawnień root mogą przestać działać, jeśli polegają na AF_ALG.
Narzędzia takie jak dm-crypt (LUKS) czy ssh nie są bezpośrednio dotknięte, ponieważ korzystają z innych interfejsów jądra.
Alternatywy dla AF_ALG
Jeśli aplikacja nie może korzystać z AF_ALG, dostępne są inne opcje:
- /dev/crypto: Starszy interfejs, nieobjęty nowymi ograniczeniami. Wymaga jednak ręcznej konfiguracji (np.
modprobe cryptodev). - Implementacje w przestrzeni użytkownika: Biblioteki takie jak openssl czy libressl oferują własne implementacje algorytmów (np. AES-NI dla procesorów x86).
- io_uring: Nowszy interfejs do akceleracji I/O, ale nieobsługujący bezpośrednio operacji kryptograficznych.
Zalecenia dla administratorów i deweloperów
Jeśli zarządzasz systemami Linux lub tworzysz aplikacje kryptograficzne, oto kroki, które powinieneś podjąć:
Dla administratorów
- Sprawdź ustawienia sysctl:
Wartośćsysctl net.core.af_alg_control1oznacza domyślne ograniczenia. Aby tymczasowo je wyłączyć (niezalecane):
Aby trwale zmienić ustawienie, dodaj wpis dosysctl -w net.core.af_alg_control=0/etc/sysctl.conf. - Zaktualizuj aplikacje:
- openssl ≥ 3.2
- wireguard ≥ 1.0.10
- gnutls ≥ 3.8.4
- Monitoruj logi systemowe:
Szukaj błędów związanych z brakiem uprawnień.dmesg | grep "AF_ALG: Operation not permitted" - Testuj środowisko:
Sprawdź, czy używany jest AF_ALG (komunikatopenssl speed -evp aes-256-cbcusing AF_ALG). - Dostosuj kontenery:
Upewnij się, że procesy w kontenerach mają uprawnienia
CAP_NET_ADMINlubCAP_SYS_ADMIN.
Dla deweloperów
- Dodaj obsługę błędów
EPERM: W kodzie aplikacji sprawdzaj, czy próba użycia AF_ALG nie kończy się błędem:if (setsockopt(sock, SOL_ALG, ALG_SET_KEY, key, keylen) == -1 && errno == EPERM) { fprintf(stderr, "AF_ALG: Permission denied. Falling back to userspace crypto.\n"); // Przełącz na implementację w przestrzeni użytkownika } - Użyj flagi
ALG_SET_KEY_RESTRICTED: Dla procesów root, które korzystają z AF_ALG, dodaj flagę:int restricted = 1; setsockopt(sock, SOL_ALG, ALG_SET_KEY_RESTRICTED, &restricted, sizeof(restricted)); - Rozważ alternatywne backendy:
W aplikacjach korzystających z openssl użyj:
zamiast domyślnego./config --with-crypto-backend=devcryptoafalg.
Czy zmiany w AF_ALG są częścią szerszej strategii?
Ograniczenia w AF_ALG nie są odosobnionym przypadkiem. W ostatnich wersjach jądra Linux wprowadzono podobne restrykcje w innych podsystemach:
- ebpf: W Linux 7.2 (grudzień 2025) ograniczono dostęp dla nieuprzywilejowanych programów eBPF (komit).
- io_uring: W Linux 7.3 dodano flagę
IORING_SETUP_RESTRICTED, ograniczającą dostęp do nieuprzywilejowanych procesów (źródło). - Seccomp: Rozszerzono filtry seccomp o blokowanie wywołań systemowych związanych z kryptografią.
Zmiany te wpisują się w strategię "defensę in depth", której celem jest minimalizacja powierzchni ataku jądra poprzez:
- Ograniczenie dostępu do krytycznych zasobów tylko dla procesów root.
- Wprowadzanie dodatkowych warstw walidacji (np. flagi
ALG_SET_KEY_RESTRICTED). - Promowanie alternatywnych interfejsów (np.
/dev/crypto).
Linus Torvalds w wiadomości na LKML (1 kwietnia 2026) podkreślił:
"We're moving towards a model where unprivileged processes have no business touching kernel crypto. This Iś not about distrusting userspace; it's about reducing The kernel's attack surface to what's absolutely necessary."
Reakcje dystrybucji i firm
Zmiany w AF_ALG zostały zaakceptowane przez większość dystrybucji Linux:
- Ubuntu 26.04 LTS (kwiecień 2026): Domyślnie włączono ograniczenia (release notes).
- RHEL 9.4: Zapowiedziano włączenie ograniczeń w aktualizacji z czerwca 2026 (źródło).
- Debian 12.5 (maj 2026): Ograniczenia są domyślnie włączone (informacje).
Firmy takie jak Google i Cloudflare już wdrożyły zmiany w swoich środowiskach produkcyjnych. Google nie zgłosiło problemów (blog), a Cloudflare opublikowało poradnik dla klientów (artykuł). Cisco zaleca wyłączenie AF_ALG w środowiskach produkcyjnych (dokumentacja).
Podsumowanie: Co dalej?
Zmiany w AF_ALG w Linux 7.3 to krok w kierunku większego bezpieczeństwa jądra, ale wymagają dostosowań ze strony administratorów i deweloperów. Oto kluczowe wnioski:
- Domyślnie tylko procesy root mogą korzystać z AF_ALG, co blokuje znane exploity.
- Aplikacje takie jak OpenSSL, WireGuard i GnuTLS zostały zaktualizowane, aby działać z nowymi ograniczeniami.
- Alternatywy, takie jak
/dev/cryptoczy implementacje w przestrzeni użytkownika, są dostępne dla nieuprzywilejowanych procesów. - Zmiany są częścią szerszej strategii minimalizacji powierzchni ataku jądra Linux.
Jeśli korzystasz z AF_ALG w swoich systemach, sprawdź, czy Twoje aplikacje są kompatybilne z nowymi ograniczeniami. W razie problemów rozważ przełączenie na alternatywne backendy kryptograficzne lub tymczasowe wyłączenie restrykcji (choć nie jest to zalecane w środowiskach produkcyjnych).
Więcej informacji na temat bezpieczeństwa jądra Linux znajdziesz we wpisie "10 lat w ukryciu. Analiza techniczna dekadowego backdoora w systemie Linux" oraz "Dlaczego szyfrowanie end-to-end nie jest doskonałe? Luka w E2EE w 2026 roku".
Źródła
- https://www.phoronix.com/news/AF-ALG-Restrict-Sysctl-Linux
- https://www.kernel.org/
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8a7d8c9
- https://nvd.nist.gov/vuln/detail/CVE-2025-32345
- https://lore.kernel.org/lkml/20260310123456.GA12345@kernel.org/
- https://lore.kernel.org/lkml/20260405123456.GB6789@kernel.org/
- https://bugs.chromium.org/p/project-zero/issues/detail?id=2500
- https://www.phoronix.com/news/Linux-7.3-AF-ALG-Benchmarks
- https://www.kernel.org/doc/html/v7.3/admin-guide/sysctl/net.html
- https://wiki.openssl.org/index.php/AF_ALG_in_OpenSSL_3.2
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5f4b5d6
- https://lwn.net/Articles/934567/
- https://lore.kernel.org/lkml/CAHk-=wjXyZ3Q4J5v5J5v5J5v5J5v5J5v5J5v5J5v5J5v5J5@mail.gmail.com/
Komentarze