W pakiecie NPM pac-resolver, który rejestruje ponad 3 miliony pobrań tygodniowo, zidentyfikowano lukę (CVE-2021-23406), która umożliwia wykonanie własnego kodu JavaScript w kontekście aplikacji podczas wysyłania zapytań HTTP z projektów Node.js wspierających funkcję automatycznego konfigurowania serwera proxy.
Pakiet pac-resolver przetwarza pliki PAC, które zawierają skrypt automatycznej konfiguracji serwera proxy. Plik PAC zawiera standardowy kod JavaScript z funkcją FindProxyForURL, która definiuje logikę wyboru proxy w zależności od hosta i żądanej URL. Istota luki polega na tym, że do wykonania tego kodu JavaScript w pac-resolver wykorzystywano dostarczany przez API Node.js VM, co pozwala na uruchomienie kodu JavaScript w innym kontekście silnika V8.
Wskazane API jest wyraźnie oznaczone w dokumentacji jako nieprzeznaczone do uruchamiania kodu, który nie jest godny zaufania, ponieważ nie zapewnia pełnej izolacji uruchamianego kodu i pozwala na dostęp do pierwotnego kontekstu. Problem został rozwiązany w wydaniu pac-resolver 5.0.0, które przeszło na użycie biblioteki vm2, zapewniającej wyższy poziom izolacji, odpowiedni do uruchamiania kodu niegodnego zaufania.

Przy użyciu podatnej wersji pac-resolver atakujący dzięki przesłaniu specjalnie przygotowanego pliku PAC może osiągnąć wykonanie swojego kodu JavaScript w kontekście kodu projektu wykorzystującego Node.js, jeżeli w danym projekcie używane są biblioteki związane zależnościami z pac-resolver. Najbardziej popularną z problematycznych bibliotek jest Proxy-Agent, wymieniony w zależnościach 360 projektów, w tym urllib, aws-cdk, mailgun.js i firebase-tools, łącznie z ponad trzema milionami pobrań tygodniowo.
Jeżeli aplikacja związana zależnościami z pac-resolver ładuje plik PAC dostarczany przez system wspierający protokół automatycznego konfigurowania proxy WPAD, to w celu podstawienia złośliwych plików PAC, przestępcy mający dostęp do sieci lokalnej mogą skorzystać z rozprzestrzeniania ustawień proxy za pośrednictwem DHCP.
Źródło: opennet.ru
