Wyłączenie jednostek zewnętrznych samo w sobie nie chroni procesora raportów przed każdym wejściem związanym z wyczerpaniem zasobów. Skompresowany załącznik może zostać rozciągnięty przed uruchomieniem analizatora składni XML, a głęboko zagnieżdżony lub zbyt duży plik XML może zużywać zasoby bez konieczności uzyskiwania dostępu do jednostki zewnętrznej. Traktuj dekompresję, interpretację XML i przyjmowanie obciążeń jako oddzielne granice obronne.
RFC 9990 wyraźnie identyfikuje ryzyko wyczerpania zasobów archiwalnych i XML. Wytyczne XML OWASP wyjaśniają, dlaczego specyficzna dla parsera kontrola zasobów zewnętrznych ma znaczenie. Projekt testu stanowi tutaj zalecenie operacyjne dotyczące sprawdzenia tych granic w izolowanym środowisku przejściowym.
Zdefiniuj, co nigdy nie może się wydarzyć
Referencje: RFC 9990 §8.1.
Pracownik nie powinien pobierać zasobów sieciowych wybranych w załączniku, czytać sekretów aplikacji poprzez rozpoznawanie XML, zapisywać ścieżek dostarczonych przez archiwum ani zużywać nieograniczonego procesora, pamięci lub dysku. Daj mu minimalny dostęp do systemu plików i bez niepotrzebnego dostępu do sieci. Używaj jednorazowego środowiska testowego z syntetycznymi kanarkami, a nie tajemnic produkcyjnych.
Ustaw obserwowalne limity dla skompresowanych danych wejściowych, rozszerzonych danych wyjściowych, czasu analizowania, zagnieżdżania, długości tekstu i jednoczesnych zadań. Zapisz, gdzie każdy limit jest egzekwowany. Limit czasu wokół końcowego importu nie może chronić wcześniejszego nieograniczonego etapu dekompresji.
Sprawdź bezpośrednio możliwości XML
Odniesienie: Zapobieganie podmiotom zewnętrznym OWASP XML, wskazówki ogólne.
Skonfiguruj rzeczywisty analizator składni i dowolną warstwę sprawdzania poprawności schematu lub transformacji. Wyłącz niepotrzebne przetwarzanie DTD, zewnętrzne podmioty, XInclude i ładowanie zasobów zewnętrznych. Traktuj nieobsługiwane ustawienia zabezpieczeń jako błędy konfiguracji. Bezpieczne ustawienie parsera może zostać podważone, jeśli na późniejszym etapie sprawdzania poprawności zostanie pobrany schemat wybrany na wejściu. Przejrzyj cały łańcuch przetwarzania, a nie tylko jego pierwsze wywołanie biblioteki.
Użyj małego urządzenia zawierającego zewnętrzne odniesienie do kontrolowanego wartownika testowego. Oczekiwanym zachowaniem jest odrzucenie lub bezpieczny brak rozwiązania zgodnie z udokumentowaną polityką, bez dostępu wartownika. Rejestruj dane telemetryczne dotyczące sieci i dostępu do plików. Nie kieruj referencji testowych na wrażliwe pliki lokalne lub usługi zewnętrzne, nad którymi nie masz kontroli.
Związane nieszkodliwe testy rozszerzalności
Referencje: RFC 9990 §8.1.
Do dekompresji użyj małej zawartości syntetycznej i celowo niskich progów stopniowania. W przypadku XML użyj ograniczonego zagnieżdżenia lub wewnętrznych urządzeń rozszerzających zaprojektowanych tak, aby przekraczać podobnie niskie limity. Nie ma potrzeby tworzenia naprawdę ogromnej bomby, aby stwierdzić, że granica jest egzekwowana.
Przykładowy przypadek: pracownik testowy ma limit bajtów rozszerzonych wynoszący 256 KiB i termin przetwarzania wynoszący jedną sekundę. Syntetyczny, rozszerzony strumień o wielkości 300 KiB powinien zatrzymać się na granicy bajtów. Oddzielne, małe urządzenie odniesienia zewnętrznego nie powinno powodować żadnego wyszukiwania. Przekazanie jednego przypadku nie dowodzi, że druga granica działa. Progi mają charakter poglądowy i należy zmierzyć rzeczywistą pamięć i upływający czas, a nie zakładać.
Sprawdź powstrzymywanie awarii
Dla każdego odrzuconego urządzenia sprawdź, czy nie zatwierdzono żadnych zapisów raportu częściowego, nie pojawił się żaden niezatwierdzony plik wyjściowy, a diagnostyka zawiera bezpieczne odniesienie wejściowe i przyczynę. Powiązany rozmiar diagnostyczny, ponieważ kopiowanie całego odrzuconego dokumentu do dzienników stwarza kolejne ryzyko dla zasobów i prywatności.
Następnie prześlij ważny mały raport. Sprawdź, czy przetwarzanie kolejki zostało przywrócone, pliki tymczasowe zostały wyczyszczone zgodnie z zatwierdzonymi zasadami, a ponowne odtwarzanie nie powoduje zduplikowanych liczników. Korzystaj z równoczesnych przyjęć w ramach bezpiecznego budżetu testowego, aby przetestować zagregowane limity pracowników oraz limity dla poszczególnych plików.
Spraw, aby dowody testowe były powtarzalne
Referencje: RFC 9990 §8.1, RFC 9990 §9.2.
Zachowaj skróty urządzeń, wersje parsera i środowiska wykonawczego, konfigurację, limity, oczekiwane wyniki i zmierzone wyniki. Powtórz tę czynność po zmianie zależności, parsera, kontenera lub walidacji. Jeśli w teście nie można zaobserwować dostępu zewnętrznego ani użycia pamięci, oznacz tę część jako niezweryfikowaną, zamiast deklarować, że potok jest bezpieczny.
Odrzucenie świadczy o tym, że określone wejście napotkało określoną granicę w testowanej konfiguracji. Nie dowodzi to, że każdy możliwy złośliwy dokument jest nieszkodliwy. Połącz ukierunkowane urządzenia, sprawdzoną konfigurację, izolację i monitorowanie oraz utrzymaj właściciela w celu monitorowania, gdy zawiedzie którakolwiek granica.
Pakiet przeglądowy wykonuje jedynie małą demonstrację ograniczonej dekompresji i modele semantyczne. Testy referencji zewnętrznych, izolacji pamięci, współbieżnego procesu roboczego i rzeczywistego przechowywania bazy danych opisane powyżej pozostają wymaganiami akceptacji, a nie ukończonymi testami.