Resumen
Durante una auditoria de seguridad sobre una aplicacion web corporativa, se identifico una vulnerabilidad de SQL Injection en una cabecera HTTP no estandar. El valor de esta cabecera se insertaba directamente en una consulta a la base de datos sin ningun tipo de parametrizacion.
La inyeccion permitia ejecutar stacked queries y el usuario de la base de datos tenia privilegios de administrador, lo que habilitaba la ejecucion de procedimientos almacenados del sistema.
Detalles tecnicos
Vector de inyeccion
La aplicacion web registraba el valor de ciertas cabeceras HTTP directamente en base de datos sin sanitizacion:
GET /[REDACTED]/errors.aspx HTTP/2
Host: [REDACTED]
Cookie: [REDACTED]
X-Forwarded-For: [PAYLOAD]
User-Agent: Mozilla/5.0 ...
Confirmacion de inyeccion (Time-based)
Se confirmo la vulnerabilidad utilizando payloads de tipo time-based que provocaban un delay cuando la condicion evaluada era verdadera:
X-Forwarded-For: [PREFIX]'); IF ([CONDITION]) WAITFOR DELAY '0:0:5'--
[+] Delay de 5 segundos detectado → Condicion TRUE
Privilegios elevados confirmados
Se verifico que el usuario de la conexion a base de datos tenia privilegios de administrador:
[+] El usuario de la aplicacion tiene privilegios de administrador de BD
[+] Stacked queries soportadas
[+] Multiples bases de datos accesibles en el servidor
Ejecucion de comandos
Al tener privilegios de administrador, se detecto que los procedimientos almacenados de ejecucion de comandos del sistema estaban habilitados o podian habilitarse:
X-Forwarded-For: [PREFIX]'); EXEC [stored_procedure] 'echo test';--
[!] Delay en la respuesta → Procedimiento de ejecucion de comandos activo
Impacto
- Ejecucion remota de comandos en el servidor de base de datos
- Acceso completo a todas las bases de datos del servidor
- Exfiltracion de datos sensibles de la organizacion
- Movimiento lateral potencial dentro de la red interna
- Compromiso total del servidor y potencialmente del dominio
Remediacion
- Parametrizar todas las consultas SQL — Nunca concatenar valores de cabeceras HTTP directamente en consultas. Usar prepared statements.
- Principio de minimo privilegio — El usuario de la aplicacion no debe tener privilegios de administrador de BD.
- Deshabilitar procedimientos de ejecucion de comandos si no son estrictamente necesarios.
- Sanitizar cabeceras HTTP — Validar y sanitizar cualquier valor de cabecera antes de procesarlo o almacenarlo.
- Revisar configuracion del WAF — Asegurar que las reglas cubren inyecciones en cabeceras no estandar.