CVE-2026-90979
WysokieCVSS 7.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 36 - wyżej niż 36% wszystkich znanych CVE
Streszczenie
LDAPCache i LDAPBackingEngine wstawiają wartości %u, %dn i %fqdn do szablonów filtrów LDAP (userFilter, roleFilter) bez pełnego escapowania znaków wymaganych przez RFC 4515. Przed poprawką stosowano jedynie podwójne backslashowanie, co nie zabezpiecza znaków *, (, ) oraz NUL. Nazwa logowania zawierająca te znaki może zmienić strukturę filtra, np. zamieniając dopasowanie równościowe na wieloznaczne lub zamykając/otwierając klauzule filtra.
Ocena ryzyka
Podatność może prowadzić do dopasowania innego wpisu LDAP niż zamierzony, nadania nadmiernych uprawnień (role) lub zmiany konta, na które rozwiązuje się logowanie. Nie jest eksploatowalna przez wszystkie ścieżki — LDAPLoginModule i LDAPPubkeyLoginModule escapują nazwę logowania, ale GSSAPILdapLoginModule oraz LDAPBackingEngine (listRoles) przekazują ją bez escapowania.
Rekomendacja
Należy zastosować poprawkę producenta, która wprowadza pełne escapowanie znaków zgodne z RFC 4515 (*, (, ), NUL) w LDAPCache i LDAPBackingEngine. Do czasu wdrożenia poprawki zaleca się ograniczenie możliwości tworzenia nazw logowania zawierających te znaki oraz weryfikację szablonów filtrów userFilter i roleFilter.
Powiązane podatności
- CVE-2026-117691Krytyczne
W implementacji wiązania SAML HTTP-Redirect w Keycloak występuje luka polegająca na tym, że serwer przetwarza nazwy parametrów zakodowane procentowo (np. %53AMLResponse), podczas gdy logika weryfikacji podpisu sprawdza tylko literalne nazwy parametrów. Atakujący może wykorzystać tę rozbieżność, dostarczając spreparowaną, niepodpisaną wiadomość SAML, którą serwer przetwarza zamiast legalnie podpisanej, co prowadzi do pełnego przejęcia konta użytkowników sfederowanych.
- CVE-2026-96677Krytyczne
Podatność Cross-site Scripting (XSS) w Apache Juneau. Serializacja dokumentów HTML nie koduje podstawień zmiennych w elementach szablonu strony (nagłówek, nawigacja, stopka itp.), więc aplikacje, które umieszczają tam dane z żądania, odzwierciedlają je bez kodowania.
- CVE-2026-73117Krytyczne
Podatność HTTP Response Splitting (wstrzykiwanie CRLF w nagłówkach HTTP) w Apache Juneau. Serwer REST przekazywał wartości nagłówków odpowiedzi i cele przekierowań do kontenera serwletów bez walidacji, co przy danych z żądania mogło pozwolić na wstrzyknięcie nagłówków lub przekierowanie na dowolną witrynę.
- CVE-2026-73116Krytyczne
Podatność niewystarczającej ochrony poświadczeń w Apache Juneau. Klient RestClient podążał za przekierowaniami HTTP, zachowując nagłówki poświadczeń z pierwotnego żądania, więc serwer przekierowujący na inny host, port lub z HTTPS na HTTP mógł otrzymać nagłówki Authorization, Cookie, Proxy-Authorization i X-API-Key.
- CVE-2026-73101Krytyczne
Podatność ujawniania informacji wrażliwych w komunikatach błędów w Apache Juneau. Serwer REST wysyła klientom klasę i treść wewnętrznego wyjątku w nagłówku odpowiedzi "Thrown" przy każdym błędzie oraz może umieszczać wewnętrzne komunikaty wyjątków w treści błędu, nawet przy wyłączonym renderowaniu stosu.
- CVE-2026-73100Krytyczne
Podatność umieszczania informacji wrażliwych w plikach logów w Apache Juneau. Domyślny logger wywołań serwera REST zapisuje nagłówki żądań dla żądań kończących się błędem serwera bez redakcji, więc nagłówki Authorization, Cookie, Proxy-Authorization i X-API-Key trafiają jawnym tekstem do logów aplikacji.
- CVE-2026-73099Krytyczne
Podatność Cross-Site Request Forgery (CSRF) w Apache Juneau. Serwer REST akceptuje parametr zapytania "content", który zastępuje treść żądania i jest domyślnie włączony dla każdej metody HTTP, w tym GET, więc link międzywitrynowy może dostarczyć wybraną przez atakującego treść żądania bez preflight CORS.
- CVE-2026-73098Krytyczne
Podatność nieprawidłowej kontroli dynamicznie ładowanego kodu w Apache Juneau. Przy parsowaniu wartości do właściwości typu java.lang.Class domyślna zamiana klas ładowała wskazaną klasę z włączoną inicjalizacją, więc dane wejściowe wskazujące klasę z classpath aplikacji uruchamiały jej statyczny inicjalizator.
- CVE-2026-121489Krytyczne
Podatność Path Traversal w Apache Juneau. Zasób mikroserwisu DirectoryResource nie utrzymuje ścieżek żądań wewnątrz skonfigurowanego katalogu głównego; gdy aplikacja włączy ustawienia view, upload lub delete (domyślnie wyłączone), klient może czytać, zapisywać lub usuwać pliki poza katalogiem głównym.
- CVE-2026-100109Krytyczne
Wtyczka WordPress Security For WooCommerce w wersjach 1.0.10–1.0.16 nie sprawdza uprawnień podczas tworzenia użytkowników przez akcję dostępną dla niezalogowanych odwiedzających i pozwala wybrać rolę nowego konta. Umożliwia to nieuwierzytelnionemu atakującemu utworzenie konta administratora i przejęcie witryny.
Oryginalny opis (angielski, źródło NVD)
LDAPCache and LDAPBackingEngine build LDAP search filters for user lookup and role lookup by textually substituting the placeholders %u, %dn, and %fqdn (drawn from the login name, the resolved user DN, and its fully qualified namespace form) into administrator-configured filter templates (userFilter, roleFilter). Before the fix, the only sanitization applied to the substituted value was double backslashed: filter = filter.replaceAll(Pattern.quote("%u"), Matcher.quoteReplacement(user)); filter = filter.replace("\\", "\\\\"); This does not escape the other characters RFC 4515 requires escaping in an LDAP search filter: *, (, ), and NUL. A login name containing any of these can change the structure of the resulting filter rather than being matched as a literal value (e.g. a crafted username can turn an equality match into a wildcard match, or close/reopen filter clauses), widening what the search returns and potentially causing a login or role lookup to match an LDAP entry other than the intended one, over-granting roles, and depending on deployment-specific filter templates, potentially affecting which account a login resolved to. It's not exploitable through every entry points: LDAPLoginModule and LDAPPubkeyLoginModule both called Util.doRFC2254Encoding() (correct RFC 4515 escaping) on the login name before handing it to LDAPCache, which masked the missing escaping in LDAPCache for those two call paths. Using LDAPCache directly (bypassing the login modules) does not reproduce through the normal LDAPLoginModule/LDAPPubkeyLoginModule authentication flow for this reason. It does reproduce through two other call paths that reach LDAPCache/LDAPBackingEngine without any prior escaping: * GSSAPILdapLoginModule passes the NameCallback name straight through, unescaped. * LDAPBackingEngine (listRoles) passes principal.getName() straight through, unescaped.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

