Dane wejściowe sprawdzane, zanim zostaną zaufane.
SI-10 (weryfikacja wprowadzanych informacji) to kontrola NIST 800-53, która nakazuje, aby system sprawdzał poprawność akceptowanych danych wejściowych. Niezwalidowane dane wejściowe to sposób, w jaki żądanie może sprawić, że system zrobi coś, czego nie powinien: odczyta plik poza swoim katalogiem, połączy się z hostem, do którego nie powinien, lub przetworzy nieprawidłowo sformatowane dane. Weryfikacja znajduje się w kodzie, który przyjmuje dane wejściowe, i łatwo ją usunąć, nie zauważając konsekwencji.
The shapes the same control failure takes.
Weryfikacja danych wejściowych słabnie, gdy zmiana pozwala na przepuszczenie niezaufanych danych bez sprawdzenia. Powtarzające się wzorce:
Ścieżka pliku jest budowana z niezwalidowanych danych wejściowych
Nazwa podana przez użytkownika jest dołączana do ścieżki bez sprawdzenia, więc specjalnie przygotowana wartość z ../ może wydostać się poza zamierzony katalog (path traversal).
Adres URL lub host pochodzi z niezwalidowanych danych wejściowych
Cel żądania jest pobierany z danych wejściowych bez listy dozwolonych wartości, więc serwer może zostać zmuszony do połączenia się z wewnętrznymi lub nieoczekiwanymi hostami (server-side request forgery).
Sprawdzenie weryfikacji zostało usunięte
Sprawdzenie formatu, zakresu lub dozwolonego zbioru danych wejściowych zostało usunięte, więc nieprawidłowe lub złośliwe wartości docierają do logiki za nim.
Sprawdzenia granic lub długości zostały usunięte
Limity rozmiaru lub długości danych wejściowych zostały usunięte, więc zbyt duże lub nieprawidłowo sformatowane ładunki przechodzą dalej.
Lista dozwolonych wartości została zastąpiona akceptacją dowolnych danych
Ścisła lista dozwolonych wartości została poluzowana, aby akceptować dowolne dane wejściowe, poszerzając to, co może dostarczyć wywołujący.
Ścieżka pobierania zbudowana z niezwalidowanej nazwy.
Punkt końcowy pobierania serwuje pliki z katalogu uploadów na podstawie nazwy. Zmiana przekazuje nazwę pliku podaną przez użytkownika bezpośrednio do ścieżki i usuwa sprawdzenie listy dozwolonych, więc żądanie z przygotowaną nazwą wydostaje się poza katalog i odczytuje pliki, których nie powinno.
function download(name) {- if (!isAllowedFile(name)) return notFound() return readFile(path.join(UPLOAD_DIR, name))}Bez sprawdzenia specjalnie przygotowana nazwa, taka jak ../../etc/passwd, wydostaje się poza katalog uploadów (path traversal) i odczytuje dowolne pliki. SI-10 (weryfikacja wprowadzanych informacji) wymaga, aby dane wejściowe były sprawdzane pod kątem poprawności. Zweryfikuj nazwę względem listy dozwolonych wartości lub rozwiń ścieżkę i potwierdź, że pozostaje w obrębie katalogu przed odczytem.
Weryfikacja danych wejściowych jest sprawdzana tam, gdzie niezaufane dane wchodzą.
Ocena zgodności z NIST 800-53 sprawdza, czy system weryfikuje akceptowane dane wejściowe na swoich granicach zaufania: czy nazwy plików, adresy URL, identyfikatory i ładunki są sprawdzane przed użyciem. Zmiana, która usunęła weryfikację lub zbudowała ścieżkę lub żądanie z surowych danych wejściowych, to konkretna słabość, która jest widoczna w diffie dla obsługującego.
Przegląd, a nie pełny zestaw SAST.
heygrc sygnalizuje zmiany, które dotyczą SI-10, i cytuje kontrolę, aby poprawka została wprowadzona w pull request. Nie zastępuje to statycznej analizy kodu ani fuzzingu. Wychwytuje moment, w którym zmiana pozwala na przepuszczenie niezaufanych danych wejściowych bez sprawdzenia, na poziomie diffu.