heygrc
ISO 27001 A.8.28 nel codice

Secure coding, nel codice.

ISO 27001:2022 A.8.28 (secure coding) riguarda l'applicazione di principi di coding sicuro affinché il software non venga distribuito con le vulnerabilità su cui si basano gli attacchi: injection, gestione non sicura di input e output, impostazioni predefinite non sicure. Tra tutti i controlli dell'Allegato A, è quello che risiede più direttamente nel codice, rendendo la pull request il luogo naturale per applicarlo.

How it shows up in a diff

The shapes the same control failure takes.

A.8.28 viene compromesso quando una modifica introduce un pattern noto come pericoloso o rimuove una protezione contro di esso. Le forme ricorrenti:

  • Una query costruita tramite concatenazione di stringhe

    L'input dell'utente viene interpolato direttamente in una stringa SQL, shell o di query invece di essere passato come parametro, aprendo una via all'injection.

  • L'output viene reso senza escape

    I dati controllati dall'utente vengono scritti in HTML, un template o una risposta senza escape, aprendo una via a cross-site scripting.

  • Un lint o controllo di sicurezza viene disabilitato

    Una regola di analisi statica o un linter di sicurezza viene silenziato (un'ignoranza inline, una regola disabilitata) per far passare una modifica invece di correggere ciò che ha segnalato.

  • Input non attendibile viene deserializzato

    I dati provenienti dall'esterno del confine di fiducia vengono deserializzati in oggetti o valutati, un pattern classico di remote code execution.

  • La validazione viene rimossa

    La validazione o la sanificazione dell'input che proteggeva un percorso viene eliminata durante un refactoring, consentendo a input malformati o ostili di raggiungere la logica sottostante.

Worked example

Una query assemblata con input utente.

Viene aggiunta una funzione di ricerca. Il modo più veloce per filtrare in base al termine dell'utente è inserirlo direttamente nella stringa SQL. Funziona con input normali, ma è un'injection SQL: un termine appositamente creato può leggere o modificare dati a cui non dovrebbe accedere.

search/query.ts+1 -1
- const rows = await db.query("SELECT * FROM items WHERE name = $1", [term])+ const rows = await db.query(`SELECT * FROM items WHERE name = '${term}'`)return rows
heygrcISO 27001:2022 A.8.28

L'interpolazione del termine di ricerca nella stringa SQL è una via per l'injection SQL: un termine appositamente creato esce dalla stringa ed esegue logica di query. A.8.28 (secure coding) richiede esplicitamente che questa classe di vulnerabilità venga evitata. Torna a una query parametrizzata, che mantiene l'input come dato anziché come codice.

What an auditor does with this

Il secure coding viene verificato a livello di processo e di codice.

Un auditor cerca prove che il secure coding sia parte del processo: revisione del codice, analisi statica, scansione delle dipendenze e che i risultati vengano gestiti. Una modifica che introduce una via di injection o disabilita un controllo di sicurezza è il fallimento concreto dietro quel processo, ed è visibile nel diff. Catturarlo durante la revisione è sia la correzione che la prova che il processo funziona.

What this is, and is not

Una revisione, non una suite SAST completa.

heygrc segnalerà le modifiche che interessano A.8.28 e citerà il controllo in modo che la correzione avvenga nella pull request. Non è un sostituto per l'analisi statica o i test di sicurezza; è lo strato consapevole del framework che collega una vulnerabilità di coding sicuro al controllo che viola.