TL;DR

1 W dniu 17 kwietnia 2026 roku CERT Polska ujawnił dwie podatności w bibliotece PAC4J — 2 podatność typu CSRF (CVE-2026-40458) oraz 3 podatność typu LDAP Injection (CVE-2026-40459). Obie luki wpływają na szeroki zakres wersji biblioteki i mogą prowadzić do nieautoryzowanego dostępu do kont użytkowników oraz systemów katalogowych. Jeśli Twoja aplikacja korzysta z PAC4J — aktualizacja do wersji naprawionej jest priorytetem.

W skrócie: Dwie podatności w PAC4J umożliwiają atakującemu zmianę haseł użytkowników bez ich wiedzy (CSRF) oraz dostęp do katalogów LDAP (LDAP Injection). 4 5 Dotyczy wersji 4.0–6.4.1. Naprawy dostępne.


Co to PAC4J i dlaczego to ważne

PAC4J to popularna biblioteka Java/Scala do obsługi uwierzytelniania i autoryzacji. Używana jest w aplikacjach webowych do zarządzania logowaniem, sesją i ochrony przed atakami. Jeśli Twoja aplikacja — szczególnie w sektorze finansowym, e-commerce czy administracji — korzysta z PAC4J, podatności te mogą bezpośrednio zagrażać bezpieczeństwu użytkowników.


Podatność 1: CSRF — zmiana profilu bez zgody użytkownika

Jak działa atak

2 CVE-2026-40458 to podatność typu CSRF (Cross-Site Request Forgery — atak polegający na wysłaniu sfałszowanego żądania w imieniu ofiary). 6 Atakujący może przygotować złośliwą stronę, która po odwiedzeniu przez ofiarę wysyła sfałszowane żądanie z tokenem kolidującym z prawidłowym tokenem CSRF. Atak nie wymaga wcześniejszej znajomości tokenu ani jego hasha.

Klucz do podatności leży w mechanizmie walidacji tokenu. 7 Kolizje deterministycznej funkcji String.hashCode() mogą być obliczone w locie, co skutecznie zmniejsza przestrzeń tokenu do 32 bitów. Oznacza to, że atakujący może w praktyce odtworzyć prawidłowy token w rozsądnym czasie obliczeniowym.

Konsekwencje

8 Atak umożliwia obejście ochrony CSRF i wykonanie operacji takich jak zmiana profilu, hasła czy łączenie kont bez wiedzy i zgody użytkownika. Dla polskich firm e-commerce czy banków oznacza to potencjalną utratę kontroli nad kontami klientów.

Wersje podatne

4 CVE-2026-40458 dotyczy wersji PAC4J od 5.0 do 5.7.10 oraz od 6.0 do 6.4.1.

Naprawa

9 Problem został naprawiony w wersjach 5.7.10 i 6.4.1.


Podatność 2: LDAP Injection — dostęp do katalogów

Jak działa atak

3 CVE-2026-40459 to podatność typu LDAP Injection. 10 Zdalny atakujący o niskich uprawnieniach może wstrzyknąć spreparowaną składnię LDAP do parametrów wyszukiwania opartych na identyfikatorze (ID). LDAP Injection działa podobnie do SQL Injection — atakujący modyfikuje zapytanie do katalogu, aby zmienić jego logikę.

Konsekwencje

11 Atak może skutkować nieautoryzowanymi zapytaniami LDAP oraz wykonywaniem dowolnych operacji na katalogu. W praktyce oznacza to dostęp do listy użytkowników, grup, uprawnień, a w skrajnych przypadkach — modyfikację danych katalogowych.

Wersje podatne

5 CVE-2026-40459 dotyczy wersji PAC4J od 4.0 do 4.5.10, od 5.0 do 5.7.10 oraz od 6.0 do 6.4.1. Zakres jest szerszy niż w przypadku CSRF — obejmuje nawet starsze wersje 4.x.

Naprawa

12 Problem został naprawiony w wersjach 4.5.10, 5.7.10 i 6.4.1.


Wskaźniki kompromitacji

Nie ma publicznie dostępnych IoC (Indicators of Compromise) dla tych podatności, ponieważ są to luki w kodzie biblioteki, a nie aktywne kampanie. Jednak możesz sprawdzić:

  • Wersję PAC4J w swoim projekcie: grep -r pac4j pom.xml (Maven) lub grep -r pac4j build.gradle (Gradle)
  • Logi aplikacji pod kątem nieoczekiwanych zmian profilu/hasła użytkowników
  • Logi LDAP pod kątem anomalnych zapytań zawierających znaki specjalne (*, (, ), &, |)

Co zrobić w 24-48 godzin

Krok 1: Zidentyfikuj użycie PAC4J (2h)

  • Przeszukaj repozytoria kodu pod kątem zależności PAC4J
  • Sprawdź wersję w pom.xml, build.gradle lub package.json
  • Jeśli używasz PAC4J w wersji podatnej — przejdź do kroku 2

