Ranjivost u paketu node-netmask NPM koji se koristi u 270 tisuća projekata

Paket node-netmask NPM, koji ima oko 3 milijuna preuzimanja tjedno i koristi se kao ovisnost o više od 270 tisuća projekata na GitHubu, ima ranjivost (CVE-2021-28918) koja mu omogućuje zaobilaženje provjera koje koriste mrežnu masku za određivanje pojavljivanja za raspone adresa ili za filtriranje. Problem je riješen u izdanju node-netmask 2.0.0.

Ranjivost omogućuje tretiranje vanjske IP adrese kao adrese iz interne mreže i obrnuto, te uz određenu logiku korištenja modula node-netmask u aplikaciji za izvođenje SSRF (Server-side request forgery), RFI (Udaljeno uključivanje datoteka) i LFI (uključivanje lokalnih datoteka) napadi) za pristup resursima na internoj mreži i uključivanje vanjskih ili lokalnih datoteka u lanac izvršenja. Problem je u tome što prema specifikaciji, vrijednosti niza adresa koje počinju s nulom treba tumačiti kao oktalne brojeve, ali modul mrežne maske čvora to ne uzima u obzir i tretira ih kao decimalne brojeve.

Na primjer, napadač može zatražiti lokalni resurs navođenjem vrijednosti "0177.0.0.1", koja odgovara "127.0.0.1", ali modul "node-netmask" odbacit će null i tretirati 0177.0.0.1″ kao " 177.0.0.1", što u aplikaciji prilikom evaluacije pravila pristupa neće biti moguće utvrditi identitet s "127.0.0.1". Slično, napadač može navesti adresu "0127.0.0.1", koja bi trebala biti identična "87.0.0.1", ali će se tretirati kao "127.0.0.1" u modulu "node-netmask". Slično tome, možete prevariti provjeru pristupa intranetskim adresama navođenjem vrijednosti poput "012.0.0.1" (ekvivalentno "10.0.0.1", ali će se obraditi kao 12.0.0.1 tijekom provjere).

Istraživači koji su identificirali problem nazivaju ga katastrofalnim i daju nekoliko scenarija napada, ali većina njih izgleda spekulativno. Na primjer, govori se o mogućnosti napada na aplikaciju temeljenu na Node.js koja uspostavlja vanjske veze kako bi zatražila resurs na temelju parametara ili podataka ulaznog zahtjeva, ali aplikacija nije posebno imenovana niti detaljizirana. Čak i ako nađete aplikacije koje učitavaju resurse na temelju unesenih IP adresa, nije posve jasno kako se ranjivost može iskoristiti u praksi bez povezivanja na lokalnu mrežu ili bez stjecanja kontrole nad “mirror” IP adresama.

Istraživači samo pretpostavljaju da vlasnici 87.0.0.1 (Telecom Italia) i 0177.0.0.1 (Brasil Telecom) mogu zaobići ograničenje pristupa na 127.0.0.1. Realističniji scenarij je iskorištavanje ranjivosti za zaobilaženje raznih popisa blokiranih na strani aplikacije. Problem se također može primijeniti na dijeljenje definicije intranetskih raspona u NPM modulu "private-ip".

Izvor: opennet.ru

Dodajte komentar