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 navode nekoliko scenarija napada, ali većina njih djeluje spekulativno. Na primjer, spominju mogućnost napada na aplikaciju temeljenu na Node.js-u koja uspostavlja vanjske veze kako bi zatražila resurs na temelju parametara ili ulaznih podataka zahtjeva, ali ne imenuju konkretnu aplikaciju niti daju nikakve detalje. Čak i ako pronađu aplikacije koje preuzimaju resurse na temelju ulaznih podataka IP adrese, nije sasvim jasno kako se ranjivost može iskoristiti u praksi bez povezivanja s lokalnom mrežom 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. 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
