heygrc
NIST 800-53 SI-10 im Code

Eingaben, die vor dem Vertrauen geprüft werden.

SI-10 (Eingabevalidierung) ist die NIST 800-53-Kontrolle, die besagt, dass ein System die Gültigkeit der Eingaben prüfen sollte, die es akzeptiert. Nicht validierte Eingaben sind der Weg, wie eine Anfrage ein System dazu bringt, etwas zu tun, das es nicht tun sollte: eine Datei außerhalb seines Verzeichnisses lesen, einen Host aufrufen, den es nicht aufrufen sollte, oder fehlerhaft formatierte Daten verarbeiten. Die Validierung befindet sich im Code, der die Eingabe entgegennimmt, und sie kann leicht entfernt werden, ohne dass jemand die Konsequenzen bemerkt.

How it shows up in a diff

The shapes the same control failure takes.

Die Eingabevalidierung wird geschwächt, wenn eine Änderung nicht vertrauenswürdige Eingaben ungeprüft durchlässt. Die wiederkehrenden Muster:

  • Ein Dateipfad wird aus nicht validierter Eingabe erstellt

    Ein vom Benutzer bereitgestellter Name wird ohne Prüfung in einen Pfad eingefügt, sodass ein manipulierter Wert mit ../ das beabsichtigte Verzeichnis verlassen kann (Path-Traversal).

  • Eine URL oder ein Host stammt aus nicht validierter Eingabe

    Ein Anfrageziel wird aus der Eingabe ohne eine Whitelist entnommen, sodass der Server dazu gebracht werden kann, interne oder nicht beabsichtigte Hosts aufzurufen (Server-Side Request Forgery).

  • Eine Validierungsprüfung wird entfernt

    Eine Prüfung des Formats, des Bereichs oder der erlaubten Menge einer Eingabe wird gestrichen, sodass fehlerhafte oder schädliche Werte nun die dahinterliegende Logik erreichen.

  • Grenzen- oder Längenprüfungen werden entfernt

    Größen- oder Längenbegrenzungen für Eingaben werden entfernt, sodass übergroße oder fehlerhafte Nutzlasten durchkommen.

  • Eine Whitelist wird durch die Akzeptanz beliebiger Eingaben ersetzt

    Eine strenge Whitelist akzeptierter Werte wird gelockert, um beliebige Eingaben zu akzeptieren, wodurch der Umfang dessen, was ein Aufrufer bereitstellen kann, erweitert wird.

Worked example

Ein Download-Pfad, der aus einem nicht validierten Namen erstellt wird.

Ein Download-Endpoint stellt Dateien aus einem Upload-Verzeichnis anhand des Namens bereit. Eine Änderung übergibt den Dateinamen des Benutzers direkt in den Pfad und entfernt die Whitelist-Prüfung, sodass eine Anfrage mit einem manipulierten Namen das Verzeichnis verlässt und Dateien liest, die nicht gelesen werden sollten.

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

Ohne die Prüfung kann ein manipulierter Name wie ../../etc/passwd das Upload-Verzeichnis verlassen (Path-Traversal) und beliebige Dateien lesen. SI-10 (Eingabevalidierung) erwartet, dass Eingaben auf Gültigkeit geprüft werden. Validieren Sie den Namen gegen eine Whitelist oder lösen Sie den Pfad auf und bestätigen Sie, dass er innerhalb des Verzeichnisses bleibt, bevor Sie lesen.

What an auditor does with this

Die Eingabevalidierung wird dort überprüft, wo nicht vertrauenswürdige Daten eintreten.

Eine Bewertung nach NIST 800-53 prüft, ob ein System die Eingaben, die es an seinen Vertrauensgrenzen akzeptiert, validiert: Werden Dateinamen, URLs, Bezeichner und Nutzlasten geprüft, bevor sie verwendet werden? Eine Änderung, die eine Validierung entfernt oder einen Pfad oder eine Anfrage aus rohen Eingaben erstellt, ist die konkrete Schwachstelle dahinter, und sie ist im Diff zum Handler sichtbar.

What this is, and is not

Eine Überprüfung, kein vollständiges SAST-Tool.

heygrc markiert Änderungen, die SI-10 betreffen, und zitiert die Kontrolle, sodass die Korrektur im Pull Request erfolgt. Es ist kein Ersatz für Ihre statische Analyse oder Fuzzing. Es erkennt den Moment, in dem eine Änderung nicht vertrauenswürdige Eingaben ungeprüft durchlässt, direkt im Diff.