Instructions
Lea el texto detenidamente una primera vez sin distracciones. Subraye cada término técnico nuevo y búsquelo si es necesario. Revise cada ejemplo y anote en una libreta la vulnerabilidad, la entrada explotada y la contramedida propuesta. Finalmente, redacte un breve resumen de cinco líneas sobre la amenaza que considere más crítica para su contexto laboral. Guarde sus notas: se utilizarán en el cuestionario de opción múltiple que sigue.
Contenu
Introducción
La gran mayoría de las aplicaciones modernas funciona sobre el protocolo de transferencia de hipertexto y tecnologías asociadas como hojas de estilo en cascada, lenguaje de marcado de hipertexto, JavaScript en el navegador y llamadas a interfaces de programación de aplicaciones representacionales. Cada una de esas capas abre una superficie de ataque. Comprender las amenazas web más frecuentes es el primer paso para priorizar pruebas y correcciones, diseñar controles eficaces y, en último término, proteger los datos y la continuidad operativa.
Diferencia entre amenaza, vulnerabilidad y riesgo aplicada al contexto web
Una amenaza es un agente o evento capaz de causar daño. Un error de lógica empresarial, un atacante automatizado o un compañero descuidado con acceso privilegiado son ejemplos de amenazas. Una vulnerabilidad es la debilidad que la amenaza aprovecha, por ejemplo la falta de validación de entrada de datos. El riesgo es la probabilidad combinada con el impacto de que la amenaza explote la vulnerabilidad. Al abordar cada amenaza que veremos, mantenga en mente este triángulo: identificar la debilidad, imaginar el agente que puede aprovecharla, estimar su efecto.
Principio general de defensa
Todas las amenazas descritas se combaten aplicando defensa en profundidad: validar los datos, autenticar y autorizar cada petición, cifrar la información en tránsito y en reposo, registrar los eventos, vigilar las anomalías y actualizar los componentes. Ese patrón se repetirá a lo largo de los ejemplos.
1. Inyección de comandos del lenguaje de consulta estructurado
Descripción: la aplicación concatena directamente datos del usuario dentro de una instrucción de consulta estructurada. El atacante envía metacaracteres (comillas simples, punto y coma) para alterar la lógica y recuperar, modificar o eliminar registros. Ejemplo concreto: "usuario=1 OR 1=1" enviado en la URL hace que la cláusula WHERE sea siempre verdadera y devuelva todas las filas de la tabla "clientes". Prevención simple: utilizar instrucciones preparadas con parámetros, escapar caracteres especiales y asignar a cada cuenta de base de datos el privilegio mínimo necesario.
2. Inyección de comandos del sistema operativo
Descripción: el programa llama a la intérprete de órdenes del servidor, por ejemplo mediante la función "system" en lenguaje de programación C. Si concatena datos no confiables, el atacante inserta caracteres de unión como "&&" o "|" para ejecutar órdenes arbitrarias. Ejemplo: la aplicación forma "ping -c 1 " + dirección proporcionada, y el atacante envía "8.8.8.8 && rm -rf /var/www". Prevención: evitar intérpretes externos o, si resulta imprescindible, emplear bibliotecas que escapen cada argumento y deshabiliten metacaracteres.
3. Inyección de expresiones en lenguaje ligero JavaScript (XSS reflejado)
Descripción: un campo de entrada no se limpia y el navegador interpreta etiquetas de secuencia de comandos. El atacante arma un enlace como "?q=" y lo envía a la víctima. Cuando la víctima accede, su navegador ejecuta el código y transmite su identificador de sesión. Prevención: codificar los caracteres especiales antes de reflejar datos, enviar cabeceras que impidan inserción de secuencias de comandos, y emplear marcos de plantillas que apliquen escapes por defecto.
4. Inyección de expresiones en lenguaje ligero JavaScript almacenado
Descripción: similar al caso anterior pero el código malicioso se guarda en la base de datos (por ejemplo en un comentario). Afecta a todo visitante posterior sin intervención del atacante. Ejemplo: un foro sin filtrado permite escribir "
", lo que desencadena la revelación de cookies cada vez que alguien lee el hilo. Prevención: los mismos controles de codificación, acompañados de filtros de listas permitidas para contenido enriquecido.
5. Falsificación de petición intersitio
Descripción: la víctima autenticada visita un sitio malicioso que fuerza a su navegador a enviar una petición automática al sitio legítimo donde tiene sesión abierta. Como la cookie legítima se envía automáticamente, la solicitud se considera válida. Ejemplo: un formulario oculto que emite una petición POST para cambiar el correo electrónico del usuario. Prevención: incluir token aleatorio y único en cada formulario o cabecera personalizada, verificar el origen y el destino, deshabilitar métodos no utilizados.
6. Ruptura de control de autenticación y gestión de sesión
Descripción: contraseñas débiles, reutilización de credenciales, identificadores de sesión predecibles o falta de caducidad permiten que un atacante asuma la identidad de otro usuario. Ejemplo: la sesión se almacena en una cookie con valor incremental como "SID=1234". El atacante simplemente prueba números ascendentes hasta que acierta un identificador activo. Prevención: usar identificadores aleatorios robustos, fuerza de contraseñas, política de bloqueo tras intentos fallidos, tiempo máximo de sesión y regeneración del identificador al elevar privilegios.
7. Control de acceso defectuoso
Descripción: la lógica de verificación de permisos reside solo en la interfaz. El atacante modifica la ruta o parámetro y accede a un recurso no autorizado. Ejemplo: un enlace destinado al propio usuario apunta a "/perfil/34" y el atacante cambia el número a "/perfil/35" para ver datos ajenos. Prevención: verificar el permiso en el servidor para cada petición, no en el navegador; separar claramente la autenticación de la autorización; emplear listas de control de acceso basadas en roles.
8. Exposición de datos sensibles
Descripción: información personal, financiera o de salud viaja sin cifrado o se almacena sin protección. Ejemplo: el campo "número de tarjeta" se guarda en texto claro dentro de la base de datos para agilizar la búsqueda. En caso de filtración, los atacantes obtendrán los números completos. Prevención: cifrar datos en reposo con algoritmos modernos (criptografía de clave simétrica avanzada), cifrar en tránsito con protocolo de seguridad de la capa de transporte, y limitar la retención o visibilidad de los datos según el principio de mínima relevancia.
9. Deserialización insegura
Descripción: la aplicación recibe un objeto serializado desde el cliente y lo reconstruye sin verificar su integridad ni origen. Un atacante modifica el flujo de bytes para incluir instrucciones que se ejecutarán al reinstanciarse el objeto. Ejemplo: en un formato de serialización del lenguaje de programación Python, se reemplaza el tipo "nota" por uno especial que ejecuta una función del sistema operativo. Prevención: no aceptar objetos serializados de fuentes externas, validar firma digital, o reemplazar el formato por intercambios basados en texto validados como JavaScript Object Notation.
10. Configuración incorrecta de seguridad
Descripción: s... (regístrate para ver el resto 👇)
La gran mayoría de las aplicaciones modernas funciona sobre el protocolo de transferencia de hipertexto y tecnologías asociadas como hojas de estilo en cascada, lenguaje de marcado de hipertexto, JavaScript en el navegador y llamadas a interfaces de programación de aplicaciones representacionales. Cada una de esas capas abre una superficie de ataque. Comprender las amenazas web más frecuentes es el primer paso para priorizar pruebas y correcciones, diseñar controles eficaces y, en último término, proteger los datos y la continuidad operativa.
Diferencia entre amenaza, vulnerabilidad y riesgo aplicada al contexto web
Una amenaza es un agente o evento capaz de causar daño. Un error de lógica empresarial, un atacante automatizado o un compañero descuidado con acceso privilegiado son ejemplos de amenazas. Una vulnerabilidad es la debilidad que la amenaza aprovecha, por ejemplo la falta de validación de entrada de datos. El riesgo es la probabilidad combinada con el impacto de que la amenaza explote la vulnerabilidad. Al abordar cada amenaza que veremos, mantenga en mente este triángulo: identificar la debilidad, imaginar el agente que puede aprovecharla, estimar su efecto.
Principio general de defensa
Todas las amenazas descritas se combaten aplicando defensa en profundidad: validar los datos, autenticar y autorizar cada petición, cifrar la información en tránsito y en reposo, registrar los eventos, vigilar las anomalías y actualizar los componentes. Ese patrón se repetirá a lo largo de los ejemplos.
1. Inyección de comandos del lenguaje de consulta estructurado
Descripción: la aplicación concatena directamente datos del usuario dentro de una instrucción de consulta estructurada. El atacante envía metacaracteres (comillas simples, punto y coma) para alterar la lógica y recuperar, modificar o eliminar registros. Ejemplo concreto: "usuario=1 OR 1=1" enviado en la URL hace que la cláusula WHERE sea siempre verdadera y devuelva todas las filas de la tabla "clientes". Prevención simple: utilizar instrucciones preparadas con parámetros, escapar caracteres especiales y asignar a cada cuenta de base de datos el privilegio mínimo necesario.
2. Inyección de comandos del sistema operativo
Descripción: el programa llama a la intérprete de órdenes del servidor, por ejemplo mediante la función "system" en lenguaje de programación C. Si concatena datos no confiables, el atacante inserta caracteres de unión como "&&" o "|" para ejecutar órdenes arbitrarias. Ejemplo: la aplicación forma "ping -c 1 " + dirección proporcionada, y el atacante envía "8.8.8.8 && rm -rf /var/www". Prevención: evitar intérpretes externos o, si resulta imprescindible, emplear bibliotecas que escapen cada argumento y deshabiliten metacaracteres.
3. Inyección de expresiones en lenguaje ligero JavaScript (XSS reflejado)
Descripción: un campo de entrada no se limpia y el navegador interpreta etiquetas de secuencia de comandos. El atacante arma un enlace como "?q=" y lo envía a la víctima. Cuando la víctima accede, su navegador ejecuta el código y transmite su identificador de sesión. Prevención: codificar los caracteres especiales antes de reflejar datos, enviar cabeceras que impidan inserción de secuencias de comandos, y emplear marcos de plantillas que apliquen escapes por defecto.
4. Inyección de expresiones en lenguaje ligero JavaScript almacenado
Descripción: similar al caso anterior pero el código malicioso se guarda en la base de datos (por ejemplo en un comentario). Afecta a todo visitante posterior sin intervención del atacante. Ejemplo: un foro sin filtrado permite escribir "
5. Falsificación de petición intersitio
Descripción: la víctima autenticada visita un sitio malicioso que fuerza a su navegador a enviar una petición automática al sitio legítimo donde tiene sesión abierta. Como la cookie legítima se envía automáticamente, la solicitud se considera válida. Ejemplo: un formulario oculto que emite una petición POST para cambiar el correo electrónico del usuario. Prevención: incluir token aleatorio y único en cada formulario o cabecera personalizada, verificar el origen y el destino, deshabilitar métodos no utilizados.
6. Ruptura de control de autenticación y gestión de sesión
Descripción: contraseñas débiles, reutilización de credenciales, identificadores de sesión predecibles o falta de caducidad permiten que un atacante asuma la identidad de otro usuario. Ejemplo: la sesión se almacena en una cookie con valor incremental como "SID=1234". El atacante simplemente prueba números ascendentes hasta que acierta un identificador activo. Prevención: usar identificadores aleatorios robustos, fuerza de contraseñas, política de bloqueo tras intentos fallidos, tiempo máximo de sesión y regeneración del identificador al elevar privilegios.
7. Control de acceso defectuoso
Descripción: la lógica de verificación de permisos reside solo en la interfaz. El atacante modifica la ruta o parámetro y accede a un recurso no autorizado. Ejemplo: un enlace destinado al propio usuario apunta a "/perfil/34" y el atacante cambia el número a "/perfil/35" para ver datos ajenos. Prevención: verificar el permiso en el servidor para cada petición, no en el navegador; separar claramente la autenticación de la autorización; emplear listas de control de acceso basadas en roles.
8. Exposición de datos sensibles
Descripción: información personal, financiera o de salud viaja sin cifrado o se almacena sin protección. Ejemplo: el campo "número de tarjeta" se guarda en texto claro dentro de la base de datos para agilizar la búsqueda. En caso de filtración, los atacantes obtendrán los números completos. Prevención: cifrar datos en reposo con algoritmos modernos (criptografía de clave simétrica avanzada), cifrar en tránsito con protocolo de seguridad de la capa de transporte, y limitar la retención o visibilidad de los datos según el principio de mínima relevancia.
9. Deserialización insegura
Descripción: la aplicación recibe un objeto serializado desde el cliente y lo reconstruye sin verificar su integridad ni origen. Un atacante modifica el flujo de bytes para incluir instrucciones que se ejecutarán al reinstanciarse el objeto. Ejemplo: en un formato de serialización del lenguaje de programación Python, se reemplaza el tipo "nota" por uno especial que ejecuta una función del sistema operativo. Prevención: no aceptar objetos serializados de fuentes externas, validar firma digital, o reemplazar el formato por intercambios basados en texto validados como JavaScript Object Notation.
10. Configuración incorrecta de seguridad
Descripción: s... (regístrate para ver el resto 👇)
