Blog

Coders Conquer Security: Serie de aprendizaje y uso compartido - Inyección de código

May 16, 2019
Jaap Karan Singh

Los ataques de inyección de código se encuentran entre los más comunes y peligrosos a los que se enfrentan muchos sitios web y aplicaciones. Varían enormemente tanto en sofisticación como en el peligro que representan, pero casi cualquier sitio o aplicación que acepte datos de usuario puede ser vulnerable. De hecho, este tipo de ataque es uno al que casi todo profesional de la ciberseguridad tendrá que enfrentarse en algún momento de su carrera, y probablemente en más de una ocasión.

Un ataque de inyección de código puede ocurrir siempre que una aplicación o sitio web acepte datos de los usuarios. Esto puede ser tan sencillo como ofrecer una función de búsqueda o pedir al usuario que introduzca su información de identificación. El ataque se produce cuando un usuario malintencionado introduce código en el campo abierto en lugar de texto normal. Su objetivo es que el servidor confunda la entrada con código válido y ejecute las funciones que el atacante desee.

Aunque los ataques de inyección de código son extremadamente comunes, también lo son las defensas disponibles para detenerlos. En este episodio, aprenderemos:

  • Cómo funcionan
  • Por qué son tan peligrosos
  • Cómo implementar defensas para detenerlos.

¿Cómo utilizan los atacantes la inyección de código?

Aunque los detalles específicos de los ataques de inyección de código cambian según el lenguaje de programación utilizado, cualquier aplicación o sitio web puede ser vulnerable siempre que permita al usuario introducir datos. Se han desencadenado ataques de inyección de código en SQL, HTML, XML, CSS y cualquier otro lenguaje de programación común.

En primer lugar, el atacante debe localizar código vulnerable dentro de una aplicación, normalmente en un punto donde se permite a los usuarios introducir sus propios datos. Por ejemplo, este código toma la función eval() de PHP y se la pasa a un usuario para que la modifique, sin ningún tipo de validación de la cadena resultante.

$myvar = "varname";
$x = $_GET[arg];
eval("\$myvar = \$x;");

Un atacante ingenioso podría añadir fácilmente su propia cadena a la función eval, incluso ejecutando comandos del sistema si así lo desea.

/index.php?arg=1; system(id)

Es importante señalar que, aunque los ataques de inyección de código pueden implicar el envío de comandos del sistema, no se limitan solo a eso. De hecho, con los ataques de inyección de código, los hackers solo están limitados por la funcionalidad del propio lenguaje. En nuestro ejemplo, un atacante podría programar el sistema objetivo para hacer casi cualquier cosa permitida por el framework de PHP.

¿Por qué son tan peligrosos los ataques de inyección de código?

Los ataques de inyección de código son potencialmente muy peligrosos dependiendo de la habilidad del atacante. Pueden hacer cualquier cosa que el lenguaje de programación permita, lo que los sitúa al mismo nivel que los programadores de la aplicación. Un atacante podría prácticamente escribir su propia aplicación y hacer que se ejecute dentro del entorno objetivo.

Incluso los atacantes menos hábiles pueden ser peligrosos. En lugar de escribir su propia aplicación o cadenas de código, pueden simplemente ordenar al sistema objetivo que acepte e instale malware preprogramado. Esto podría llevar a la desfiguración del sitio, ataques de ransomware o incluso convertirse en la base de una campaña de phishing dirigida a los usuarios del sitio.

La mayoría de las veces, los ataques de inyección de código se utilizan para robar listas de usuarios y contraseñas, o para obtener información valiosa sobre un sistema con el fin de comprometerlo aún más. Pero cuidado: un programador experto puede hacer casi cualquier cosa con un ataque de inyección de código, por lo que es fundamental que cada posible instancia sea descubierta y eliminada de su entorno.

¡No confíe en nadie! (O al menos, no en los usuarios)

Al eliminar las vulnerabilidades de inyección de código, el primer lugar donde buscar es cualquier sitio que solicite o permita la entrada de datos por parte del usuario. No se debe confiar en nada introducido por un usuario bajo ninguna circunstancia. Si permite la entrada de datos sin filtrarlos o examinarlos, básicamente está invitando a los atacantes a intentar comprometer su sistema o incluso su red.

Aunque no siempre es posible, la mejor forma de frustrar los ataques de inyección de código es evitar que las funciones ejecuten o interpreten directamente la entrada del usuario. Quizás se pueda ofrecer a los usuarios una selección de opciones estáticas en lugar de darles libertad total para introducir sus propias consultas, programando la aplicación para que solo acepte esas opciones limitadas como válidas. Puede que no siempre sea adecuado, pero utilizarlo siempre que sea posible puede eliminar las inyecciones de código antes de que comiencen.

