Los 5 ataques de inyección más peligrosos

 


¿Qué son los ataques de inyección?

Los ataques de inyección tienen como objetivo las vulnerabilidades de inyección, una categoría muy amplia de fallas de seguridad cibernética que incluye algunos de los riesgos de seguridad de aplicaciones más graves. De hecho, el OWASP Top 10 para 2021 enumera  la inyección como la tercera categoría de riesgo general para la seguridad de aplicaciones web . A pesar de la amplia variedad de vectores de ataque, el denominador común de casi todos los ataques de inyección es que los atacantes pueden insertar  entradas de usuario no validadas  directamente en el código de la aplicación ejecutada. 

Según el tipo de vulnerabilidad y el objetivo del ataque, un atacante podría inyectar consultas de base de datos, código JavaScript, código de aplicación nativa, comandos del sistema operativo, etc. Un ataque de inyección exitoso puede tener una variedad de consecuencias, que incluyen una violación de datos, denegación de servicio,  elevación de privilegios , omisión de autenticación o incluso el compromiso total de un sistema de destino a través  de la ejecución remota de código

#1: Inyección SQL (SQLi)

La gran mayoría de las aplicaciones web están respaldadas por bases de datos, y los sistemas de administración de bases de datos más populares aún utilizan  SQL (lenguaje de consulta estructurado)  como lenguaje de acceso a los datos. Para realizar un  ataque de inyección de código SQL  , un pirata informático malicioso desliza una declaración SQL en los datos ingresados ​​en un formulario web, campo de comentario, cadena de consulta u otro canal de entrada accesible para usuarios externos. El código malicioso suele ser una consulta SQL diseñada para extraer datos confidenciales, pero también puede ser una instrucción SQL destinada a modificar el contenido de la base de datos, incluida la eliminación (eliminación) de las tablas de la base de datos. 

Si la aplicación de destino es vulnerable a la inyección SQL, enviará estos datos directamente a la base de datos sin verificar si es seguro. Luego, en lugar de almacenar un comentario o recuperar algunos datos de la cuenta, el servidor de la base de datos ejecutará sentencias SQL maliciosas inyectadas por el atacante. Incluso si la aplicación vulnerable no expone los datos directamente, los atacantes pueden usar la inyección SQL ciega para descubrir información indirectamente. 

Las inyecciones de SQL se encuentran entre las vulnerabilidades de aplicaciones web más antiguas y peligrosas. Incluido en la enumeración de debilidades comunes como  CWE-89: neutralización incorrecta de elementos especiales utilizados en un comando SQL, la inyección SQL ocupa el puesto n. ° 6 en el  CWE Top 25 para 2021 . Invicti detecta muchos tipos de vulnerabilidades de inyección de SQL, desde la típica  inyección de SQL en banda hasta la inyección  de  SQL ciega  (incluida la inyección de SQL  basada en booleanos ) y  la inyección de SQL fuera de banda

Consulte nuestra  hoja de trucos de inyección SQL  para obtener una discusión detallada de los ataques de inyección SQL, completa con ejemplos de carga útil para varios sistemas populares de administración de bases de datos SQL. 

#2: Script entre sitios (XSS)

Si bien no tiene "inyección" en el nombre, el  cross-site scripting (XSS)  es, en esencia, una vulnerabilidad de inyección de script. Cualquier aplicación web que no desinfecte las entradas proporcionadas por el usuario que contienen código de secuencia de comandos (generalmente JavaScript) podría ser vulnerable a las secuencias de comandos entre sitios (XSS). Para explotar una vulnerabilidad XSS, el atacante proporciona una cadena de texto que contiene código malicioso, por ejemplo, colocándolo en la URL como parámetro de ID de usuario. En lugar de ser tratado como un valor de parámetro regular, el navegador de la víctima ejecuta la carga útil del ataque. 

Los ataques XSS pueden tener consecuencias graves, desde redirigir al usuario a un sitio malicioso hasta robar cookies de sesión y secuestrar la sesión del usuario. Si bien el filtrado de entrada del usuario puede reducir un poco el riesgo de un ataque exitoso, hay muchas formas de  evadir los filtros XSS , por lo que escribir código seguro es siempre la línea de defensa recomendada. 

XSS figura en la clasificación de debilidades de CWE en  CWE-79: Neutralización incorrecta de la entrada durante la generación de páginas web  y se clasificó como la debilidad de software más peligrosa número 2 en el  CWE Top 25 para 2021 . Invicti detecta varios tipos de  vulnerabilidades XSS , incluido  XSS almacenado (persistente)  y  XSS basado en DOM

#3: Inyección de comandos del sistema operativo

Ocasionalmente, las aplicaciones web pueden necesitar ejecutar comandos del sistema en el sistema operativo subyacente. Si la aplicación tiene una  vulnerabilidad de inyección de comandos  del sistema operativo, los atacantes pueden proporcionar sus propios comandos del sistema operativo en las entradas del usuario. La inyección de comandos exitosa (también conocida como inyección de shell) puede ser extremadamente peligrosa, ya que puede permitir a los atacantes obtener información sobre el sistema operativo y la configuración del servidor, escalar sus permisos o incluso ejecutar comandos arbitrarios del sistema para comprometer completamente el sistema. 

Siempre es mejor prevenir que curar, por lo que es una buena práctica evitar llamar a los comandos del sistema desde las aplicaciones web siempre que sea posible. Cuando sea necesario ejecutar un comando del sistema, siempre valide cuidadosamente las entradas del usuario y restrinja estrictamente las listas blancas. 

