Ranjivost u paketu node-netmask NPM korištenom u 270 hiljada projekata

Node-netmask NPM paket, koji ima oko 3 miliona preuzimanja tjedno i koristi se kao ovisnost o više od 270 hiljada projekata na GitHubu, ima ranjivost (CVE-2021-28918) koja mu omogućava da zaobiđe provjere koje koriste mrežnu masku za određivanje pojavljivanja za adresiranje raspona ili za filtriranje. Problem je riješen u izdanju node-netmask 2.0.0.

Ranjivost omogućava 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-a (Falsifikovanje zahtjeva na strani servera), RFI (Remote File Inclusion) i LFI (Local File Inclusion) napadi) za pristup resursima na internoj mreži i uključivanje eksternih ili lokalnih datoteka u lanac izvršavanja. Problem je u tome što bi prema specifikaciji vrijednosti adresnog niza koje počinju nulom trebale biti interpretirane kao oktalni brojevi, ali modul node-netmask to ne uzima u obzir i tretira ih kao decimalne brojeve.

Na primjer, napadač može zatražiti lokalni resurs specificiranjem vrijednosti "0177.0.0.1", što odgovara "127.0.0.1", ali modul "node-netmask" će odbaciti null i tretirati 0177.0.0.1" kao " 177.0.0.1", što u aplikaciji prilikom procene pravila pristupa neće biti moguće utvrditi identitet sa "127.0.0.1". Slično tome, napadač može specificirati 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 za pristup intranet adresama tako što ćete navesti vrijednosti poput “012.0.0.1” (ekvivalentno “10.0.0.1”, ali će se obrađivati ​​kao 12.0.0.1 tokom provjere).

Istraživači koji su identificirali problem problem nazivaju katastrofalnim i navode nekoliko scenarija napada, ali većina njih izgleda spekulativno. Na primjer, govori se o mogućnosti napada na aplikaciju zasnovanu na Node.js koja uspostavlja eksterne veze za traženje resursa na osnovu parametara ili podataka zahtjeva za unos, ali aplikacija nije posebno imenovana ili detaljna. Čak i ako pronađete aplikacije koje učitavaju resurse na osnovu unesenih IP adresa, nije sasvim jasno kako se ranjivost može iskoristiti u praksi bez povezivanja na lokalnu mrežu ili bez stjecanja kontrole nad „zrcaljenim“ 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. Realniji scenario je da se ranjivost iskoristi za zaobilaženje raznih blok lista na strani aplikacije. Problem se također može primijeniti na dijeljenje definicije intranet raspona u NPM modulu "private-ip".

izvor: opennet.ru

Dodajte komentar