Zraniteľnosť v balíku node-netmask NPM používanom v 270 tisíc projektoch

Balík node-netmask NPM, ktorý má asi 3 milióny stiahnutí za týždeň a používa sa ako závislosť na viac ako 270 tisíc projektoch na GitHub, má zraniteľnosť (CVE-2021-28918), ktorá mu umožňuje obísť kontroly využívajúce masku siete. na určenie výskytu na adresovanie rozsahov alebo na filtrovanie. Problém je vyriešený vo vydaní node-netmask 2.0.0.

Zraniteľnosť umožňuje zaobchádzať s externou IP adresou ako s adresou z internej siete a naopak a s určitou logikou použitia modulu node-netmask v aplikácii vykonávať SSRF (Server-side request forgery), RFI (Remote File Inclusion) a LFI (Local File Inclusion) útoky ) na prístup k zdrojom vo vnútornej sieti a zahrnutie externých alebo lokálnych súborov do vykonávacieho reťazca. Problém je v tom, že podľa špecifikácie by sa hodnoty adresového reťazca začínajúce nulou mali interpretovať ako osmičkové čísla, ale modul node-netmask to neberie do úvahy a považuje ich za desatinné čísla.

Útočník by napríklad mohol požiadať o lokálny zdroj zadaním hodnoty „0177.0.0.1“, ktorá zodpovedá „127.0.0.1“, ale modul „node-netmask“ zruší hodnotu null a bude považovať 0177.0.0.1″ za „ 177.0.0.1“, ktoré v aplikácii pri vyhodnocovaní pravidiel prístupu nebude možné určiť identitu s „127.0.0.1“. Podobne môže útočník zadať adresu „0127.0.0.1“, ktorá by mala byť identická s „87.0.0.1“, ale v module „maska ​​uzla“ sa s ňou bude zaobchádzať ako s „127.0.0.1“. Podobne môžete oklamať kontrolu prístupu k intranetovým adresám zadaním hodnôt ako „012.0.0.1“ (ekvivalent „10.0.0.1“, ale počas kontroly sa spracuje ako 12.0.0.1).

Výskumníci, ktorí problém identifikovali, označujú problém za katastrofický a poskytujú niekoľko scenárov útoku, no väčšina z nich vyzerá špekulatívne. Hovorí napríklad o možnosti napadnutia aplikácie založenej na Node.js, ktorá nadväzuje externé pripojenia na vyžiadanie zdroja na základe parametrov alebo údajov vstupnej požiadavky, ale aplikácia nie je konkrétne pomenovaná ani podrobne. Aj keď nájdete aplikácie, ktoré načítavajú zdroje na základe zadaných IP adries, nie je celkom jasné, ako sa dá zraniteľnosť v praxi zneužiť bez pripojenia k lokálnej sieti alebo bez získania kontroly nad „zrkadlovými“ IP adresami.

Výskumníci len predpokladajú, že majitelia 87.0.0.1 (Telecom Italia) a 0177.0.0.1 (Brasil Telecom) sú schopní obísť obmedzenie prístupu na 127.0.0.1. Reálnejší scenár je využiť túto zraniteľnosť na obídenie rôznych zoznamov blokov na strane aplikácie. Problém je možné aplikovať aj na zdieľanie definície intranetových rozsahov v module NPM „private-ip“.

Zdroj: opennet.ru

Pridať komentár