En las áreas donde los usuarios necesitan introducir su propia información, se deben establecer controles estrictos sobre esos datos. Asumir que todo es un posible ataque es un buen punto de partida. Aplicar políticas de privilegios mínimos, como el acceso de solo lectura para el usuario, tanto en el cliente como en el servidor, puede evitar que la mayor parte del código se ejecute.

La otra buena defensa es implementar filtros y saneamiento en toda la aplicación para todo lo que introduzca cualquier usuario. Los desarrolladores conocen los ataques de inyección de código desde hace años y existen bibliotecas de filtros probados para cada marco de trabajo y lenguaje. Al aplicar esos filtros, asegúrese de hacerlo no solo en las áreas de entrada de usuario obvias o contra parámetros comunes como los comandos Get y Post, sino también contra las cookies y las cabeceras HTTP.

Aplicación de una corrección para la inyección de código

Eliminar áreas de entrada de usuario innecesarias de su entorno, aplicar principios de privilegios mínimos y utilizar las herramientas de filtrado y saneamiento más recientes para inspeccionar y detectar posibles ataques puede cerrar la puerta a esta peligrosa vulnerabilidad. Adoptar la mentalidad de no confiar nunca en la entrada del usuario también le será de gran utilidad en el futuro. Haga todo esto y podrá ir un paso por delante de este peligroso tipo de ataque.

Para seguir leyendo, puede consultar el artículo de OWASP sobre la inyección de código. También puede poner a prueba sus nuevos conocimientos defensivos con la demo gratuita de la plataforma Secure Code Warrior, que entrena a los equipos de ciberseguridad para convertirse en los mejores ciberguerreros. Para saber más sobre cómo derrotar esta vulnerabilidad y una galería de otras amenazas, visite el blog de Secure Code Warrior.

Enfréntese a la inyección de código ahora mismo. Acepte el reto en nuestra plataforma de formación gamificada: [Empezar aquí]

Eslogan

Controle el desarrollo impulsado por IA antes de su lanzamiento

Mida el riesgo asistido por IA, aplique políticas de codificación segura en el momento de la confirmación y acelere la entrega segura en todo su ciclo de vida de desarrollo de software (SDLC).

Reservar una demostración
Biblioteca de recursos

Explorar más blogs

Acceda a contenido especializado sobre programación segura, gobernanza de IA y gestión de riesgos de software.

ver todo
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Una cultura de seguridad: cómo Sage creó su programa de defensores

Descubre cómo Sage reforzó su seguridad con un enfoque flexible y centrado en las relaciones, logrando formar a más de 200 expertos en seguridad y alcanzar una reducción de riesgos cuantificable.

Más información
Icono de ventana de navegador con las letras KVK en negrita y dos líneas horizontales azules debajo sobre un fondo azul degradado.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Kamer van Koophandel: Seguridad a escala impulsada por los desarrolladores

La Cámara de Comercio (Kamer van Koophandel) comparte cómo integró la programación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de puntuación de confianza y una cultura de responsabilidad compartida en seguridad.

Más información
Logotipo de Insurance Australia Group con texto y un icono en azul y gris dentro del diseño de una ventana de navegador web.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cómo un «Juego de Códigos» guía a IAG Group hacia un futuro de programación más seguro

IAG Group es la entidad detrás de muchas de las principales compañías de seguros en la región de Asia-Pacífico, que suscribe pólizas para millones de clientes por un valor aproximado de 11.400 millones de dólares australianos en primas anuales.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Mes de la Concienciación sobre Ciberseguridad 2026: Comprender la seguridad de la IA es fundamental para la defensa empresarial

Hemos llegado a un punto en el que la mayoría de las principales empresas de IA han pedido públicamente una ralentización global en el desarrollo de la IA para que las medidas de seguridad puedan ponerse al día, pero la verdad es que ya se han materializado graves problemas de seguridad. Esto deja a innumerables líderes de seguridad y equipos ejecutivos en una situación urgente, a medida que los costes monetarios y de riesgo de la implementación de la IA siguen acumulándose.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Habilitador 8: Branding de su programa

Un programa de codificación segura necesita algo más que un buen contenido para tener éxito. El Habilitador 8 muestra cómo el branding transforma la participación en una experiencia codiciada basada en el estatus.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cada empleado está ahora en la primera línea de la ciberseguridad de la IA

El panorama tecnológico empresarial está cambiando a una velocidad que pocos previeron hasta que fue demasiado tarde. Hemos cruzado oficialmente el umbral del código escrito por humanos y la asistencia básica de copilotos hacia la era del Ciclo de Vida de Desarrollo Agéntico (ADLC). Si bien los agentes de IA autónomos prometen una eficiencia sin precedentes en múltiples funciones, también traen consigo una clase completamente nueva de riesgos regulatorios y de seguridad.

Más información

Proteja el desarrollo basado en IA antes de su lanzamiento

Identifique riesgos de desarrollo, aplique políticas y prevenga vulnerabilidades en todo el ciclo de vida de su software.

Reservar una demostración
No se encontraron elementos.