Saltar a contenido

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