A03: La inyección (by OWASP)

Visión general

La inyección se desliza hasta la tercera posición. El 94 % de las aplicaciones se probaron para alguna forma de inyección con una tasa de incidencia máxima del 19 %, una tasa de incidencia promedio del 3 % y 274 000 ocurrencias. Las Enumeraciones de debilidades comunes (CWE) notables incluidas son CWE-79: Cross-site Scripting , CWE-89: SQL Injection y CWE-73: External Control of File Name or Path .

Descripción

Una aplicación es vulnerable a un ataque cuando:

  • La aplicación no valida, filtra ni desinfecta los datos proporcionados por el usuario.

  • Las consultas dinámicas o las llamadas no parametrizadas sin escape consciente del contexto se utilizan directamente en el intérprete.

  • Los datos hostiles se utilizan dentro de los parámetros de búsqueda de mapeo relacional de objetos (ORM) para extraer registros confidenciales adicionales.

  • Los datos hostiles se utilizan o concatenan directamente. El comando SQL o contiene la estructura y los datos maliciosos en consultas dinámicas, comandos o procedimientos almacenados.

Algunas de las inyecciones más comunes son SQL, NoSQL, comando OS, asignación relacional de objetos (ORM), LDAP e inyección de lenguaje de expresión (EL) o biblioteca de navegación de gráficos de objetos (OGNL). El concepto es idéntico entre todos los intérpretes. La revisión del código fuente es el mejor método para detectar si las aplicaciones son vulnerables a las inyecciones. Se recomienda encarecidamente la prueba automatizada de todos los parámetros, encabezados, URL, cookies, JSON, SOAP y entradas de datos XML. Las organizaciones pueden incluir herramientas de prueba de seguridad de aplicaciones estáticas (SAST), dinámicas (DAST) e interactivas (IAST) en la canalización de CI/CD para identificar fallas de inyección introducidas antes de la implementación de producción.

Como prevenir

Prevenir la inyección requiere mantener los datos separados de los comandos y consultas:

  • La opción preferida es usar una API segura, que evita usar el intérprete por completo, proporciona una interfaz parametrizada o migra a herramientas de mapeo relacional de objetos (ORM). Nota: Incluso cuando están parametrizados, los procedimientos almacenados aún pueden introducir inyección SQL si PL/SQL o T-SQL concatenan consultas y datos o ejecutan datos hostiles con EXECUTE IMMEDIATE o exec().

  • Utilice una validación de entrada positiva del lado del servidor. Esta no es una defensa completa ya que muchas aplicaciones requieren caracteres especiales, como áreas de texto o API para aplicaciones móviles.

  • Para cualquier consulta dinámica residual, escape los caracteres especiales usando la sintaxis de escape específica para ese intérprete. Nota: las estructuras SQL, como los nombres de las tablas, los nombres de las columnas, etc., no se pueden escapar y, por lo tanto, los nombres de estructuras proporcionados por el usuario son peligrosos. Este es un problema común en el software de redacción de informes.

  • Utilice LIMIT y otros controles de SQL dentro de las consultas para evitar la divulgación masiva de registros en caso de inyección de SQL.

Ejemplos de escenarios de ataque

Escenario n.º 1: una aplicación utiliza datos que no son de confianza en la construcción de la siguiente llamada SQL vulnerable:

String query = "SELECT \* FROM accounts WHERE custID='" + request.getParameter("id") + "'";

Escenario #2: De manera similar, la confianza ciega de una aplicación en los marcos puede dar como resultado consultas que aún son vulnerables (por ejemplo, Hibernate Query Language (HQL)):

 Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");

En ambos casos, el atacante modifica el valor del parámetro ‘id’ en su navegador para enviar: ‘ o ‘1’=’1. Por ejemplo:

 http://example.com/app/accountView?id=' or '1'='1

Esto cambia el significado de ambas consultas para devolver todos los registros de la tabla de cuentas. Los ataques más peligrosos podrían modificar o eliminar datos o incluso invocar procedimientos almacenados.

Referencias

Lista de CWE mapeados

CWE-20 Validación de entrada incorrecta

CWE-74 Neutralización incorrecta de elementos especiales en la salida utilizada por un componente aguas abajo (‘Inyección’)

CWE-75 Falla al desinfectar elementos especiales en un plano diferente (inyección de elementos especiales)

CWE-77 Neutralización incorrecta de elementos especiales utilizados en un comando (“Inyección de comando”)

CWE-78 Neutralización incorrecta de elementos especiales utilizados en un comando de sistema operativo (‘Inyección de comando de sistema operativo’)

CWE-79 Neutralización incorrecta de la entrada durante la generación de páginas web (“Cross-site Scripting”)

CWE-80 Neutralización incorrecta de etiquetas HTML relacionadas con secuencias de comandos en una página web (XSS básico)

CWE-83 Neutralización incorrecta de la secuencia de comandos en los atributos de una página web

CWE-87 Neutralización incorrecta de la sintaxis XSS alternativa

CWE-88 Neutralización incorrecta de delimitadores de argumentos en un comando (‘Inyección de argumentos’)

CWE-89 Neutralización incorrecta de elementos especiales utilizados en un comando SQL (‘inyección SQL’)

CWE-90 Neutralización incorrecta de elementos especiales utilizados en una consulta LDAP (‘Inyección LDAP’)

Inyección XML CWE-91 (también conocida como inyección XPath ciega)

CWE-93 Neutralización incorrecta de secuencias CRLF (‘Inyección CRLF’)

CWE-94 Control inadecuado de generación de código (“Inyección de código”)

