Server Side Inclusion
Inclusión del Lado del Servidor (SSI)
Descripción
Las vulnerabilidades de inyección de Server-Side Include (SSI) ocurren cuando una aplicación incorpora datos controlables por el usuario en una respuesta que posteriormente se analiza para directivas de Server-Side Include. Si la entrada del usuario proporcionada no se valida estrictamente, los actores maliciosos pueden manipular o insertar directivas para ejecutar código malicioso.
La explotación de las vulnerabilidades de inyección SSI a menudo permite la inyección de contenido arbitrario, como JavaScript, en la respuesta de la aplicación, presentando riesgos similares al cross-site scripting (XSS). Dependiendo de la configuración del servidor, la vulnerabilidad también puede permitir acceder a archivos protegidos o ejecutar comandos arbitrarios del sistema en el servidor.
La inyección SSI puede tener múltiples puntos de inyección como formularios POST, cabeceras HTTP, cookies...
- Ejecución de código:
GET / HTTP/1.1
Host: localhost
Referer: <!--#exec cmd="/bin/ls"-->
- Inclusión de archivos:
POST /contact HTTP/1.1
Host: localhost
body=<!--#include virtual="/proc/version"-->
Recomendación
Para mitigar el riesgo de vulnerabilidades de inyección Server-Side Include, considere las siguientes recomendaciones:
-
Deshabilitar SSI: si no es necesario, deshabilitar SSI es la recomendación a prueba de balas para mitigar el riesgo de inyección SSI; restringir SSI a un número limitado de páginas también ayudaría a mitigar algunos de los riesgos.
-
Validación y Desinfección de Entradas: Desinfecte y/o codifique la entrada proporcionada por el usuario (notablemente caracteres especiales HTML como <>) antes de pasarla a una página con permisos de ejecución SSI.
-
Usar suEXEC: Utilice suEXEC para restringir los permisos del usuario que ejecuta las directivas SSI.
<!--#if expr="$user_input =~ /^[a-zA-Z0-9_\-]+$/i" -->
<!--#include virtual="/web/$user_input" -->
<!--#else -->
Invalid input!
<!--#endif -->
Enlaces
Estándares
- GDPR:
- ART_5
- ART_32
- PCI_STANDARDS:
- REQ_6_2
- REQ_6_3
- REQ_11_3
- SOC2_CONTROLS:
- CC_2_1
- CC_3_4
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255