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.
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.
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.
function download(name) {- if (!isAllowedFile(name)) return notFound() return readFile(path.join(UPLOAD_DIR, name))}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.
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.
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.