heygrc
NIST 800-53 SI-10 in code

Invoer, gecontroleerd voordat deze wordt vertrouwd.

SI-10 (invoervalidatie) is de NIST 800-53-beheersmaatregel die stelt dat een systeem de geldigheid van de invoer die het accepteert, moet controleren. Niet-gevalideerde invoer is hoe een verzoek een systeem kan laten doen wat het niet zou moeten: een bestand buiten zijn directory lezen, een host aanroepen die het niet zou moeten, of malformed data verwerken. De validatie bevindt zich in de code die de invoer ontvangt, en het is gemakkelijk te verwijderen zonder dat iemand de gevolgen opmerkt.

How it shows up in a diff

The shapes the same control failure takes.

Invoervalidatie verzwakt wanneer een wijziging onbetrouwbare invoer ongecontroleerd doorlaat. De terugkerende patronen:

  • Een pad wordt opgebouwd uit niet-gevalideerde invoer

    Een door de gebruiker opgegeven naam wordt zonder controle samengevoegd in een pad, zodat een speciaal opgemaakte waarde met ../ kan ontsnappen aan de bedoelde directory (path traversal).

  • Een URL of host komt van niet-gevalideerde invoer

    Een verzoekdoel wordt zonder allowlist uit invoer gehaald, zodat de server interne of onbedoelde hosts kan aanroepen (server-side request forgery).

  • Een validatiecontrole wordt verwijderd

    Een controle op het formaat, bereik of toegestane set van een invoer wordt geschrapt, zodat malformed of kwaadaardige waarden nu de logica erachter bereiken.

  • Grenzen of lengtecontroles worden verwijderd

    Grootte- of lengtelimieten voor invoer worden verwijderd, zodat te grote of malformed payloads doorkomen.

  • Een allowlist wordt vervangen door het accepteren van alles

    Een strikte allowlist van geaccepteerde waarden wordt versoepeld om willekeurige invoer te accepteren, waardoor wat een oproeper kan aanleveren, wordt uitgebreid.

Worked example

Een downloadpad opgebouwd uit een niet-gevalideerde naam.

Een download-endpoint levert bestanden uit een uploadmap op basis van naam. Een wijziging geeft de door de gebruiker opgegeven bestandsnaam direct door aan het pad en verwijdert de allowlist-controle, zodat een verzoek met een speciaal opgemaakte naam ontsnapt aan de directory en bestanden leest die het niet zou moeten.

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

Zonder de controle kan een speciaal opgemaakte naam zoals ../../etc/passwd ontsnappen aan de uploadmap (path traversal) en willekeurige bestanden lezen. SI-10 (invoervalidatie) verwacht dat invoer op geldigheid wordt gecontroleerd. Valideer de naam tegen een allowlist, of los het pad op en bevestig dat het binnen de directory blijft voordat het wordt gelezen.

What an auditor does with this

Invoervalidatie wordt gecontroleerd waar onbetrouwbare gegevens binnenkomen.

Een audit op basis van NIST 800-53 kijkt of een systeem de invoer die het accepteert, valideert op de vertrouwensgrenzen: worden bestandsnamen, URL's, identifiers en payloads gecontroleerd voordat ze worden gebruikt. Een wijziging die een validatie verwijdert of een pad of verzoek opbouwt uit ruwe invoer, is de concrete zwakte hierachter, en deze is zichtbaar in de diff naar de handler.

What this is, and is not

Een review, geen volledige SAST-suite.

heygrc markeert wijzigingen die SI-10 raken en verwijst naar de beheersmaatregel, zodat de correctie in de pull request plaatsvindt. Het is geen vervanging voor statische analyse of fuzzing. Het detecteert het moment waarop een wijziging onbetrouwbare invoer ongecontroleerd doorlaat, in de diff.