¿Qué son las Vulnerabilidades de Inyección y porqué son tan peligrosas?




En términos de informática, una vulnerabilidad se trata de una debilidad o fallo en un sistema de información que pone en riesgo la seguridad de la información pudiendo permitir que un atacante pueda comprometer su integridad, disponibilidad o confidencialidad, por lo cual, es indispensable detectarlas y eliminarlas lo antes posible

Sus orígenes pueden ser distintos, por ejemplo: errores de configuración, fallos de diseño, o falta de procedimientos adecuados.

Si bien una vulnerabilidad dada en un sistema puede no haberse identificado aún, pueden existir. Con suficiente tiempo, esfuerzo y las herramientas adecuadas, se puede eludir cualquier control de seguridad.

Las vulnerabilidades de inyección son uno de los defectos de software explotables más antiguos, que desafortunadamente continúan formando parte de los 10 principales riesgos de ciberseguridad.

Haciendo una búsqueda simple en cve.mitre.org/com para el término <<inyección>> se puede encontrar con más de 11,000 vulnerabilidades relacionadas con la inyección en software comercial y de código abierto desde el año 2000, un número que continúa creciendo diariamente. 


Entonces, ¿qué son exactamente las vulnerabilidades de inyección?


Las vulnerabilidades de inyección hacen que los sistemas informáticos procesen potencialmente datos maliciosos que los atacantes introducen. Para ponerlo en términos más simples, los atacantes inyectan código en una pieza vulnerable de software y cambian la forma en que se pretende ejecutar el software. Como resultado, los ataques de inyección pueden ser algo desastrosos, ya que normalmente implican robo de datos, pérdida de datos, corrupción de datos, denegación de servicio, etc.

De acuerdo con OWASP Top 10 2017, “Las fallas de inyección, como la inyección de SQL, NoSQL, OS y LDAP, ocurren cuando los datos no confiables se envían a un intérprete como parte de un comando o consulta. Los datos hostiles del atacante pueden engañar al intérprete para que ejecute comandos no deseados o acceda a los datos sin la autorización adecuada".


Hay dos tendencias principales en el campo de las inyecciones de código:


  • Por un lado, algunos tipos de inyecciones se vuelven cada vez menos frecuentes, debido a la educación de seguridad adecuada y a un conjunto de tecnologías modernas que los abordan.

  • Por otro lado, los nuevos marcos y tecnologías abren una puerta para nuevos tipos de inyecciones. Por ejemplo, la inyección NoSQL es un vector de ataque relativamente nuevo para sistemas que usan NoSQL.


Es común ver a ingenieros de software junior escribiendo código vulnerable. El concepto de "inyección" puede no ser muy intuitivo para ellos, y ofrecen un código vulnerable porque es la forma más fácil / rápida de implementar un componente específico.


¿Qué se recomienda para desarrollar código más seguro?


  • Es muy importante crear conciencia al proporcionar pautas de seguridad para los nuevos ingenieros de software en la empresa y tener capacitación, charlas y debates continuos sobre seguridad.
  • Automatización previa a la producción: use herramientas automáticas como SAST e IAST para encontrar vulnerabilidades de inyecciones en su código antes de que quede expuesto a todo el mundo.
  • Use ORM : es más difícil escribir código vulnerable cuando usa ORM. Proporcionan mecanismos de seguridad por diseño.



Claramente, los defectos de inyección deben abordarse durante el proceso de desarrollo de software al detectarlos primero y luego mitigarlos solucionando las vulnerabilidades. Si las aplicaciones con fallas de inyección llegan a Internet, es solo cuestión de tiempo antes de que los atacantes las encuentren y finalmente sean explotadas.