Tema 4
No alcanza con tener datos importantes; hay que protegerlos correctamente cuando se transmiten, se almacenan y se procesan. Las fallas criptográficas aparecen cuando la aplicación usa mecanismos débiles, configuraciones inseguras o directamente prescinde de protección donde era indispensable.
Las aplicaciones web procesan continuamente información sensible: contraseñas, sesiones, datos personales, correos, documentos, registros médicos, datos financieros, claves API, tokens y configuraciones internas. Si esa información se transmite o almacena sin protección adecuada, el sistema puede quedar expuesto aunque otros controles funcionen correctamente.
OWASP denomina Cryptographic Failures a las fallas relacionadas con la protección insuficiente de datos mediante criptografía o mecanismos equivalentes. Antes esta categoría se asociaba mucho a "Sensitive Data Exposure", pero el nombre actual apunta mejor al problema de fondo: no basta con reconocer que los datos son sensibles, hay que usar bien la protección criptográfica donde corresponde.
Este tema no busca convertirnos en criptógrafos, sino desarrollar criterio para entender cuándo la aplicación necesita cifrado, hashing, gestión segura de claves y configuraciones robustas, y qué errores comunes destruyen esa protección.
En seguridad web, la criptografía suele cumplir varias funciones distintas. Cada una protege un aspecto diferente de la información.
Por eso la pregunta correcta no es solamente "¿la aplicación usa cifrado?", sino "¿qué datos protege, en qué momento, con qué mecanismo y frente a qué amenaza?".
Una organización no puede proteger bien lo que no identifica claramente. Antes de hablar de algoritmos o certificados, la aplicación debe saber qué información requiere protección especial.
| Tipo de dato | Ejemplos | Riesgo si se expone |
|---|---|---|
| Credenciales | Contraseñas, tokens, secretos de API | Toma de cuentas, acceso a sistemas, movimiento lateral |
| Datos personales | Nombre, DNI, dirección, teléfono, correo | Privacidad comprometida, fraude, sanciones |
| Datos financieros | Pagos, números de cuenta, historial de compras | Fraude económico, daño reputacional |
| Datos clínicos o legales | Diagnósticos, expedientes, documentación sensible | Alto impacto personal y regulatorio |
| Datos técnicos internos | Configuraciones, claves privadas, backups, cadenas de conexión | Compromiso ampliado del entorno |
Si el equipo no distingue estos activos de la información no sensible, tenderá a subproteger unos o a sobreexponer otros.
El cifrado en tránsito protege la información mientras viaja entre cliente y servidor, o entre servicios internos. Su objetivo es impedir que un atacante en el camino pueda leer o alterar el tráfico fácilmente.
En aplicaciones web esto suele lograrse con HTTPS, es decir, HTTP sobre TLS.
Si la aplicación transmite datos sensibles sin HTTPS o acepta versiones débiles del canal, puede exponer:
HTTPS brinda tres beneficios principales cuando está bien implementado:
Sin embargo, HTTPS no resuelve por sí solo:
HTTPS protege el camino; no arregla decisiones inseguras dentro de la aplicación.
El cifrado en reposo protege la información cuando ya está almacenada, por ejemplo en bases de datos, discos, backups, buckets de almacenamiento o archivos exportados. Su objetivo es reducir el impacto si un soporte es robado, un backup se filtra o una capa de infraestructura queda expuesta.
Es importante entender que cifrar en reposo no sustituye el control de acceso de la aplicación. Si el sistema descifra y entrega datos a cualquier usuario no autorizado, el problema sigue existiendo. Aun así, sigue siendo una capa valiosa cuando el riesgo está en la extracción directa de soportes o datos persistentes.
Una confusión muy común es tratar cifrado y hashing como si fueran equivalentes. No lo son.
| Mecanismo | Propósito | Característica clave |
|---|---|---|
| Cifrado | Ocultar información y poder recuperarla luego | Es reversible con la clave adecuada |
| Hashing | Representar datos de forma no reversible | No está pensado para recuperar el valor original |
Por eso las contraseñas no deberían almacenarse cifradas "para luego verlas", sino hasheadas con algoritmos apropiados para ese uso.
Uno de los errores más graves y todavía presentes en muchas aplicaciones es guardar contraseñas en texto plano o con mecanismos triviales. Si una base de datos se expone y las contraseñas están legibles, el impacto es inmediato y devastador.
Las contraseñas deben almacenarse usando algoritmos de hashing diseñados específicamente para resistir ataques de fuerza bruta y cracking masivo. El objetivo es que, aun si la base es robada, recuperar las contraseñas reales sea costoso y lento.
Guardar contraseñas en claro, cifrarlas con una clave compartida o usar hash rápido sin endurecimiento son prácticas inseguras.
El almacenamiento adecuado de contraseñas requiere mecanismos preparados para este caso de uso, como funciones de derivación de clave y hashing lento. Además, se debe incorporar sal y un costo computacional apropiado.
Conceptos importantes:
El error conceptual más frecuente es elegir algoritmos rápidos porque "rinden mejor". Para contraseñas, esa velocidad favorece al atacante.
Las aplicaciones modernas usan numerosos secretos además de las contraseñas de usuarios: claves de cifrado, secretos JWT, tokens de acceso, cadenas de conexión, credenciales de servicios cloud, llaves SSH y claves API de terceros.
Si esos secretos quedan expuestos en código fuente, archivos de configuración, variables de entorno inseguras, imágenes de contenedor o repositorios públicos, la aplicación puede ser comprometida incluso sin explotar una vulnerabilidad clásica.
Proteger secretos implica:
La seguridad de un esquema criptográfico no depende solo del algoritmo. También depende críticamente de cómo se generan, almacenan, distribuyen, usan y rotan las claves.
Errores frecuentes:
Un algoritmo robusto pierde valor si la clave está mal protegida.
No toda criptografía ofrece el mismo nivel de protección. Usar mecanismos viejos, parámetros débiles o configuraciones heredadas puede generar una falsa sensación de seguridad.
Ejemplos conceptuales de malas decisiones:
Cuando un equipo intenta "ocultar" datos con transformaciones simples, codificación base64, operaciones reversibles triviales o esquemas diseñados internamente, no está aplicando seguridad real. Está creando ofuscación.
La ofuscación puede dificultar una lectura superficial, pero no reemplaza cifrado robusto ni gestión segura de claves. En revisiones de seguridad, este problema aparece con frecuencia en:
A veces el problema no es que falte cifrado, sino que la aplicación expone demasiada información en respuestas, logs, trazas o mensajes de error. Si el servidor devuelve más datos de los necesarios, está ampliando innecesariamente la superficie de exposición.
Ejemplos:
La mejor protección de un dato sensible muchas veces empieza por no transportarlo ni mostrarlo si no es imprescindible.
Las cookies de sesión, tokens de autenticación y otros artefactos de identidad son datos sensibles. Si se interceptan o roban, un atacante puede asumir el contexto del usuario.
Su protección implica:
Secure y HttpOnly.Desde seguridad, estos elementos deben tratarse como equivalentes temporales de identidad.
Muchas exposiciones ocurren fuera del flujo principal de la aplicación. Aunque la interfaz sea correcta, los datos pueden filtrarse por canales secundarios.
Hay que revisar especialmente:
Un backup mal protegido o un log expuesto puede anular por completo el esfuerzo puesto en otras capas de seguridad.
Secure.Las fallas criptográficas pueden tener impacto directo e inmediato porque afectan datos de alto valor y mecanismos centrales de identidad y confianza.
| Falla | Impacto posible |
|---|---|
| Contraseñas mal almacenadas | Toma masiva de cuentas y reutilización en otros servicios |
| Sesiones sin canal seguro | Secuestro de sesión |
| Backups sin cifrar | Filtración masiva de información |
| Secretos expuestos | Acceso a entornos, APIs o servicios internos |
| Cifrado débil u obsoleto | Lectura o alteración de datos protegidos insuficientemente |
Durante un análisis, algunos indicadores sugieren revisar de cerca la protección criptográfica:
Conviene dejar muy explícitas algunas malas prácticas porque siguen apareciendo con frecuencia:
Si la aplicación puede "mostrarte tu contraseña actual", hay un problema grave de diseño.
La prevención de Cryptographic Failures combina decisiones técnicas y operativas.
Una defensa muy poderosa y muchas veces subestimada consiste en almacenar, procesar y exponer menos información. Cuantos menos datos sensibles maneje la aplicación, menor será el impacto si algo falla.
Ejemplos de minimización:
Las fallas criptográficas suelen potenciar otras categorías del curso.
Esto muestra que la criptografía no es una isla: forma parte de un sistema más amplio de protección.
Cryptographic Failures no se limita a elegir un algoritmo. Se trata de proteger correctamente información sensible en cada etapa de su ciclo de vida: transmisión, almacenamiento, uso y retención. Una aplicación puede tener lógica sólida y aun así quedar comprometida si credenciales, sesiones, secretos o backups están mal protegidos.
En el próximo tema estudiaremos A03: Injection, una de las categorías más conocidas de seguridad web, donde el problema ya no es la protección de datos por cifrado, sino la forma en que la aplicación interpreta entradas maliciosas.