heygrc
ISO 27001 A.8.28 in code

Veilig coderen, in de code.

ISO 27001:2022 A.8.28 (veilig coderen) gaat over het toepassen van principes voor veilig coderen, zodat software niet wordt geleverd met de soorten kwetsbaarheden waar aanvallers op vertrouwen: injectie, onveilige verwerking van input en output, onveilige standaardinstellingen. Van alle Annex A-maatregelen is dit de maatregel die het meest direct in de code leeft, wat de pull request tot de natuurlijke plek maakt om deze te handhaven.

How it shows up in a diff

The shapes the same control failure takes.

A.8.28 verzwakt wanneer een wijziging een bekend slecht patroon introduceert of een beveiliging ertegen verwijdert. De terugkerende vormen:

  • Een query wordt opgebouwd via stringconcatenatie

    Gebruikersinput wordt rechtstreeks geïnterpoleerd in een SQL-, shell- of querystring in plaats van als parameter doorgegeven, wat een injectiepad opent.

  • Output wordt ontsnapt weergegeven

    Door de gebruiker beheerde gegevens worden in HTML, een sjabloon of een antwoord geschreven zonder te ontsnappen, wat een cross-site-scriptingpad opent.

  • Een beveiligingslint of -controle is uitgeschakeld

    Een statische-analyse-regel of een beveiligingslint wordt onderdrukt (een inline-negeren, een uitgeschakelde regel) om een wijziging te laten slagen in plaats van het probleem dat het signaleerde op te lossen.

  • Onbetrouwbare input wordt gedeserialiseerd

    Gegevens van buiten de vertrouwensgrens worden gedeserialiseerd in objecten of geëvalueerd, een klassiek patroon voor remote code execution.

  • Validatie wordt verwijderd

    Inputvalidatie of -sanering die een pad beschermde, wordt tijdens een refactor verwijderd, zodat slecht gevormde of vijandige input nu de logica erachter bereikt.

Worked example

Een query die is samengesteld uit gebruikersinput.

Er wordt een zoekfunctie toegevoegd. De snelste manier om te filteren op de zoekterm van de gebruiker is deze rechtstreeks in de SQL-string te plaatsen. Het werkt voor normale input, maar het is een SQL-injectie: een speciaal ontworpen term kan gegevens lezen of wijzigen die het nooit zou moeten bereiken.

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

Het interpoleren van de zoekterm in de SQL-string is een SQL-injectiepad: een speciaal ontworpen term breekt uit de string en wordt uitgevoerd als query-logica. A.8.28 (veilig coderen) verwacht dat juist deze klasse kwetsbaarheden wordt vermeden. Ga terug naar een geparametriseerde query, die de input als gegevens behoudt in plaats van als code.

What an auditor does with this

Veilig coderen wordt gecontroleerd op de werkwijze en in de code.

Een auditor zoekt naar bewijs dat veilig coderen deel uitmaakt van uw proces: codebeoordeling, statische analyse, afhankelijkheidsscanning, en dat bevindingen worden opgevolgd. Een wijziging die een injectiepad introduceert of een beveiligingscontrole uitschakelt, is de concrete falen achter dat proces, en dit is zichtbaar in de diff. Het opvangen ervan tijdens de beoordeling is zowel de oplossing als het bewijs dat de werkwijze werkt.

What this is, and is not

Een beoordeling, geen volledige SAST-suite.

heygrc markeert wijzigingen die A.8.28 raken en citeert de maatregel, zodat de oplossing in de pull request plaatsvindt. Het is geen vervanging voor uw statische analyse of beveiligingstesten; het is de framework-bewuste laag die een kwetsbaarheid in veilig coderen koppelt aan de maatregel die het schendt.