Resumen
Durante una auditoría de seguridad sobre una aplicación web corporativa, se identificó una vulnerabilidad de SQL Injection en una cabecera HTTP no estándar. El valor de esta cabecera se insertaba directamente en una consulta a la base de datos sin ningún tipo de parametrización.
La inyección permitía ejecutar stacked queries y el usuario de la base de datos tenía privilegios de administrador, lo que habilitaba la ejecución de procedimientos almacenados del sistema.
Detalles técnicos
Vector de inyección
La aplicación web registraba el valor de ciertas cabeceras HTTP directamente en base de datos sin sanitización:
GET /[REDACTED]/errors.aspx HTTP/2
Host: [REDACTED]
Cookie: [REDACTED]
X-Forwarded-For: [PAYLOAD]
User-Agent: Mozilla/5.0 ...
Confirmación de inyección (Time-based)
Se confirmó la vulnerabilidad utilizando payloads de tipo time-based que provocaban un delay cuando la condición 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 verificó que el usuario de la conexión a base de datos tenía privilegios de administrador:
[+] El usuario de la aplicación tiene privilegios de administrador de BD
[+] Stacked queries soportadas
[+] Múltiples bases de datos accesibles en el servidor
Ejecución de comandos
Al tener privilegios de administrador, se detectó que los procedimientos almacenados de ejecución de comandos del sistema estaban habilitados o podían habilitarse:
X-Forwarded-For: [PREFIX]'); EXEC [stored_procedure] 'echo test';--
[!] Delay en la respuesta → Procedimiento de ejecución de comandos activo
Impacto
- Ejecución remota de comandos en el servidor de base de datos
- Acceso completo a todas las bases de datos del servidor
- Exfiltración de datos sensibles de la organización
- Movimiento lateral potencial dentro de la red interna
- Compromiso total del servidor y potencialmente del dominio
Remediación
- 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 aplicación no debe tener privilegios de administrador de BD.
- Deshabilitar procedimientos de ejecución de comandos si no son estrictamente necesarios.
- Sanitizar cabeceras HTTP — Validar y sanitizar cualquier valor de cabecera antes de procesarlo o almacenarlo.
- Revisar configuración del WAF — Asegurar que las reglas cubren inyecciónes en cabeceras no estándar.