Biblioteka DSSRF dla Node.js, przeznaczona do ochrony przed atakami SSRF, zawiera lukę umożliwiającą obejście mechanizmu walidacji wewnętrznych adresów IP. Atakujący może spreparować URL, który przejdzie weryfikację bezpieczeństwa i skieruje żądanie do wewnętrznej infrastruktury sieciowej.
▸ Pokaż oryginał (EN)
DSSRF is a Node.js library that provides a wide range of utilities and advanced SSRF defense checks. Prior to 1.0.4, is_url_safe in src/helpers.ts strips the @ userinfo delimiter with remove_at_symbol_in_string before new URL parses the URL, allowing an attacker-controlled URL to bypass internal-IP validation and cause a client using the original URL to reach an internal service. This issue is fixed in version 1.0.4.
Funkcja `is_url_safe` w pliku `src/helpers.ts` przed przekazaniem URL do parsera `new URL()` usuwa znak `@` (delimiter userinfo) przy pomocy funkcji `remove_at_symbol_in_string`. Powoduje to rozbieżność między URL-em ocenianym przez mechanizm walidacji a URL-em faktycznie używanym przez klienta do wykonania żądania. Atakujący może skonstruować URL zawierający fragment userinfo (np. `http://user@wewnętrzny-adres-IP/`), który po usunięciu znaku `@` zostanie oceniony jako bezpieczny, lecz oryginalny URL nadal wskaże na zasób w sieci wewnętrznej. Jest to klasyczny przykład podatności CWE-76 (Improper Neutralization of Special Elements — argument injection).
Atakujący bez uwierzytelnienia może zmusić aplikację korzystającą z biblioteki DSSRF do wysłania żądania HTTP do wewnętrznych usług sieciowych, omijając mechanizm ochrony przed SSRF. Prowadzi to do nieautoryzowanego dostępu do zasobów wewnętrznych, takich jak usługi metadanych chmury, bazy danych czy panele administracyjne niedostępne z zewnątrz.
Należy zaktualizować bibliotekę DSSRF do wersji 1.0.4 lub nowszej, w której problem został naprawiony. Szczegóły dostępne w referencjach producenta (GitHub Advisory GHSA-cg4g-m8jx-vjv2).
Biblioteka DSSRF dla Node.js (pakiet dssrf-js) w wersjach wcześniejszych niż 1.0.4.
Poprawka została wprowadzona w commitcie 9211f91bf532433a1a1b27d946571546a63664b3 w repozytorium HackingRepo/dssrf-js. Problem zgłoszono w issue #97, patch dostarczono w pull request #98.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X