heygrc
NIST 800-53 SI-10 w kodzie

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.

How it shows up in a diff

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.

Worked example

Ś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.

files/download.ts+0 -1
function download(name) {-  if (!isAllowedFile(name)) return notFound()  return readFile(path.join(UPLOAD_DIR, name))}
heygrcNIST 800-53 SI-10

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.

What an auditor does with this

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.

What this is, and is not

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.