heygrc
NIST 800-53 SI-10 nel codice

Input, verificati prima di essere considerati attendibili.

SI-10 (validazione degli input) è il controllo NIST 800-53 che stabilisce che un sistema deve verificare la validità degli input che accetta. Un input non validato è il modo in cui una richiesta induce un sistema a compiere azioni non consentite: leggere un file al di fuori della sua directory, contattare un host non autorizzato o elaborare dati malformati. La validazione risiede nel codice che riceve l'input e può essere rimossa facilmente senza che nessuno noti le conseguenze.

How it shows up in a diff

The shapes the same control failure takes.

La validazione degli input si indebolisce quando una modifica permette a un input non attendibile di passare senza controlli. Le forme ricorrenti:

  • Un percorso file viene costruito da un input non validato

    Un nome fornito dall'utente viene unito a un percorso senza controlli, quindi un valore appositamente creato con ../ può uscire dalla directory prevista (path traversal).

  • Un URL o un host proviene da un input non validato

    Un target di richiesta viene prelevato dall'input senza una lista di consentiti, quindi il server può essere indotto a contattare host interni o non previsti (server-side request forgery).

  • Un controllo di validazione viene rimosso

    Un controllo sul formato, l'intervallo o l'insieme consentito di un input viene eliminato, quindi valori malformati o ostili raggiungono ora la logica sottostante.

  • I controlli su limiti o lunghezza vengono rimossi

    I limiti di dimensione o lunghezza sugli input vengono eliminati, quindi payload eccessivamente grandi o malformati passano attraverso.

  • Una lista di consentiti viene sostituita accettando qualsiasi valore

    Una lista di consentiti rigorosa viene allentata per accettare input arbitrari, ampliando ciò che un chiamante può fornire.

Worked example

Un percorso di download costruito da un nome non validato.

Un endpoint di download serve file da una directory di upload in base al nome. Una modifica passa direttamente il nome del file fornito dall'utente al percorso e rimuove il controllo della lista di consentiti, quindi una richiesta con un nome appositamente creato esce dalla directory e legge file che non dovrebbe.

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

Senza il controllo, un nome appositamente creato come ../../etc/passwd esce dalla directory di upload (path traversal) e legge file arbitrari. SI-10 (validazione degli input) richiede che gli input vengano verificati per validità. Valida il nome rispetto a una lista di consentiti o risolvi il percorso e conferma che rimanga all'interno della directory prima della lettura.

What an auditor does with this

La validazione degli input viene verificata dove i dati non attendibili entrano.

Un assessment secondo NIST 800-53 verifica se un sistema valida gli input che accetta ai suoi confini di fiducia: nomi di file, URL, identificatori e payload vengono controllati prima di essere utilizzati. Una modifica che rimuove una validazione o costruisce un percorso o una richiesta da un input grezzo è la debolezza concreta dietro questo problema, ed è visibile nel diff al gestore.

What this is, and is not

Una revisione, non una suite SAST completa.

heygrc segnalerà le modifiche che interessano SI-10 e citerà il controllo in modo che la correzione avvenga nella pull request. Non sostituisce l'analisi statica o il fuzzing. Rileva il momento in cui una modifica permette a un input non attendibile di passare senza controlli, direttamente nel diff.