CWE-95 Neutralización incorrecta de directivas en código evaluado dinámicamente (‘inyección de evaluación’)

CWE-96 Neutralización incorrecta de directivas en código guardado estáticamente (‘Inyección de código estático’)

CWE-97 Neutralización incorrecta de las inclusiones del lado del servidor (SSI) dentro de una página web

CWE-98 Control inadecuado del nombre de archivo para incluir/requerir declaración en el programa PHP (‘Inclusión de archivo remoto PHP’)

CWE-99 Control inadecuado de identificadores de recursos (‘Inyección de recursos’)

CWE-100 Obsoleto: Era comodín para problemas de validación de entrada

CWE-113 Neutralización incorrecta de secuencias CRLF en encabezados HTTP (‘División de respuesta HTTP’)

CWE-116 Codificación incorrecta o escape de salida

CWE-138 Neutralización incorrecta de elementos especiales

CWE-184 Lista incompleta de entradas no permitidas

CWE-470 Uso de entrada controlada externamente para seleccionar clases o códigos (“Reflexión insegura”)

CWE-471 Modificación de datos supuestamente inmutables (MAID)

Inyección SQL CWE-564: Hibernación

CWE-610 Referencia controlada externamente a un recurso en otra esfera

CWE-643 Neutralización incorrecta de datos dentro de expresiones XPath (‘Inyección XPath’)

CWE-644 Neutralización incorrecta de encabezados HTTP para sintaxis de secuencias de comandos

CWE-652 Neutralización incorrecta de datos dentro de expresiones XQuery (‘Inyección XQuery’)

CWE-917 Neutralización incorrecta de elementos especiales utilizados en una declaración de lenguaje de expresión (“inyección de lenguaje de expresión”)

Más información: OWASP ORG

Relacionado

ForEach de Javascript: Array para bucles

Como una de las estructuras de control básicas en la programación, los bucles son casi una adición diaria al código que escribimos. El bucle forEach clásico es uno de los primeros fragmentos de código que aprendemos a escribir como programadores. Si fueras un desarrollador de Javascript, sabrías que Javascript no es ajeno a la iteración a través de los elementos de una matriz o un mapa ¡SEGUIR LEYENDO!

10 Mejores alternativas de Sci-hub para descargar artículos de investigación gratis

Como sabemos, Sci-hub es un sitio web increíble con millones de artículos de investigación para todos los estudiantes universitarios y académicos. El sitio web de Sci-Hub se encarga de obtener los artículos de investigación y artículos de pago utilizando las credenciales que se filtran. La fuente de credenciales utilizada por este sitio web no está clara. Sin embargo, se supone que muchas de ellas son donadas, ¡SEGUIR LEYENDO!

10 Características Sorprendentes de Windows que Deberías Conocer en 2024

Aunque haya sido usuario de Windows durante décadas, el sistema operativo es tan amplio y complejo que siempre existen características útiles, pero menos conocidas, que podrían sorprenderte. En este sentido, he identificado diez funciones poco conocidas de Windows que pueden potenciar su eficiencia, comodidad e incluso su experiencia de uso lúdico en su PC.

¡REBAJADO!
Microsoft Surface Go 2 - Portátil 2 en 1 de 10.5 pulgadas Full HD, Wifi, Intel...
  • Procesador Dual-Core Intel Pentium Gold 4425Y (2...
  • Memoria RAM de 8 GB LPDDR3
  • Disco SSD de 128 GB
Todas estas características deberían ser compatibles tanto con Windows 10 ¡SEGUIR LEYENDO!

10 Criptomonedas con Potencial de Crecimiento de Futuro

El rumor en torno a las criptomonedas no se desvanece por mucho que existan grandes pesimistas alrededor de los malos rumores. Entonces, si consideras invertir en el mundo de las criptomonedas, deberías estar atento a las criptomonedas que se espera que tengan un buen desempeño para el resto de 2021. En los últimos tiempos, los tokens DeFi están recibiendo toda la atención y es más que ¡SEGUIR LEYENDO!

10 Empresas de robótica más importantes del mundo

Los cambios de paradigma revolucionarios debido a los desarrollos de la robótica en todo el mundo están generando nuevos puntos de vista en muchos sectores, entre ellos en los de la industria y la tecnología. Con la ayuda de la Inteligencia Artificial, la tecnología produce resultados innovadores cada segundo y el campo de la robótica define y reconfigura su uso a cada instante. Cada día que ¡SEGUIR LEYENDO!

10 Frameworks que los Desarrolladores de Software deberían Aprender 2024

Bienvenidos desarrolladores web y de software, estamos en los inicios de 2023 y es posible que muchos se esten planteado sus objetivos para lo largo del año. Con anterioridad ya he compartidos las rutas de aprendizaje para un desarrollador front-end, un desarrollador full-stack o un desarrollador back-end entre otros muchos contenidos más. En este artículo, me gustaría compartir algunos de los mejores frameworks y bibliotecas para ¡SEGUIR LEYENDO!

10 Repositorio de GitHub que todo Desarrollador Web debería conocer

GitHub es el lugar que debes buscar cuando intentas mejorar como desarrollador, toda la información que necesitas está disponible en algún repositorio que alguien ya se ha molestado en indexar. Sin embargo, la parte complicado es encontrar el repositorio más adecuado. Es fácil sentirse perdido en todos los repositorios disponibles dentro de GitHub. Para ayudarte, he elaborado una lista de 10 repositorios de GitHub que pueden ¡SEGUIR LEYENDO!

Deja un comentario