Web Proxy Auto-Discovery Protocol (WPAD) – protokół umożliwiający komputerom klienckim automatyczne odnalezienie konfiguracji serwera proxy, z którego mają korzystać przy połączeniach z internetem. Jego celem jest uniknięcie ręcznego konfigurowania ustawień proxy na każdej stacji roboczej z osobna, co ma znaczenie zwłaszcza w dużych sieciach firmowych.
WPAD nigdy nie uzyskał statusu RFC – jedyną uzgodnioną definicją pozostaje szkic internetowy z 1999 roku, który wygasł w grudniu tego samego roku. Mimo to protokół jest obsługiwany przez wszystkie popularne przeglądarki i systemy operacyjne, a w systemach Windows jest domyślnie włączony. Z korzystaniem z niego wiąże się szereg zagrożeń, opisywanych zbiorczo jako BadWPAD.
Specyfikacja Protokół opisali w 1999 roku Paul Gauthier, Josh Cohen, Martin Dunsmuir i Charles E. Perkins w szkicu internetowym draft-ietf-wrec-wpad-01, przygotowanym w ramach prac IETF. Dokument wygasł w grudniu 1999 roku i nie został przekształcony w standard.
Zgodnie z założeniami szkicu zadaniem WPAD nie jest wskazanie klientowi samego serwera proxy, lecz jedynie adresu pliku konfiguracyjnego (configuration URL, CURL), z którego klient pobierze właściwe ustawienia. Szkic zakłada też, że różni klienci pytający o ten sam adres mogą otrzymać różne pliki konfiguracyjne – w zależności od nagłówka User-Agent, adresu IP czy podsieci.
Wykrywanie serwera Szkic przewiduje trzy mechanizmy odnalezienia adresu pliku konfiguracyjnego, stosowane kolejno, aż któryś zakończy się powodzeniem.
DHCP Serwer DHCP może przekazać adres pliku konfiguracyjnego jako wartość opcji 252. Odbywa się to zwykle w momencie dołączania komputera do sieci. Opcja 252 nie znajduje się przy tym na liście prawidłowych opcji DHCP określonych w RFC 2132.
SLP Protokół Service Location Protocol, zdefiniowany w 1999 roku w RFC 2608, pozwala aplikacjom odnajdywać usługi sieciowe za pomocą zapytań rozgłoszeniowych. Odpowiedź dla usługi WPAD ma postać schematu service:wpad: z adresem pliku konfiguracyjnego.
DNS W wariancie DNS klient wyznacza nazwę swojej sieci, usuwając nazwę własnego komputera z pełnej nazwy domenowej, i wysyła zapytanie o rekord SRV dotyczący usługi WPAD. Jeżeli nie otrzyma odpowiedzi, powtarza próbę dla rekordów TXT, a następnie dla rekordu A, dopisując do nazwy sieci przedrostek wpad. Gdy i to zawiedzie, usuwa skrajnie lewy człon nazwy i powtarza cały proces – aż do osiągnięcia domeny najwyższego poziomu. Mechanizm ten określa się jako DNS devolution.
Po odnalezieniu nazwy serwera adres pliku konfiguracyjnego jest budowany według schematu http://nazwa:80/wpad.dat.
Plik konfiguracyjny PAC Plik pobierany przez klienta, nazywany plikiem PAC (proxy auto-config), jest skryptem w języku JavaScript. Powinien zawierać funkcję FindProxyForURL, która dla każdego żądanego adresu wskazuje, czy i przez które proxy należy nawiązać połączenie. Zbiór instrukcji dopuszczonych w takim pliku jest ograniczony – należą do niego m.in. dnsDomainIs i shExpMatch.
W praktyce podczas sprawdzania poprawności pliku wykonywany jest cały zawarty w nim kod JavaScript, a nie wyłącznie funkcja FindProxyForURL.
Implementacje Choć definicja protokołu wygasła w 1999 roku, WPAD jest obsługiwany przez systemy Windows i Linux oraz przez przeglądarki Edge, Internet Explorer, Firefox, Chrome i Safari, a także przez systemy Android, macOS i iOS.
Badanie opublikowane w 2023 roku w czasopiśmie ACM Computing Surveys wykazało istotne różnice między opisem ze szkicu a rzeczywistym działaniem implementacji:
żaden z testowanych systemów i żadna z przeglądarek nie obsługiwały już protokołu SLP; nie zaobserwowano zapytań o rekordy SRV ani TXT – wysyłane były wyłącznie zapytania o rekordy A, a w części przeglądarek również AAAA; nazwa sieci używana do zapytań nie pochodziła wyłącznie z nazwy komputera, lecz także z domen przekazywanych przez DHCP (opcje 15 i 119); systemy Windows zapisywały odnaleziony adres pliku konfiguracyjnego w rejestrze systemowym, a wartość ta nie była usuwana po ponownym uruchomieniu komputera; jeżeli żaden z powyższych mechanizmów nie zadziałał, klient sięgał po protokoły rozgłoszeniowe NetBIOS (NBNS), LLMNR i mDNS, szukając nazwy wpad.local.
W systemie Linux WPAD jest domyślnie wyłączony – system ignoruje wartość opcji 252 i nie poszukuje serwera WPAD, o ile korzystania z protokołu nie wymusi konfiguracja przeglądarki.
W 2009 roku Microsoft opublikował poradę bezpieczeństwa dotyczącą mechanizmu DNS devolution, ograniczającą jego stosowanie: nie jest on wykorzystywany, gdy sufiks pochodzi z listy przeszukiwania sufiksów DNS ani gdy nazwa domeny składa się tylko z dwóch członów.
Bezpieczeństwo Mechanizmy, na których opiera się WPAD, nie przewidują żadnej formy uwierzytelnienia, co ułatwia podszycie się pod serwer WPAD. Wartości opcji DHCP mogą zostać sfałszowane, zapytania DNS wyciekają poza sieć organizacji, w sieci lokalnej można odpowiadać na zapytania rozgłoszeniowe, a w pliku PAC można umieścić złośliwy kod JavaScript.
Pierwszą podatność związaną z protokołem odnotowano już w 1999 roku (CVE-1999-0858), a do 2022 roku zarejestrowano 23 podatności CVE zawierające w opisie słowo wpad. Autorzy przeglądu w ACM Computing Surveys określają WPAD jako protokół powszechnie używany, podatny na wiele różnych ataków i trudny do naprawienia, i zalecają wyłączanie go wszędzie tam, gdzie serwery proxy nie są potrzebne. Zagadnienia te omawia szerzej hasło BadWPAD.
Przypisy
Kategoria:Protokoły internetowe Kategoria:Bezpieczeństwo komputerowe