Krok 2: Przygotuj aktualizację (4h)

  • Pobierz naprawioną wersję: 5.7.10, 6.4.1 lub 4.5.10 (w zależności od gałęzi)
  • Uruchom testy jednostkowe i integracyjne w środowisku dev
  • Sprawdź, czy aplikacja startuje bez błędów

Krok 3: Wdrożenie (24h)

  • Wdrażaj aktualizację na środowisko staging
  • Przeprowadź smoke testy (logowanie, zmiana profilu, operacje LDAP)
  • Wdrażaj na produkcję w godzinach o niskim ruchu
  • Monitoruj logi aplikacji przez 2-4 godziny po wdrożeniu

Krok 4: Komunikacja z użytkownikami (opcjonalnie)

  • Jeśli aplikacja przechowuje dane wrażliwe (hasła, dane osobowe) — rozważ powiadomienie użytkowników o podatności i zalecenie zmiany hasła
  • W Polsce obowiązuje RODO — jeśli doszło do naruszenia — musisz powiadomić UODO

Kontekst dla polskich firm

PAC4J jest szczególnie popularna w:

  • Aplikacjach bankowych i finansowych — gdzie CSRF i LDAP Injection mogą prowadzić do nieautoryzowanych transakcji
  • Systemach e-commerce — gdzie zmiana profilu/hasła użytkownika to bezpośrednia strata dla sklepu
  • Portalach administracyjnych — gdzie dostęp do katalogów LDAP oznacza dostęp do danych pracowników i systemów

Jeśli Twoja firma podlega NIS2 (unijna dyrektywa o bezpieczeństwie sieci, obowiązująca od 2024) — aktualizacja bibliotek to obowiązkowy element zarządzania podatnościami.


Atrybucja

13 14 CERT Polska otrzymał zgłoszenie o podatnościach w oprogramowaniu PAC4J i koordynował proces ujawniania informacji. Za zgłoszenie podatności dziękujemy Bartłomiejowi Dmitrukowi (striga.ai).


Źródła

Zobacz też

Footnotes

  1. Data publikacji obu podatności to 17 kwietnia 2026 — https://cert.pl/posts/2026/04/CVE-2026-40458/

  2. CVE-2026-40458 to podatność typu Cross-Site Request Forgery (CSRF) w PAC4J — https://cert.pl/posts/2026/04/CVE-2026-40458/ 2

  3. CVE-2026-40459 to podatność typu LDAP Injection w PAC4J — https://cert.pl/posts/2026/04/CVE-2026-40458/ 2

  4. CVE-2026-40458 dotyczy wersji PAC4J od 5.0 do 5.7.10 oraz od 6.0 do 6.4.1 — https://cert.pl/posts/2026/04/CVE-2026-40458/ 2

  5. CVE-2026-40459 dotyczy wersji PAC4J od 4.0 do 4.5.10, od 5.0 do 5.7.10 oraz od 6.0 do 6.4.1 — https://cert.pl/posts/2026/04/CVE-2026-40458/ 2

  6. W ataku CSRF (CVE-2026-40458) atakujący może wysłać sfałszowane żądanie z tokenem kolidującym z prawdziwym tokenem CSRF bez wcześniejszej znajomości tokenu — https://cert.pl/posts/2026/04/CVE-2026-40458/

  7. Kolizje deterministycznej funkcji String.hashCode() mogą być obliczone w locie, obniżając przestrzeń tokenu do 32 bitów — https://cert.pl/posts/2026/04/CVE-2026-40458/

  8. Atak CSRF (CVE-2026-40458) umożliwia zmianę profilu, hasła czy łączenie kont bez wiedzy i zgody użytkownika — https://cert.pl/posts/2026/04/CVE-2026-40458/

  9. CVE-2026-40458 została naprawiona w wersjach 5.7.10 i 6.4.1 — https://cert.pl/posts/2026/04/CVE-2026-40458/

  10. W ataku LDAP Injection (CVE-2026-40459) zdalny atakujący o niskich uprawnieniach może wstrzyknąć spreparowaną składnię LDAP do parametrów wyszukiwania — https://cert.pl/posts/2026/04/CVE-2026-40458/

  11. LDAP Injection (CVE-2026-40459) może skutkować nieautoryzowanymi zapytaniami LDAP oraz wykonywaniem dowolnych operacji na katalogu — https://cert.pl/posts/2026/04/CVE-2026-40458/

  12. CVE-2026-40459 została naprawiona w wersjach 4.5.10, 5.7.10 i 6.4.1 — https://cert.pl/posts/2026/04/CVE-2026-40458/

  13. Podatności w PAC4J zostały zgłoszone do CERT Polska — https://cert.pl/posts/2026/04/CVE-2026-40458/

  14. Podatności w PAC4J zostały zgłoszone przez Bartłomieja Dmitruka z firmy striga.ai — https://cert.pl/posts/2026/04/CVE-2026-40458/