La inyección de comandos del sistema operativo ocupó el quinto lugar en la lista CWE Top 25 como  CWE-78: Neutralización incorrecta de elementos especiales utilizados en un comando del sistema operativo . Invicti detecta varias variantes de vulnerabilidades de inyección de comandos, incluida la inyección de comandos a ciegas y la inyección de comandos fuera de banda. 

#4: Inyección de código (ejecución remota de código)

Si los atacantes pueden proporcionar el código de la aplicación como entrada del usuario y hacer que el servidor lo ejecute, su aplicación tiene una  vulnerabilidad de inyección de código  (también conocida como  ejecución remota de código o RCE). Por ejemplo, si la aplicación vulnerable está escrita en PHP, los atacantes pueden inyectar código PHP que ejecuta el intérprete de PHP en el servidor web. 

Tenga en cuenta que la inyección de código es diferente de la inyección de comandos del sistema operativo porque está inyectando código de aplicación, no comandos del sistema (aunque uno puede conducir al otro si su aplicación acepta código malicioso que llama a un comando del sistema). Si el atacante logra obtener la ejecución remota de código, el sistema de destino debe considerarse comprometido, por lo que se trata de una vulnerabilidad crítica. 

La inyección de código se clasifica en  CWE-94: control inadecuado de la generación de código . Invicti detecta docenas de vulnerabilidades de ejecución y evaluación de código en una variedad de marcos y lenguajes de programación. 

#5: inyección XXE

Cerrando este top 5 está  la inyección de entidad externa XML (XXE) . Si una aplicación acepta entradas XML y está configurada para admitir definiciones de tipos de documentos heredados (DTD) con una seguridad de analizador XML débil, los atacantes pueden enviarle documentos XML especialmente diseñados para realizar ataques que van desde  el cruce de directorios  hasta  la falsificación de solicitudes del lado del servidor (SSRF)  y ataques remotos . ejecución de código. 

A diferencia de los cuatro ataques de inyección anteriores, este no explota la entrada de usuario no validada sino la funcionalidad heredada inherentemente insegura en los analizadores XML, por lo que puede ser particularmente peligroso. Si su aplicación procesa documentos XML, la única forma de evitar esta vulnerabilidad es deshabilitar la compatibilidad con DTD o, al menos, con entidades externas. 

Los vectores de ataque relacionados con entidades externas XML se clasifican como  CWE-611: Restricción incorrecta de la referencia de entidad externa XML . Si bien figura en el puesto n. ° 4 en OWASP Top Ten para 2017, la inyección XXE se fusionó con la categoría Configuración incorrecta de seguridad en 2021. Invicti detecta vulnerabilidades de inyección XXE, incluida la inyección XXE fuera de banda. 

Otros ataques de inyección comunes

Esta publicación solo rasca la superficie de los ataques de inyección de aplicaciones web, por lo que aquí hay algunas menciones (des)honorosas que no se encuentran entre los cinco primeros: 

  • La inyección de plantillas del lado del servidor (SSTI)  ataca los motores de plantillas de destino que se utilizan para generar dinámicamente código de página web basado en plantillas del lado del servidor. Si los atacantes pueden ingresar expresiones en el lenguaje de plantilla relevante, su código malicioso se incluirá en la página HTML. La inyección de lenguaje de expresión  es una categoría relacionada de ataques, en la que los atacantes inyectan expresiones específicas de un marco web en lugar de un motor de plantillas. 
  • La inyección de encabezado HTTP (inyección CRLF)  es posible si una aplicación acepta caracteres de nueva línea en la entrada que va directamente a un encabezado HTTP. Debido a que las solicitudes HTTP usan una nueva línea para separar el encabezado y el cuerpo, la inyección de caracteres de nueva línea puede permitir que un atacante manipule los datos HTML devueltos por el servidor, por ejemplo, para agregar JavaScript malicioso para XSS. 
  • Los ataques de inyección NoSQL  siguen el mismo principio que la inyección SQL, pero se dirigen a bases de datos que no usan SQL, como MongoDB, Cassandra o Elasticsearch. A diferencia de SQLi, donde se pueden usar ataques muy similares contra varios productos de servidor, la inyección de NoSQL requiere cargas útiles de ataque dedicadas para cada tipo de servidor de base de datos. 

Prevención de ataques de inyección

Todos menos uno de los ataques de inyección enumerados anteriormente se basan en la ejecución de entradas no confiables por parte de la aplicación web. Como era de esperar,  la validación de entrada incorrecta  tiene su propio lugar en la lista CWE Top 25, justo en el puesto #4. La desinfección, el filtrado y la codificación cuidadosos de todas las entradas controladas por el usuario pueden ayudar a prevenir la gran mayoría de las vulnerabilidades de inyección. 

Fundamentalmente, los desarrolladores deben conocer y utilizar los mecanismos de procesamiento de entrada seguros proporcionados por los marcos y lenguajes web modernos. Por ejemplo, la inyección SQL se evita fácilmente mediante el uso de consultas parametrizadas o declaraciones preparadas del lado del servidor (también conocidas como procedimientos almacenados). Y con marcos como React, escribir código que sea vulnerable a XSS solo es posible si deliberadamente pasa por alto las protecciones integradas. 

Para minimizar su superficie de ataque explotable a través de cambios frecuentes de aplicaciones y nuevos métodos de ataque, se recomienda la práctica de escanear de forma regular y automática todas sus aplicaciones web y API con una solución de prueba de seguridad de aplicaciones de alta calidad integrada directamente en su ciclo de vida de desarrollo. Consulte nuestro documento técnico para obtener información sobre cómo puede  integrar el análisis de vulnerabilidades en el SDLC .

 

Fuente: https://www.scmagazine.com/

No olvides Compartir...  
Siguenos en twitter: @disoftin - @fredyavila - @PaolaMRincon

Publicar un comentario

0 Comentarios