Inyección de Código
¿Qué es Inyección de Código?
Inyección de CódigoClase de vulnerabilidades en la que datos proporcionados por el atacante se interpretan y ejecutan como código de la aplicación, permitiendo ejecución arbitraria.
La inyección de código (CWE-94) es la familia amplia de fallos en los que entrada no confiable se incorpora a algo que la aplicación trata más tarde como código, provocando que el runtime lo ejecute. A diferencia de la inyección de comandos (que llega al shell del SO), la inyección de código se ejecuta dentro del propio intérprete de la aplicación. Casos concretos incluyen inyecciones basadas en eval en JavaScript y Python, inyección de plantillas del servidor, inyección de lenguajes de expresión (OGNL, SpEL), deserialización insegura que dispara cadenas de gadgets, y carga dinámica de clases desde datos del usuario. Una explotación exitosa suele dar ejecución remota con la identidad de la aplicación, paso previo a comprometer todo el host o clúster.
Tres casos emblemáticos muestran el impacto. Apache Struts CVE-2017-5638 permitía ejecutar expresiones OGNL en una cabecera Content-Type malformada; una instancia sin parchear causó la brecha de Equifax de 2017, que expuso ~147 millones de registros. Log4Shell (CVE-2021-44228), CVSS 10.0, convertía cualquier cadena registrada con una búsqueda JNDI en una carga remota de clases Java. Spring4Shell (CVE-2022-22965) abusaba del data-binding de Spring para manipular el ClassLoader y colocar un web shell.
flowchart TD
A[Entrada no confiable] --> B{¿Llega a un sink que evalúa código?}
B -->|eval / plantilla / OGNL / deserialize| C[El intérprete ejecuta el código del atacante]
B -->|Validada / parametrizada| D[Tratada como dato inerte]
C --> E[RCE con la identidad de la app]
E --> F[Compromiso del host / clúster]
D --> G[Seguro]Defensas: nunca construir código, plantillas o expresiones a partir de la entrada; usar APIs parametrizadas y con listas de permitidos; deshabilitar o aislar la evaluación dinámica y la deserialización; parchear los frameworks con rapidez; y ejecutar con mínimos privilegios para que un RCE tenga el menor alcance posible.
● Ejemplos
- 01
eval(request.body.expr) ejecuta JavaScript controlado por el atacante en un servicio Node.
- 02
Aplicación Java que llama a ScriptEngine.eval sobre un script proporcionado por el usuario.
● Preguntas frecuentes
¿Qué es Inyección de Código?
Clase de vulnerabilidades en la que datos proporcionados por el atacante se interpretan y ejecutan como código de la aplicación, permitiendo ejecución arbitraria. Pertenece a la categoría de Ataques y amenazas en ciberseguridad.
¿Qué significa Inyección de Código?
Clase de vulnerabilidades en la que datos proporcionados por el atacante se interpretan y ejecutan como código de la aplicación, permitiendo ejecución arbitraria.
¿Cómo defenderse de Inyección de Código?
Las defensas contra Inyección de Código combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Inyección de Código?
Nombres alternativos comunes: Ejecución remota de código, Ejecución de código arbitrario.