V NPM balíku pac-resolver, ktorý má viac než 3 milióny stiahnutí za týždeň, bola zistená zraniteľnosť (CVE-2021-23406), ktorá umožňuje vykonanie vlastného JavaScript kódu v kontexte aplikácie pri odosielaní HTTP požiadaviek z Node.js projektov podporujúcich funkciu automatického nastavenia proxy servera.
Balík pac-resolver spracováva PAC súbory, ktoré obsahujú skript na automatické nastavenie proxy servera. PAC súbor obsahuje bežný JavaScript kód s funkciou FindProxyForURL, ktorá určuje logiku voľby proxy v závislosti od hostiteľa a žiadaného URL. Podstatou zraniteľnosti je to, že na vykonanie tohto JavaScript kódu v pac-resolver bola použitá API VM poskytovaná v Node.js, ktorá umožňuje vykonanie JavaScript kódu v inom kontexte enginu V8.
Uvedené API je v dokumentácii jasne označené ako nevhodné na spustenie kódu, ktorý nie je dôveryhodný, pretože neposkytuje plnú izoláciu spúšťaného kódu a umožňuje prístup k pôvodnému kontextu. Problém bol vyriešený vo verzii pac-resolver 5.0.0, ktorá prešla na používanie knižnice vm2, poskytujúcej vyššiu úroveň izolácie vhodnú na spúšťanie nedôveryhodného kódu.

Pri používaní zraniteľnej verzie pac-resolver, útočník môže prostredníctvom odoslania špeciálne formátovaného PAC súboru dosiahnuť vykonanie svojho JavaScript kódu v kontexte kódu projektu používajúceho Node.js, ak v tomto projekte používajú knižnice, ktoré majú závislosti na pac-resolver. Najpopulárnejšou z problémových knižníc je Proxy-Agent, uvedená v závislostiach u 360 projektov, vrátane urllib, aws-cdk, mailgun.js a firebase-tools, ktoré v súhrne predstavujú viac než tri milióny stiahnutí za týždeň.
Ak aplikácia, ktorá má závislosti na pac-resolver, načíta PAC súbor poskytovaný systémom podporujúcim protokol automatického nastavenia proxy WPAD, môžu útočníci, ktorí majú prístup k miestnej sieti, využiť šírenie nastavení proxy cez DHCP na dodanie škodlivých PAC súborov.
Zdroj: opennet.ru
