CVE-2026-86472
ŚrednieCVSS 4.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 6 - wyżej niż 6% wszystkich znanych CVE
Streszczenie
fast-uri to parser URI zgodny z RFC 3986 dla Node.js używany przez Fastify i ajv. W wersjach przed 2.4.7, od 3.0.0 do 3.1.7 oraz od 4.0.0 do 4.1.4 fast-uri zamienia host na małe litery przed jego dekodowaniem procentowym, więc zakodowany procentowo wielki oktet, np. %41, dekoduje się do dosłownego A, które nigdy nie zostaje zamienione na małą literę. Dla referencji względem schematu, takiej jak //host, nie ma schematu, więc kanonizacja hosta, która normalnie by to naprawiła, nie uruchamia się, a parse, normalize i equal dają różne wyniki dla tego samego hosta. Aplikacja podejmująca decyzję o hoście z rozróżnianiem wielkości liter na podstawie wyniku fast-uri, np. lista dozwolonych lub zabronionych hostów porównująca sparsowany host lub używająca equal, może zostać ominięta przez zakodowany procentowo wielki oktet, a ponieważ nazwy hostów w DNS i HTTP są niewrażliwe na wielkość liter, omijający zapis i tak trafia do hosta, który kontrola miała blokować.
Ocena ryzyka
Atakujący może ominąć kontrole oparte na nazwie hosta, takie jak listy dozwolonych lub zabronionych, w aplikacjach używających fast-uri. Może to prowadzić do żądań do nieautoryzowanych hostów i obejścia mechanizmów bezpieczeństwa.
Rekomendacja
Zaktualizuj fast-uri do wersji 2.4.7, 3.1.8 lub 4.1.5 bądź nowszej. Jako obejście porównuj hosty bez rozróżniania wielkości liter, zamieniając sparsowany host na małe litery przed każdą decyzją o dozwoleniu lub zablokowaniu.
Inne podatności w fast-uri
Zobacz wszystkie- CVE-2026-86818Średnie
fast-uri to parser URI zgodny z RFC 3986 dla Node.js używany przez Fastify i ajv, który w wersji 4.1.3 dodał parser schematu mailto. W wersjach 4.1.3 i 4.1.4 parser mailto porównuje nazwy pól zapytania z nazwami zarezerwowanymi to, subject i body, gdy nazwa jest jeszcze zakodowana procentowo, a dekoduje ją dopiero przy zapisie jako nagłówek ogólny. W efekcie zakodowana procentowo nazwa pola zarezerwowanego nie jest rozpoznawana przy parsowaniu, ale jest ponownie emitowana jako dosłowna nazwa pola przy serializacji URI. Aplikacja, która waliduje, loguje lub wyświetla listę odbiorców z pierwszego parsowania, a następnie serializuje URI i wysyła je, może w ten sposób nieświadomie uzyskać odbiorcę wybranego przez atakującego, a pola subject i body mogą zostać przemycone w tym samym cyklu.
- CVE-2026-84394Wysokie
fast-uri akceptuje host zawierający niezbalansowany lub źle umieszczony nawias bez zgłaszania błędu. Host zaczynający się od nawiasu otwierającego, ale nie kończący się nawiasem zamykającym, nie jest walidowany jako literał IP ani kanonizowany jako nazwa domeny, więc parse() zwraca go jako host z błędem undefined, podczas gdy URL Node i klienci HTTP zbudowani na nim rozwiązują ten sam ciąg do innego hosta. Aplikacja, która odczytuje sparsowany host do podejmowania decyzji, np. denylist SSRF, allowlist przekierowań lub routing proxy, a następnie przekazuje oryginalny URL do klienta HTTP, ocenia swoją politykę względem ciągu, który nie jest hostem, do którego trafia żądanie. Ten sam host jest przenoszony przez normalize, equal i resolve. Dotyczy to wersji fast-uri 2.4.5, 3.1.6 i 4.1.3; naprawiono w 2.4.6, 3.1.7 i 4.1.4, gdzie parse() zgłasza nieprawidłowy host dla każdego hosta zawierającego nawias, ale niebędącego poprawnym literałem IPv6.
- CVE-2026-84292Wysokie
fast-uri serializuje komponent portu URI bez walidacji. Przy ponownym składaniu authority, userinfo i host są escapowane, ale port jest dołączany dosłownie, więc wartość portu niebędąca ciągiem cyfr może wstrzyknąć separatory authority, co prowadzi do przekierowania na host kontrolowany przez atakującego. Dotyczy to wersji przed 2.4.6, od 3.0.0 przed 3.1.7 i od 4.0.0 przed 4.1.4.
- CVE-2026-76172Wysokie
Parser URI fast-uri dla Node.js nieprawidłowo przetwarza schemat z zakodowanymi procentowo ukośnikami, co pozwala atakującemu na manipulację hostem i obejście list dozwolonych. Podatność dotyczy wersji 2.3.1 do 2.4.4, 3.0.0 do 3.1.5 oraz 4.0.0 do 4.1.2.
- CVE-2026-75975Wysokie
Parser URI fast-uri dla Node.js nieprawidłowo waliduje adresy IPv6 w nawiasach, co pozwala na przekształcenie złośliwego hosta w inny adres IPv6, np. loopback lub adres prywatny. Podatność dotyczy wersji 2.3.1 do 2.4.4, 3.0.0 do 3.1.5 oraz 4.0.0 do 4.1.2.
- CVE-2026-75931Wysokie
Parser URI fast-uri dla Node.js nie kanonizuje hosta w referencjach względnych schematu, co prowadzi do niespójności między funkcjami parse, resolve, normalize i equal. Podatność dotyczy wersji 2.4.2 do 2.4.4, 3.1.3 do 3.1.5 oraz 4.0.1 do 4.1.2.
- CVE-2026-75899Wysokie
Parser URI fast-uri dla Node.js dekoduje procentowe sekwencje w nazwie hosta dwukrotnie, co może prowadzić do zmiany docelowego adresu na loopback lub inny adres wewnętrzny. Podatność dotyczy wersji 2.4.1 do 2.4.4, 3.1.2 do 3.1.5 oraz 4.0.0 do 4.1.2.
- CVE-2026-18446Wysokie
Biblioteka fast-uri przed wersjami 4.1.2, 3.1.5 i 2.4.4 nieprawidłowo parsuje URI, gdy zamiast podwójnego ukośnika użyto znaku backslasha. Node.js traktuje backslash jako zamiennik ukośnika, co prowadzi do różnic w parsowaniu hosta. Aplikacje używające fast-uri do egzekwowania polityk opartych na hoście mogą zostać przekierowane na niezamierzony host.
- CVE-2026-16221Wysokie
Podatność w bibliotece fast-uri (wersje 2.3.1-4.1.0, 3.x do 3.1.3, 2.x do 2.4.2). Znak backslash nie jest traktowany jako ogranicznik autorytetu, podczas gdy parser Node.js normalizuje go do slash. Różnica w parsowaniu może prowadzić do ominięcia polityk opartych na hostach (allowlisty, filtrowanie SSRF).
- CVE-2026-13676Wysokie
fast-uri w wersjach 2.3.1 do 3.1.2 oraz 4.0.0 nie kanonizuje nazw hostów Unicode (IDN) w adresach URL rodziny HTTP. Powoduje to rozbieżności między fast-uri a natywnym parserem URL Node.js, co może prowadzić do obejścia polityk opartych na hostach.
Oryginalny opis (angielski, źródło NVD)
fast-uri is a dependency-free RFC 3986 URI parser for Node.js, used by Fastify and ajv. In versions before 2.4.7, from 3.0.0 through 3.1.7, and from 4.0.0 through 4.1.4, fast-uri folds the host to lowercase before it percent-decodes the host, so a percent-encoded uppercase octet such as %41 decodes to a literal A that is never folded. For a scheme-relative reference such as //host there is no scheme, so the host canonicalization that would normally repair this does not run, and parse, normalize, and equal then disagree on the same host. An application that makes a case-sensitive host decision on fast-uri output, for example a host allowlist or denylist that compares the parsed host or uses equal, can be steered past the check with a percent-encoded uppercase octet, and because hostnames are case-insensitive in DNS and HTTP the evading spelling still reaches the host the check meant to gate. The issue is fixed in fast-uri 2.4.7, 3.1.8, and 4.1.5, and users should upgrade to one of those versions or later. As a workaround, compare hosts case-insensitively by lowercasing the parsed host before any allowlist or denylist decision.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

