Jak działa ta kontrola
Scanaris zbiera HTML Twojej strony głównej i pobiera do piętnastu jej skryptów: wszystkie serwowane z Twojej własnej domeny oraz, spośród zewnętrznych, te z „jquery" w ścieżce. W tym tekście szuka nagłówków wersji, które biblioteki umieszczają na początku pliku. Trzy przypadki otwierają ustalenie, wszystkie o średniej wadze. jQuery starsze niż 3.5.0: znane podatności XSS (CVE-2020-11022 i CVE-2020-11023) w sposobie przetwarzania HTML-u. AngularJS, dowolna wersja 1.x: framework osiągnął koniec życia w styczniu 2022 roku i nie otrzymuje łatek bezpieczeństwa. Bootstrap 3.x starszy niż 3.4.1 lub 4.x starszy niż 4.3.1: XSS przez atrybuty data- w tooltipach i popoverach (CVE-2019-8331). Oznacza tylko wtedy, gdy znajdzie wypisany numer wersji; jeśli plik jest zminifikowany bez nagłówka, nie zgaduje.
Dlaczego to ważne
Podatność XSS w bibliotece ładowanej przez całą Twoją stronę to otwarte drzwi na wszystkich stronach naraz: atakujący, który zdoła umieścić tekst tam, gdzie biblioteka interpretuje go jako HTML (komentarz, nazwa profilu, parametr adresu), wykonuje JavaScript z sesją tego, kto to ogląda. Dla tych trzech bibliotek luki są publiczne od lat, z opublikowanymi przykładami wykorzystania, a narzędzia automatyczne testują je standardowo. Przypadek AngularJS jest inny, ale na dłuższą metę gorszy: nie chodzi o konkretną lukę, tylko o to, że następna, która się pojawi, nigdy nie zostanie naprawiona.
Dlaczego tak się dzieje
Bo działają. jQuery 1.12 z 2016 roku nadal robi to, co robiło, i nikt go nie rusza z obawy, że coś się zepsuje. Motywy i wtyczki WordPressa to typowy przypadek: rdzeń WordPressa dostarcza jQuery 3.7 od wersji 5.6, ale stary motyw może ładować własną kopię. Pojawia się też w kupionych szablonach HTML, odziedziczonych panelach administracyjnych i projektach, w których AI skopiowała przykład ze sprzed lat z adresem CDN.
Jak to naprawić
- jQuery: zaktualizuj do najnowszego 3.x (3.7 to bieżąca gałąź). Zmień adres CDN albo plik lokalny i załaduj na kilka dni
jquery-migrate, żeby ostrzegał w konsoli o starych wywołaniach do dostosowania. Przetestuj formularze, menu i każdą używaną wtyczkę jQuery. - Bootstrap: jeśli jesteś na 3.x, przejdź na 3.4.1, które jest kompatybilne; jeśli na 4.x, na 4.6.2. To wersje serwisowe bez zmian w wyglądzie. Skok na 5.x to większa migracja, bo porzuca jQuery i zmienia nazwy klas; zaplanuj ją osobno.
- AngularJS: nie ma bezpiecznej wersji, do której można podnieść. Opcje to migracja (na nowoczesny Angular, Vue lub React, po kawałku, jeśli aplikacja jest duża), komercyjne rozszerzone wsparcie na czas przejściowy, albo izolacja aplikacji: bez wrażliwych danych, za uwierzytelnianiem i ze ścisłą CSP.
- WordPress: zaktualizuj motyw i wtyczki; jeśli któraś nadal ładuje stare jQuery, wymień ją. Nie wyłączaj jQuery z rdzenia „dla oszczędności": to ta dobra wersja.
- Ogólnie: instaluj biblioteki przez npm zamiast kopiować adresy CDN i włącz alerty zależności GitHuba albo
npm audit, żeby dowiedzieć się o następnej.
Sprawdź, czy naprawione
curl -s https://twojadomena.pl | grep -oE 'src="[^"]*(jquery|bootstrap|angular)[^"]*"'
curl -s ADRES_SKRYPTU | head -c 400 | grep -oE '(jQuery|Bootstrap|AngularJS)[^0-9]{0,30}v?[0-9]+\.[0-9]+\.[0-9]+'
Pierwsze mówi Ci, jakie pliki ładuje Twoja strona; drugie, z adresem każdego z nich, deklarowaną wersję. Oczekiwane: jQuery 3.5.0 lub nowsze, Bootstrap 3.4.1, 4.3.1 lub nowszy, i żadnego AngularJS.
Często zadawane pytania
Czy wykrywane są tylko te trzy biblioteki?
Na razie tak: to one skupiają większość wykorzystywanych podatności front-endu na prawdziwych stronach. Dla reszty Twoich zależności npm audit albo alerty GitHuba pokrywają to, czego zewnętrzny skan nie zobaczy.
Używam jQuery 1.12, ale nigdy nie wstawiam HTML-u od użytkowników. Jestem bezpieczny?
Dopóki nikt nie przepuści niezaufanego tekstu przez .html(), .append() lub podobne, konkretna luka się nie odpala. Ale trudno to zagwarantować na całej stronie i we wszystkich wtyczkach, a aktualizacja do 3.x zwykle kosztuje jedno popołudnie. W międzyczasie ścisła CSP ogranicza szkody; sprawdza ją słaba CSP.
A jeśli biblioteka pochodzi z CDN?
Wtedy, oprócz aktualizacji, przypnij wersję i dodaj integrity, żeby nikt nie mógł jej podmienić pod Tobą; wyjaśnia to integralność podzasobów.