Codificación segura, en el código.
ISO 27001:2022 A.8.28 (codificación segura) consiste en aplicar principios de codificación segura para que el software no se distribuya con el tipo de vulnerabilidades en las que confían los atacantes: inyecciones, manejo inseguro de entrada y salida, configuraciones inseguras por defecto. De todos los controles del Anexo A, es el que reside de manera más directa en el código, lo que convierte la solicitud de extracción en el lugar natural para aplicarlo.
The shapes the same control failure takes.
A.8.28 se debilita cuando un cambio introduce un patrón conocido como peligroso o elimina una protección contra él. Las formas recurrentes:
Una consulta se construye mediante concatenación de cadenas
La entrada del usuario se interpola directamente en una cadena SQL, de shell o de consulta en lugar de pasarse como parámetro, abriendo una vía de inyección.
La salida se representa sin escapar
Los datos controlados por el usuario se escriben en HTML, una plantilla o una respuesta sin escapar, abriendo una vía de scripting entre sitios.
Se desactiva un análisis de linting o una verificación de seguridad
Se silencia una regla de análisis estático o un linter de seguridad (una ignorancia en línea, una regla desactivada) para que un cambio pase en lugar de corregir lo que señalaba.
Se deserializa una entrada no confiable
Los datos provenientes de fuera del límite de confianza se deserializan en objetos o se evalúan, un patrón clásico de ejecución remota de código.
Se elimina la validación
La validación o saneamiento de entrada que protegía una ruta se elimina en una refactorización, por lo que ahora la entrada malformada o hostil llega a la lógica detrás de ella.
Una consulta ensamblada a partir de la entrada del usuario.
Se está agregando una función de búsqueda. La forma más rápida de filtrar por el término del usuario es insertarlo directamente en la cadena SQL. Funciona con entrada normal, pero es una inyección SQL: un término elaborado puede leer o modificar datos a los que nunca debería acceder.
- const rows = await db.query("SELECT * FROM items WHERE name = $1", [term])+ const rows = await db.query(`SELECT * FROM items WHERE name = '${term}'`)return rowsInterpolando el término de búsqueda en la cadena SQL se crea una vía de inyección SQL: un término elaborado escapa de la cadena y se ejecuta como lógica de consulta. A.8.28 (codificación segura) espera que se evite exactamente esta clase de vulnerabilidad. Vuelve a una consulta parametrizada, que mantiene la entrada como datos en lugar de como código.
La codificación segura se verifica en la práctica y en el código.
Un auditor busca evidencia de que la codificación segura forma parte de su proceso: revisión de código, análisis estático, escaneo de dependencias, y que los hallazgos se abordan. Un cambio que introduce una vía de inyección o desactiva una verificación de seguridad es el fracaso concreto detrás de ese proceso, y es visible en el diff. Detectarlo en la revisión es tanto la corrección como la evidencia de que la práctica funciona.
Una revisión, no una suite completa de SAST.
heygrc marca los cambios que afectan a A.8.28 y cita el control para que la corrección ocurra en la solicitud de extracción. No es un reemplazo para su análisis estático o sus pruebas de seguridad; es la capa consciente del marco que vincula una vulnerabilidad de codificación segura con el control que infringe.