network हुक तय करता है कि सर्वर की ओर से किया जाने वाला कोई फ़ेच डेस्टिनेशन SSRF से सुरक्षित है या नहीं (ऐसी रिक्वेस्ट जिसे इंटरनल सर्विस, क्लाउड मेटाडेटा या प्राइवेट होस्ट की ओर मोड़ा जा सकता है)। यही network विशेषज्ञता के पीछे का नियतात्मक इंजन है, और आप इसे खुद भी चला सकते हैं।
चलाएँ
हर डेस्टिनेशन --url के साथ दें। हुक हर डेस्टिनेशन के लिए एक शब्द प्रिंट करता है, जिसका मतलब नीचे की टेबल में देखें।
- एक डेस्टिनेशन
- कई डेस्टिनेशन
npx lagune read network --url 'http://example.com/'
# => safe
npx lagune read network --url 'http://0x7f000001/'
# => private-target
पूरी अनुमति सूची या ब्लॉक सूची को एक ही कॉल में स्कोर देने के लिए --url दोहराएँ। फ़ैसले उसी क्रम में, हर लाइन पर एक, मिलते हैं।
npx lagune read network \
--url 'http://example.com/' \
--url 'http://[::1]/' \
--url 'http://allowed.com@evil.example/'
# => safe
# => private-target
# => parser-divergent
यह होस्ट को ठीक उसी तरह पढ़ता है जैसे नेटवर्क पढ़ता है, इसलिए किसी इंटरनल पते के एनकोड किए गए रूप इसकी पकड़ से नहीं बचते: हेक्स, ऑक्टल, बिना डॉट वाला डेसिमल, छोटा रूप, 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 आता है, क्योंकि यह कहने के लिए कि वह अंदर की ओर पहुँचता है, उसे रिज़ॉल्व करना पड़ेगा: ऐसे नामों की रखवाली अनुमति सूची करती है, और यह चेकर उसी सूची को जाँचता है।
यह वही जाँच है जो network विशेषज्ञता यह साबित करने के लिए चलाती है कि डेस्टिनेशन फ़िल्टर कारगर है।
अक्सर पूछे जाने वाले सवाल
network हुक चलाएँ। यह फ़ेच डेस्टिनेशन को स्कोर देता है और safe, private-target, parser-divergent या invalid url लौटाता है। सिर्फ़ safe का मतलब अनुमति है।
ऐसा URL जिसे अलग-अलग पार्सर अलग-अलग तरह से पढ़ते हैं, जो SSRF से बचने का एक जाना-माना तरीका है। network हुक इसे अनुमति देने के बजाय पकड़ लेता है।
