V balíčku NPM pac-resolver, který má více než 3 miliony stažení týdně, byla odhalena zranitelnost (CVE-2021-23406), jež umožňuje spuštění vlastního JavaScriptového kódu v kontextu aplikace při odesílání HTTP požadavků z projektů Node.js, které podporují funkci automatického nastavení proxy serveru.
Balíček pac-resolver provádí analýzu PAC souborů, které zahrnují skript pro automatické nastavení proxy serveru. PAC soubor obsahuje běžný JavaScriptový kód s funkcí FindProxyForURL, která určuje logiku výběru proxy na základě hostitele a dotazovaného URL. Podstata zranitelnosti spočívá v tom, že k provedení tohoto JavaScriptového kódu v pac-resolveru se používal poskytovaný API VM v Node.js, který umožňuje provádět JavaScriptový kód v jiném kontextu enginu V8.
Tento API je v dokumentaci výslovně označen jako nevhodný pro spouštění kódu, který není důvěryhodný, protože neposkytuje plnou izolaci spuštěného kódu a umožňuje přístup k původnímu kontextu. Problém byl vyřešen ve verzi pac-resolver 5.0.0, která byla převedena na použití knihovny vm2, jež poskytuje vyšší úroveň izolace vhodnou pro běh nedůvěryhodného kódu.

Při používání zranitelné verze pac-resolveru může útočník pomocí speciálně vytvořeného PAC souboru dosáhnout spuštění svého JavaScriptového kódu v kontextu kódu projektu používajícího Node.js, pokud v tomto projektu jsou použity knihovny, které mají závislosti na pac-resolveru. Nejpopulárnější z problematických knihoven je Proxy-Agent, která je uvedena mezi závislostmi u 360 projektů, včetně urllib, aws-cdk, mailgun.js a firebase-tools, které celkově představují více než tři miliony stažení týdně.
Pokud aplikace závislá na pac-resolveru načte PAC soubor poskytovaný systémem podporujícím protokol automatického nastavení proxy WPAD, mohou útočníci s přístupem k místní síti využít šíření nastavení proxy prostřednictvím DHCP k injekci škodlivých PAC souborů.
Zdroj: opennet.ru
