Revisión de código seguro
Si no se ha revisado la seguridad del código, la probabilidad de que la aplicación tenga problemas es prácticamente del 100%. Este es un mensaje contundente que aparece en las primeras páginas de la guía de revisión de código de OWASP. Una organización que no pone el código que utiliza y desarrolla bajo revisión es irresponsable con sus activos y los de sus clientes o usuarios. Los problemas de seguridad de sus productos pueden ser explotados por los ciberdelincuentes, provocando fugas de datos o interrupciones en las operaciones y consecuentes multas y pérdida de clientes y reputación. Para ayudar a evitar todo esto, es prudente acompañar el desarrollo de software desde el principio con una revisión de código seguro.
¿Qué es la revisión de código seguro?
La revisión de código seguro es el examen del código fuente de una aplicación para identificar fallas o vulnerabilidades de seguridad. Estas aparecen en el ciclo de vida de desarrollo de software (SDLC) y deben cerrarse o corregirse para fortalecer la seguridad del código. La revisión de código seguro puede llevarse a cabo en cualquier punto del SDLC, pero dentro de la cultura DevSecOps, es más valioso usarla desde las primeras etapas. Este es un procedimiento que puede realizarse de forma manual o automática.
Revisión de código vs. revisión de código seguro
Es crucial distinguir entre una revisión de código estándar y una revisión de código seguro.
Característica | Revisión de código | Revisión de código seguro |
Propósito principal | Mejorar la calidad general, la mantenibilidad, el estilo y la corrección funcional del código. | Identificar y mitigar vulnerabilidades de seguridad y asegurar la adherencia a los estándares de seguridad. |
Enfoque principal | Legibilidad, adherencia a guías de estilo, patrones de diseño y detección de errores. | Validación de entradas, fallas de autenticación/autorización, filtraciones de datos, errores de lógica de negocio y problemas de configuración. |
Participantes clave | Desarrolladores, miembros del equipo de QA. | Desarrolladores, expertos en seguridad y equipos de seguridad especializados. |
La revisión de código seguro garantiza que la seguridad se trate como una característica central de la calidad del código, previniendo la introducción de debilidades que podrían comprometer los datos o la funcionalidad.
¿Cómo funciona la revisión de código seguro?
El enfoque más robusto para la revisión de código seguro es una combinación de revisiones manuales y automatizadas para aprovechar sus capacidades particulares. La revisión automatizada (como SAST) proporciona velocidad y amplitud, mientras que la revisión manual ofrece profundidad y precisión.
La revisión manual de código seguro se lleva a cabo con gran atención al detalle. Uno o más analistas de seguridad examinan el código, entendiendo lo que están evaluando, teniendo en cuenta su uso y contexto, las intenciones de los desarrolladores y la lógica de negocio.
Por otro lado, la revisión automatizada de código seguro es un proceso en el que se examina más código en menos tiempo, pero en el que no se consideran los factores anteriores. Las herramientas trabajan con un conjunto de reglas predefinido, están restringidas a ciertos tipos de vulnerabilidades y sufren, algunas más que otras, el defecto de reportar falsos positivos (i.e., decir que algo es una vulnerabilidad cuando no lo es).
Las herramientas automatizadas de revisión de código seguro, con su evaluación rápida e inicial, actúan como un asistente para el revisor humano, facilitando que los analistas de seguridad se concentren en identificar vulnerabilidades más complejas y críticas para el negocio.
Entre los métodos más utilizados en la revisión de código seguro automatizada se encuentran las pruebas de seguridad de aplicaciones estáticas (SAST) y el análisis de composición de software (SCA; entiende cómo uno difiere del otro en esta entrada del blog).
Característica | Revisión automatizada | Revisión manual |
Método principal | Emparejamiento de patrones automatizado de alta velocidad. | Análisis estratégico impulsado por humanos. |
Contexto/Intención | Limitada a la estructura del código; carece de contexto de ejecución o de negocio. | Comprensión profunda de la arquitectura de la aplicación, contexto e intención empresarial. |
Valor clave | Amplitud: Captura temprana de fallas sintácticas comunes de gran volumen (p. ej., SQLi, XSS). | Profundidad: Hallazgo de fallas complejas en la lógica de negocio, errores de estado y antipatrones de seguridad arquitectónica. |
Aplicación | Escaneo previo a la revisión (pre-commit/PR) para retroalimentación rápida en el IDE/pipeline de CI. | Clasificación de hallazgos automatizados y análisis profundos en componentes críticos (p. ej., lógica de autorización). |
¿Cómo llevar a cabo una revisión de código seguro?
Una revisión de código seguro profesional sigue un proceso metódico para maximizar su impacto:
1. Planificación y definición del alcance
El proceso comienza definiendo el alcance. Dado que la revisión de código seguro consume tiempo, es esencial priorizar la revisión según el riesgo. Esto implica:
Definir objetivos claros: ¿Qué tipos de vulnerabilidades estamos tratando de detectar (p. ej., cumplimiento con PCI DSS o fallas en una nueva característica de autenticación)?
Recopilar contexto: Comprender la arquitectura de la aplicación, los requisitos de negocio y la funcionalidad; reunir modelos de amenazas y hallazgos de seguridad anteriores.
Priorizar el código: Centrar la atención en activos críticos y funciones de alto riesgo como módulos de autenticación, procesamiento de pagos, controles de acceso y nuevas características.
2. Ejecución aumentada por herramientas
La revisión humana se apoya en tecnología para aumentar la eficiencia:
Escaneo previo a la revisión: Ejecutar herramientas automatizadas (SAST/SCA) primero para detectar rápidamente problemas de seguridad conocidos en la línea base del código y en componentes de terceros.
Clasificación: Usar los hallazgos automatizados para filtrar falsos positivos y guiar la investigación manual más profunda hacia rutas de código específicas y de alto riesgo.
Técnicas de análisis manual: El revisor utiliza técnicas como el rastreo de rutas de código (siguiendo las rutas de ejecución) y el mapeo de límites de confianza (analizando puntos de control de seguridad) para aplicar su experiencia en la materia.
3. Profundización y validación de listas de chequeo
El núcleo de la revisión de código seguro implica una revisión detallada, línea por línea, con un enfoque en áreas que requieren comprensión contextual y de lógica de negocio. Durante esta fase, el revisor experto aprovecha listas de chequeo de seguridad estandarizadas (a menudo basadas en OWASP, CWE o políticas internas) para garantizar un examen sistemático de categorías clave como validación de entradas, autenticación y control de acceso.
4. Reporte, remediación y verificación
Los hallazgos se documentan con detalles precisos, incluyendo:
Descripción de la vulnerabilidad: Una explicación clara de la falla y su mapeo de seguridad.
Explotabilidad e impacto: Una evaluación del nivel de riesgo (utilizando un marco de trabajo estandarizado) para ayudar en la priorización.
Ubicación precisa: Nombre del archivo y número de línea, confirmados por validación humana.
Prueba de concepto detallada: Proporcionar una demostración paso a paso de cómo se puede explotar la vulnerabilidad para facilitar la comprensión del desarrollador.
Orientación para la remediación: Sugerencias de código seguro específicas para los desarrolladores.
Después de la remediación, se debe realizar una revisión de seguimiento (reescaneo/reprueba) para verificar que la solución eliminó con éxito la vulnerabilidad y no introdujo nuevas fallas.
La ventaja humana: lo que buscan los expertos
Los expertos en seguridad que aplican las mejores prácticas de revisión de código seguro, considerando también la perspectiva de los actores de amenazas, pueden evaluar el código para reconocer los problemas de seguridad que contribuyen más a la exposición al riesgo del objetivo de evaluación. Por ejemplo, en nuestro último informe anual State of Attacks, compartimos que el 71% de la exposición al riesgo total en los sistemas evaluados fue reportada por el método manual.
La revisión de código seguro realizada por expertos sobresale en encontrar problemas que están cegados por la lógica de negocio para las herramientas automatizadas. La revisión se centra en áreas críticas como las siguientes:
Flujos de lógica de negocio
El revisor analiza los procesos únicos de la aplicación buscando:
Integridad del flujo de trabajo: Oportunidades para eludir transiciones de estado, pasos o validaciones en procesos de múltiples etapas.
Condiciones de carrera: Vulnerabilidades basadas en tiempo en operaciones concurrentes donde múltiples usuarios interactúan con el mismo recurso.
Límites de recursos: Asegurar que se implementen limitaciones de tasa y cuotas de recursos para prevenir denegaciones de servicio o agotamientos de recursos.
Autorización y control de acceso
El revisor verifica la corrección y completitud de la ejecución de seguridad:
Ejecución en el servidor: Verificar que todos los controles de acceso se apliquen en el servidor, no solo en el lado del cliente.
Predeterminados a prueba de fallos: Asegurar que se utilice una política de denegación predeterminada para el acceso.
Prevención de IDOR: Comprobar si hay referencias directas inseguras a objetos (IDOR) donde un usuario puede manipular un parámetro (p. ej., un ID) para acceder a datos de otro usuario o a recursos no autorizados.
Validación de entradas y codificación de salidas
Si bien SAST puede encontrar patrones básicos de inyección, el experto asegura la corrección contextual:
Validación del lado del servidor: Todas las entradas de usuario y externas son validadas independientemente de las comprobaciones del lado del cliente.
Validación de listas de permitidos: Usar listas de permitidos (aceptando solo entradas conocidas como buenas) en lugar de listas de bloqueados (rechazando entradas conocidas como malas) para mayor robustez.
Codificación adecuada al contexto: Asegurar que los datos estén debidamente codificados (HTML, JavaScript, URL, SQL) antes de su salida para prevenir ataques de inyección como XSS o inyección SQL.
Cifrado y gestión de secretos
Algoritmos fuertes y gestión de claves: Verificar el uso de algoritmos modernos y probados (p. ej., AES-256, RSA-2048+) y la generación, almacenamiento y rotación de claves seguras.
Secretos codificados: Identificando dónde un desarrollador cometió el error de dejar información confidencial (por ejemplo, claves API, tokens, credenciales) dentro del código, incluyendo archivos de configuración.
Herramientas de revisión de código seguro
Para la implementación automatizada de la revisión de código seguro, existen herramientas correspondientes que identifican rápidamente vulnerabilidades de seguridad conocidas.
Las herramientas SAST son programas que escanean automáticamente el código fuente o el código objeto de aplicaciones —mientras no se están ejecutando— para detectar vulnerabilidades que coincidan con las almacenadas en bases de datos.
Las herramientas SCA son programas que escanean automáticamente aplicaciones para inventariar sus componentes de software de terceros y sus dependencias, e identificar vulnerabilidades en ellos que coincidan con las registradas en bases de datos.
Revisión de código seguro vs. pruebas de seguridad de aplicaciones
Las pruebas de seguridad de aplicaciones (AST) son un concepto más amplio que la revisión de código seguro. De hecho, esta última es parte de la primera. AST, además de SAST y SCA, involucra métodos de evaluación como pruebas de seguridad de aplicaciones dinámicas (DAST), pruebas de penetración como servicio (PTaaS) e ingeniería inversa. Mientras que la revisión de código seguro se puede aplicar en cualquier etapa del desarrollo de software, DAST y PTaaS, por ejemplo, generalmente se emplean cuando la aplicación puede ejecutarse para evaluar su comportamiento a través de vectores de ataque.
La revisión de código seguro es un elemento fundamental que, cuando se combina con DAST (que verifica errores de ejecución y configuración) y PTaaS, garantiza un enfoque integral y de defensa en profundidad para la seguridad.
¿Cuándo deberías implementar la revisión de código seguro?
La revisión de código seguro es parte de un enfoque preventivo, el cual debería abordarse primero, en lugar de un enfoque reactivo. Aplicar este método tan pronto como se escriben las primeras líneas de código permite identificar y remediar vulnerabilidades antes de pasar a producción. Mantenerse un paso adelante de los hackers maliciosos y bloquear en el código cualquier posible entrada para usos indebidos, incluso "simples travesuras", es sin duda una estrategia muy efectiva para reducir la probabilidad de catástrofes causadas por ciberataques.
Una estrategia holística implica dos estrategias de tiempo principales:
Revisión continua: Implementar herramientas automatizadas en entornos de desarrollo integrados (IDEs) y durante pull requests es la manera más impactante de "desplazar la seguridad hacia la izquierda". Esto permite que los desarrolladores reciban retroalimentación casi en tiempo real y solucionen problemas cuando están más frescos en su mente.
Revisión específica: Reservar una revisión exhaustiva de código manual para puntos estratégicos en el SDLC:
Inicio del proyecto: Evaluación de seguridad integral de una base de código nueva o heredada (legacy).
Lanzamientos mayores: Antes de lanzamientos significativos de versiones para asegurar que los cambios a gran escala sean seguros.
Cambios de arquitectura: Cuando ocurren cambios fundamentales de diseño o tecnología.
Ciclos de cumplimiento: Revisiones extensas periódicas para requisitos regulatorios (PCI DSS, HIPAA, etc.).
¿Por qué es importante la revisión de código seguro?
Un equipo de desarrollo exitoso, comprometido con la seguridad de sus productos, siempre tiene la revisión de código seguro como un pilar. Cualquier organización que desarrolle software debería tenerla entre sus prácticas constantes, desde las primeras etapas del SDLC, prestando atención a los pequeños cambios que los miembros de su equipo realizan gradualmente en el código.
La seguridad en general y las debilidades comunes en el software y su explotación no suelen enseñarse a los desarrolladores en sus academias y lugares de trabajo. E incluso los desarrolladores más experimentados, debido a factores como el agotamiento o la negligencia, pueden cometer errores de codificación y acabar generando vulnerabilidades como las enumeradas en el OWASP Top 10 y el CWE Top 25. Por razones como estas, el código fuente debería permanecer generalmente bajo revisión por expertos en seguridad.
Detección de vulnerabilidades en el código fuente y componentes
La revisión de código seguro identifica la ausencia de prácticas de codificación seguras, la falta de controles de seguridad apropiados y la violación de estándares de cumplimiento como PCI DSS y HIPAA. Los proveedores de revisión de código seguro pueden encontrar, por ejemplo, la ausencia o errores en la validación de entradas (verificación de que cumplan con características específicas) provenientes de diferentes fuentes que interactúan con la aplicación (p. ej., usuarios, archivos, flujos de datos). Pueden descubrir que un desarrollador cometió el error de dejar información confidencial (p. ej., tokens, credenciales) dentro del código, habiendo olvidado eliminarla después de haberla puesto allí sin una justificación razonable. Pueden ver que la información que necesita ser almacenada y transferida no pasa por algoritmos de cifrado adecuados. Del mismo modo, pueden encontrar que los procesos de autenticación de usuarios son bastante débiles, requiriendo, por ejemplo, contraseñas cortas con poca variedad en sus caracteres. Y que los controles de autorización son deficientes y terminan dando acceso innecesario a cualquier usuario sin solicitar permiso.
Un problema importante que a menudo se descubre con la revisión de código seguro, utilizando herramientas SCA, son las vulnerabilidades dentro de componentes de software de terceros y de código abierto. El desarrollo de aplicaciones hoy en día depende en gran medida de componentes de software de código abierto, que son importados de diversas fuentes y sirven como soporte para lo que se pretende construir, lo que a menudo resulta tener poca originalidad. La dependencia también existe entre algunos componentes y otros. Así, al utilizar uno de ellos, por ejemplo, es posible que el desarrollador no sea consciente de la relación de este con los demás. Los ciberdelincuentes tienen entre sus objetivos deseados estas dependencias para buscar vulnerabilidades que explotar.
Aplicación de las mejores prácticas de codificación
Los expertos y las herramientas responsables de una revisión de código seguro se encargarán de verificar si los desarrolladores del software evaluado han empleado prácticas de codificación segura. Aunque tenemos dos publicaciones de blog que abordan más a fondo las prácticas de codificación segura (es decir, "Examina y practica la codificación segura" y "¿Codificación segura en cinco pasos?"), las cuales te invitamos a leer, aquí te presentamos algunas de esas prácticas que siempre deben ser un punto de referencia para el desarrollo y la revisión del código.
En concreto, asegúrate de que tu software cumpla objetivos como los siguientes:
Validar las entradas procedentes de fuentes no confiables y aceptar solo aquellas que cumplen con características específicas.
Verificar la identidad de los usuarios o entidades que soliciten acceso a recursos privados y, en operaciones críticas, solicitar autenticación multifactor.
Exigir a los usuarios que creen contraseñas suficientemente complejas.
Restringir el acceso a recursos específicos de alto valor solo a unos pocos usuarios autorizados.
Dar a los usuarios acceso por defecto solo a los recursos necesarios para realizar determinadas tareas.
Establecer tiempos de espera por inactividad de sesión relativamente cortos.
Utilizar algoritmos de cifrado conocidos, probados y actualizados para la información confidencial en tránsito y en reposo.
No poseer datos sensibles, como comentarios, dentro de su código.
No revelar información valiosa a los atacantes en los mensajes de error resultantes de actividades inválidas.
Todos sus componentes, elaborados por terceros, deben actualizarse a sus últimas versiones.
Para obtener más información sobre prácticas de codificación segura, también puedes consultar las recomendaciones de OWASP para desarrolladores en su guía de revisión de código.
Otros beneficios de la revisión de código seguro
Eficiencia de costos
La revisión de código seguro permite que la cantidad de errores o vulnerabilidades encontradas en las etapas finales del SDLC, a través de procedimientos como el pentesting, sea menor. Por lo tanto, el tiempo que los desarrolladores tienen que dedicar a los procesos de remediación en estas etapas también se puede reducir. Corregir un gran número de vulnerabilidades poco antes de entrar en producción se convierte en una pesadilla para los desarrolladores.
Hay que tener siempre presente que es más fácil y menos costoso corregir el código en el entorno de desarrollo que en producción. Con una revisión de código seguro continua, se está más cerca de la causa del problema y se puede corregir de inmediato, evitando cualquier acumulación.
Fomentar una cultura de seguridad
Gracias a una revisión de código seguro temprana, los desarrolladores pueden empezar a asumir el compromiso no solo de remediar los problemas de seguridad identificados en sus productos, sino también de mejorar sus resultados día a día. Esto puede ser un proceso en cadena. Ciertos grupos de desarrolladores, con la ayuda de los equipos de seguridad y sus pruebas o revisiones, pueden transmitir conocimientos, inspirar a otros a mejorar sus prácticas y productividad, y hacer la transición a una mentalidad en la que todos los miembros de la organización sean responsables de la seguridad.
El ciclo de retroalimentación ayuda a los desarrolladores a aprender de los patrones y prácticas que conducieron al error, mejorando sus habilidades y contribuyendo a la alta calidad del código. Aquellos errores de seguridad que tan a menudo dan lugar a vulnerabilidades pueden volverse menos frecuentes con el tiempo.
Cumplimiento normativo y reputación
Las organizaciones que deciden implementar la revisión de código seguro en sus procesos de desarrollo de software reconocen la responsabilidad de cumplir con los estándares establecidos en sus sectores. Buscan ofrecer productos y servicios que garanticen la seguridad de sus operaciones, datos y otros recursos, principalmente los de sus clientes o usuarios. Este éxito genera confianza y refleja compromiso y calidad, lo que repercute positivamente en su competitividad y reputación.
¿Cómo elegir tu equipo de revisión de código seguro?
Si bien un equipo de desarrolladores puede realizar sus propias revisiones de código, como cuando un desarrollador pide a un compañero que revise su compilación para evitar errores lógicos o de estilo, se recomienda que, en cuestiones de seguridad, participen expertos en la materia. Los ingenieros de seguridad, los revisores de código y los pentesters se especializan en identificar vulnerabilidades. Aportan una perspectiva más amplia y una mentalidad de modelado de amenazas para detectar fallas de seguridad sutiles y estructurales que un desarrollador podría pasar por alto. Además, las revisiones realizadas por un agente externo pueden garantizar que todas las fallas se reporten manteniendo una visión imparcial.
Los elementos principales de la revisión de código seguro dentro de un buen equipo de ciberseguridad deben ser un grupo de expertos en seguridad ampliamente certificado y herramientas automatizadas que muestren bajas tasas de falsos positivos y falsos negativos. Sus evaluaciones deben poder realizarse en una amplia gama de lenguajes de programación, basarse en múltiples estándares de seguridad internacionales y reportar los hallazgos en un único panel de control que priorice, fomente y facilite la remediación.
Revisión de código seguro de Fluid Attacks
En Fluid Attacks, ofrecemos nuestra revisión de código seguro como una revisión integral y precisa del código fuente de tu software, combinando procedimientos manuales (realizados por nuestros pentesters certificados) y automáticos basados en métodos como SAST y SCA. Con nosotros, puedes aplicar la revisión de código seguro desde las primeras etapas de tu SDLC de forma continua. Podrás resolver tus problemas de seguridad con rapidez (priorizando aquellos que representan la mayor exposición al riesgo) en beneficio de la productividad de tu equipo de desarrollo y la seguridad de tus productos.
Nuestra revisión de código seguro es compatible con muchos lenguajes de programación, incluyendo C, C#, C++, HTML, Java, JavaScript, PHP, Python, Ruby y Swift. Entre nuestros requisitos de revisión se encuentran los presentes en más de 60 estándares de seguridad internacionales, entre ellos CERT, CVE, CWE, HIPAA, NIST, OWASP y PCI DSS. Además, nos adaptamos a los requisitos específicos de tu aplicación y lógica de negocio, todo ello revisado y actualizado constantemente.
Integramos nuestro CI Gate en tus pipelines para romper el build cuando hay violaciones de políticas y vulnerabilidades abiertas. Y reportamos todo en nuestra plataforma, donde puedes comprender y analizar a fondo tus problemas de seguridad, así como recibir recomendaciones y gestionar procesos de remediación. Además, tus desarrolladores pueden tener a mano nuestras extensiones de IDE para un reconocimiento más rápido de las líneas de código afectadas y sugerencias de remediación basadas en GenAI. Todo esto es parte de nuestro Hacking Continuo, que también integra métodos de pruebas de seguridad como DAST, CSPM, PTaaS e ingeniería inversa.
No dudes en contactarnos si deseas más información sobre nuestra revisión de código seguro y otras soluciones AppSec. Haz clic aquí para probar nuestro plan Essential de Hacking Continuo de forma gratuita durante 21 días.







