Vulnerabilidades de Aplicaciones
Race conditions · Memory injection · Buffer overflow · Malicious updates
🧩 1. CONCEPTO CLAVE
Las aplicaciones modernas están compuestas por múltiples funciones que interactúan entre sí en memoria. Cuando el diseño, la lógica, el control de acceso o el manejo de datos no se gestiona adecuadamente, los atacantes pueden aprovechar vulnerabilidades lógicas, de sincronización o de memoria para ejecutar código malicioso, elevar privilegios o comprometer el sistema.
🛠️ 2. CATEGORÍAS DE VULNERABILIDADES
1. Condiciones de Carrera (Race Conditions) y TOCTOU
Cuando dos procesos acceden a un mismo recurso sin sincronización adecuada, el sistema puede comportarse de forma inesperada.
-
TOCTOU (Time of Check to Time of Use): El atacante modifica el estado entre la verificación y el uso.
-
🧠 Ejemplo: Un proceso verifica permisos de archivo, pero justo después el atacante sustituye el archivo por uno malicioso.
-
🧨 CVEs reales:
-
Dirty COW (CVE-2016-5195) – Kernel Linux
-
SMBv3 (CVE-2020-0796) – Elevación en Windows
-
2. Inyección de Memoria
Implica insertar código malicioso en la memoria de una aplicación viva. El código se ejecuta con los mismos privilegios que la aplicación.
-
Técnicas comunes: desbordamiento, modificación del heap, trampas en punteros.
-
Propósito: Ejecutar shellcode, crear backdoors o exfiltrar información.
3. Desbordamiento de Búfer (Buffer Overflow)
Se sobrescribe un área de memoria más allá del límite esperado, especialmente en la pila de ejecución (stack).
-
Resultado: se sobrescribe la dirección de retorno, haciendo que el programa ejecute shellcode del atacante.
-
Se mitiga con:
-
ASLR (aleatorización de direcciones)
-
DEP (no ejecución de datos)
-
Validación de entradas y programación segura
-
Un ataque de desbordamiento de búfer donde el atacante reemplaza la dirección de retorno con su propio código (shellcode).
En vez de regresar a main(), la función se redirige a ejecutar código arbitrario.
4. Actualización Maliciosa
Se disfraza una actualización legítima para introducir malware, troyanos o ransomware.
-
Casos reales:
-
CCleaner 2017: Update con backdoor (más de 2M de víctimas)
-
SolarWinds 2020: Supply Chain Attack que comprometió redes gubernamentales y corporativas
-
🧩 3. ALEGORÍA: LA TRAMPA EN EL TEATRO
Imagina que una función (sub()) es como una obra de teatro donde el actor termina y vuelve al backstage (main()).
Pero si alguien cambia la salida del escenario por una trampa oculta, el actor cae directamente a una habitación donde el atacante lo controla.
Eso es un desbordamiento de búfer: se redirige la ejecución a voluntad del atacante.
Las condiciones de carrera serían como dos tramoyistas que cambian el decorado al mismo tiempo sin coordinarse: el resultado es caos o colapso del escenario.
🔍 4. RESUMEN PRÁCTICO
-
Una condición de carrera ocurre cuando el orden de ejecución no está controlado, lo que puede llevar a resultados no deseados o explotables.
-
TOCTOU permite cambiar el estado del sistema entre la verificación y el uso, abriendo la puerta a ataques lógicos.
-
La inyección de memoria introduce código directamente en la RAM de una aplicación viva, muchas veces para ejecutar payloads.
-
El desbordamiento de búfer sobrescribe direcciones de memoria críticas, incluyendo la dirección de retorno, permitiendo ejecutar shellcode malicioso.
-
Las actualizaciones maliciosas se infiltran en entornos confiables como caballos de Troya disfrazados de mejoras de software.
-
Prácticas seguras como ASLR, DEP, validación de entradas, bloqueos y firma digital de actualizaciones son esenciales para mitigar estas amenazas.