हुक

network हुक: SSRF के लिए URL को स्कोर दें

कमांड लाइन से सीधे एक या कई फ़ेच डेस्टिनेशन को SSRF के लिहाज़ से स्कोर दें।

network हुक तय करता है कि सर्वर की ओर से किया जाने वाला कोई फ़ेच डेस्टिनेशन SSRF से सुरक्षित है या नहीं (ऐसी रिक्वेस्ट जिसे इंटरनल सर्विस, क्लाउड मेटाडेटा या प्राइवेट होस्ट की ओर मोड़ा जा सकता है)। यही network विशेषज्ञता के पीछे का नियतात्मक इंजन है, और आप इसे खुद भी चला सकते हैं।

चलाएँ​

हर डेस्टिनेशन --url के साथ दें। हुक हर डेस्टिनेशन के लिए एक शब्द प्रिंट करता है, जिसका मतलब नीचे की टेबल में देखें।

npx lagune read network --url 'http://example.com/'
# => safe

npx lagune read network --url 'http://0x7f000001/'
# => private-target

यह होस्ट को ठीक उसी तरह पढ़ता है जैसे नेटवर्क पढ़ता है, इसलिए किसी इंटरनल पते के एनकोड किए गए रूप इसकी पकड़ से नहीं बचते: हेक्स, ऑक्टल, बिना डॉट वाला डेसिमल, छोटा रूप, IPv6 और IPv4-mapped, सभी का फ़ैसला private-target आता है। और जहाँ कोई ढीला वैलिडेटर और असली फ़ेच करने वाला कोड अलग-अलग होस्ट पढ़ें, वहाँ फ़ैसला parser-divergent आता है।

फ़ैसला कैसे पढ़ें​

फ़ैसलामतलब
safeडेस्टिनेशन किसी पब्लिक होस्ट से जुड़ता है, और कोई ढीला वैलिडेटर भी वही होस्ट पढ़ेगा।
private-targetहोस्ट किसी प्राइवेट, लूपबैक, लिंक-लोकल, अनिर्दिष्ट या क्लाउड मेटाडेटा पते पर पहुँचता है।
parser-divergentकोई ढीला टेक्स्ट वैलिडेटर उस होस्ट से अलग असली होस्ट पढ़ेगा, जिससे फ़ेच करने वाला कोड जुड़ता है।
invalid urlयह स्ट्रिंग URL के रूप में पार्स नहीं होती, इसलिए फ़ेच करने के लिए कुछ है ही नहीं।

सिर्फ़ safe का मतलब अनुमति है। private-target, parser-divergent और invalid url, तीनों को ब्लॉक मानें।

CLI विकल्प​

विकल्पमानविवरण
--urlएक URL या होस्टएक डेस्टिनेशन जाँचें। कई जाँचने के लिए इसे दोहराएँ, हर लाइन पर एक फ़ैसला मिलेगा।

कम से कम एक --url ज़रूरी है। डेस्टिनेशन कभी अकेले पोज़िशनल आर्ग्युमेंट के रूप में नहीं दिया जाता, इसलिए उसे किसी फ़्लैग के रूप में गलत नहीं समझा जा सकता।

फ़्लैग का मान क्यों

हर डेस्टिनेशन फ़्लैग के मान के रूप में दिया जाता है, उसे कमांड के अंदर कभी जोड़ा नहीं जाता। कोट या बैकटिक वाला मान भी बेअसर रहता है और शेल में इंजेक्ट नहीं हो सकता। इसे हमेशा सिंगल कोट में रखें, ताकि आपका शेल पहले ही उसे एक्सपैंड न कर दे।

यह किन चीज़ों को कवर नहीं करता

हुक पूरी तरह ऑफ़लाइन जाँच करता है और कभी DNS रिज़ॉल्व नहीं करता, इसलिए रनटाइम की दो कमियाँ इसके दायरे से बाहर हैं: DNS रीबाइंडिंग (ऐसा नाम जो जाँच के समय पब्लिक पते पर और फ़ेच के समय इंटरनल पते पर पहुँचता है) और रीडायरेक्ट चेन (पहला पड़ाव जाँच में पास हो जाता है, फिर अंदर की ओर रीडायरेक्ट करता है)। इन्हें बंद करने के लिए नाम को एक ही बार रिज़ॉल्व करें और जाँचे गए पते से ही जुड़ें, और रीडायरेक्ट को मना कर दें। आरक्षित लूपबैक नामों (localhost और .localhost परिवार) को यह बिना लुकअप के इंटरनल मान लेता है, लेकिन बाकी हर DNS नाम का फ़ैसला safe आता है, क्योंकि यह कहने के लिए कि वह अंदर की ओर पहुँचता है, उसे रिज़ॉल्व करना पड़ेगा: ऐसे नामों की रखवाली अनुमति सूची करती है, और यह चेकर उसी सूची को जाँचता है।

tip

यह वही जाँच है जो network विशेषज्ञता यह साबित करने के लिए चलाती है कि डेस्टिनेशन फ़िल्टर कारगर है।

अक्सर पूछे जाने वाले सवाल

network हुक चलाएँ। यह फ़ेच डेस्टिनेशन को स्कोर देता है और safe, private-target, parser-divergent या invalid url लौटाता है। सिर्फ़ safe का मतलब अनुमति है।

ऐसा URL जिसे अलग-अलग पार्सर अलग-अलग तरह से पढ़ते हैं, जो SSRF से बचने का एक जाना-माना तरीका है। network हुक इसे अनुमति देने के बजाय पकड़ लेता है।