- Substack एडिटर में कुछ विशेष system path लिखने पर network error होता है
- web application firewall (WAF) ऐसे path को path traversal attack और command injection attack रोकने के लिए block करता है
- security और usability के बीच संतुलन एक अहम मुद्दे के रूप में उभरता है
- technical writers के लिए बेहतर समाधान की ज़रूरत है
- alternative path का उपयोग करके समस्या हल की जा सकती है
जब /etc/h*sts Substack एडिटर को बाधित करता है: web content filtering का रोमांच
रहस्यमय network error
- DNS resolution पर एक technical post लिखते समय unexpected error हुआ
/etc/h*stspath दर्ज करते ही network error हुआ और autosave विफल हो गया- Substack का status page दिखाता है कि सब सामान्य रूप से चल रहा है
जांच की शुरुआत
- किसी खास file path को लिखने पर error होता है, जबकि path को बदलने पर सामान्य रूप से काम करता है
/etc/h*stsजैसे path error पैदा करते हैं, जबकि बदले हुए path में कोई समस्या नहीं होती
अंदर क्या हो रहा है?
- browser developer tools में 403 Forbidden response दिखा
- Cloudflare इसमें शामिल है
web application security filter को समझना
WAF संक्षेप में
- web application firewall (WAF) वेबसाइट के security guard की तरह काम करता है
- यह संदिग्ध request को block करता है
path traversal attack: सावधानी की वजह
- path traversal attack संवेदनशील system file तक पहुंचने की कोशिश होती है
/etc/h*stsजैसे path attack target बन सकते हैं
command injection: एक और security समस्या
- command injection attack system command चलवाने की कोशिश करता है
- system path का ज़िक्र होने पर filter उसे block कर सकता है
रहस्य और गहरा होता है: ऐतिहासिक उदाहरण
- दूसरे Substack post में ऐसे ही path के इस्तेमाल का उदाहरण मिला
- संभव है कि filtering behavior किसी खास समय पर बदल गया हो
security बनाम usability: नाज़ुक संतुलन
- Substack का filter सुरक्षा के लिए है, लेकिन technical writers के लिए यह रुकावट बन जाता है
- सुधार की गुंजाइश है: स्पष्ट error message, technical content की पहचान, और documented workaround उपलब्ध कराना
HTTP response पर नज़र
- API स्तर पर 403 Forbidden status code की पुष्टि हुई
technical content platform के लिए बेहतर समाधान
- contextual filtering: code block या technical discussion में system path को पहचानना
- स्पष्ट error message: "network error" की जगह यह बताना कि security filter के कारण block हुआ
- documented workaround: sensitive path पर चर्चा कैसे करें, यह बताना
निष्कर्ष: security और technical writing का संगम
-
Substack एडिटर की यह समस्या security और technical writing की जटिल चुनौतियों को उजागर करती है
-
जो चीज़ security filter को attack pattern लगती है, वह वास्तव में legitimate content भी हो सकती है
-
alternative path का उपयोग करके समस्या का समाधान संभव है
-
पाठकों से अनुरोध है कि यदि उन्होंने दूसरी platforms पर भी ऐसी filtering समस्या देखी हो तो comments में साझा करें
1 टिप्पणियां
Hacker News की राय
CDN पर WAF rules सेट करने वाले लोग अक्सर tech content से जुड़ी sites और services को ठीक से नहीं समझते। यह सिर्फ Cloudflare की समस्या नहीं है, Akamai भी काफ़ी हद तक ऐसा ही है
अगर database पर चर्चा करने वाली किसी site पर basic SQL injection prevention rule चालू कर दिया जाए, तो site टूट जाती है, और file inclusion ruleset
/etc/hosts,/etc/passwdजैसी strings को block कर देता हैsecurity और usability के बीच balance का पहलू भी है। किसी service को कितनी कमज़ोर तरह से implement किया गया है यह पता नहीं होता, इसलिए सभी WAF rules चढ़ा देने से कुछ मायनों में सुरक्षा बढ़ती है। लेकिन जब कोई सुरक्षित तरीके से implement की गई service को technical concepts पर चर्चा करनी हो, तो यही ruleset बेहद परेशान करने वाला हो जाता है
rules को बारीकी से tune करने में बहुत समय लगता है। query parameter में
/etc/hostsहोने से page नहीं खुलने की समस्या ठीक करो, तो अब referrer में/etc/hostsहोने की वजह से XHR resource नहीं खुलता, उसके बाद analytics JS library visit URL को cookie में डालती है और फिर वही टूट जाता है, तो बस rules बंद कर देने का मन करता हैअगर insurer कहे कि “कर्मचारियों से 90 दिन में password change नहीं करवाया तो premium 20% बढ़ा देंगे”, तो NIST ने 10 साल से भी पहले periodic password changes की recommendation वापस ले ली थी और यह बुरी practice है—यह सब सही होने पर भी premium बढ़ ही जाएगा
इसलिए लोग भारी मन से password expiration policy implement करते हैं, और फिर कर्मचारियों की यह शिकायत सुनते हैं कि सिस्टम कितना अक्षम है। log4shell इतना मशहूर हो चुका है कि अब अगर insurer यह माँगें कि server
/etc/hosts,/etc/passwd,jndi:जैसी आम “hacking strings” को reject करे, तो हैरानी नहीं होगीअगर CIO से पूछो कि इससे असल में कौन-सा threat रुकता है, तो सिर्फ खाली नज़र मिलती है
engineer के नज़रिए से देखें तो हर input form कहाँ जाता है, इसे समझने और meaningful तरीके से sanitize करने की मेहनत करने का कोई incentive नहीं बचता। पैसे checkbox भरने और आगे बढ़ने के लिए मिलते हैं, और नए लोग भी यह बात जल्दी सीख जाते हैं। ऐसे संगठन security सुधारने पर नहीं, बल्कि breach के बाद ज़िम्मेदारी से बचने पर ध्यान देते हैं
server तक आने-जाने वाली या servers के बीच भेजी जाने वाली “दूसरी चीज़ों” पर filter लगाना समझ में आ सकता है, लेकिन blog content के रूप में दिखने वाले असली text body को filter करके कोई security benefit मिलता नहीं दिखता। यह काफ़ी हद तक एक साफ़ bug के करीब लगता है
https://en.wikipedia.org/wiki/Scunthorpe_problem
backend को input field के arbitrary byte contents को संभाल पाना चाहिए, और CDN layer पर pre-filtering न होने का मतलब यह नहीं होना चाहिए कि वह SQL injection के प्रति vulnerable है
"/etc/hosts"जस की तस मौजूद है, तो वह काफ़ी साफ़ तौर पर टूटा हुआ लगता हैइससे एक e-commerce platform का किस्सा याद आता है। किसी ने memory leak वाला web shop बना दिया था, और workaround के तौर पर log में
"OutOfMemoryException"string दिखते ही app restart हो जाए, ऐसा सेट कर दिया थाफिर किसी दूसरे developer ने customer search queries को log करना चाहा, और अगर कोई search box में
"OutOfMemoryException"डाल दे तो…"system(...)"string वाला note छोड़ा, और WAF ने उसे PHP injection मानकर IP block कर दियासोच रहा हूँ कि
/etc//hostsया/etc/./hostsको भी block करते हैं या नहीं। इस तरह का whack-a-mole शुरू से ही असफल होने वाला हैयह बनाने वालों को समझना चाहिए कि attacker उनसे ज़्यादा चालाक और ज़िद्दी होगा, और उन्हें सिर्फ proven security practices पर निर्भर रहना चाहिए, जैसे untrusted input को execute न करना
एक बार मैंने यह तक सुना कि SQL database इस्तेमाल न करने वाले application को भी SQL injection attacks रोकने के लिए WAF चाहिए
अगर आप तर्क दो, तो हमेशा “defense in depth” पर lecture सुनना पड़ता है, और अगर कहो कि हर गुरुवार सुबह desk पर एक बार थपकी मारकर अपनी जगह पर तीन चक्कर लगा लेना ज़्यादा असरदार होगा, तो लोग आपको सचमुच पागल समझते हैं। मैंने हर हफ्ते ऐसा किया है और कभी hack नहीं हुआ, तो यह भी defense in depth ही हुआ न। नुकसान तो नहीं है
wildcard resolution ज़्यादा पेचीदा है, लेकिन अगर banned files की list हो तो यह भी पूरी तरह संभव है
https://nodejs.org/api/path.html#pathresolvepaths
संपादन: C का
realpathथोड़ा अलग तरह से काम करता है, इसलिए link बदल दियातकनीकी लेखकों के लिए Substack इस स्थिति को कैसे बेहतर बना सकता है?
बस किसी web application firewall को, जो पत्थर जितना बेवकूफ हो, ऐसे लेख-संपादन endpoint पर मत लगाइए जहाँ किसी भी विषय पर लिखा जा सकता है, यहाँ तक कि ऐसे strings भी जो किसी बेवकूफ WAF को trigger कर दें
यह वैसा ही है जैसे किसी web development forum में XSS filter लगा दिया जाए ताकि सदस्य XSS के बारे में बात ही न कर सकें। उन्हें content को सही तरीके से escape करना सीखना चाहिए
ये बेवकूफ हैं, और बस OWASP के
corerulesetनाम के पढ़ने में मुश्किल कचरे के ढेर का इस्तेमाल करते हैंइस मामले को web security में protection और usability के बीच दिलचस्प तनाव दिखाने वाला कहना मानना मुश्किल है। यह बस एक bug है, और वह भी बेवकूफी भरा bug। यह सिर्फ दिखाता है कि जिन्हें बेहतर पता होना चाहिए, उन्हें पता नहीं है
security और usability के बीच तनाव सचमुच मौजूद है, लेकिन यह वह मामला नहीं है। आमतौर पर यह ऐसा trade-off होता है जहाँ अच्छी security लागू करने से user को असुविधा होती है। जैसे 2-factor authentication, 3 बार fail होने पर lockout, या DoS रोकने के लिए rate limiting—security बढ़ाने पर user experience खराब होता है, और user experience बढ़ाने पर security घटती है
यह दोनों में से कोई नहीं है। यह खराब security भी है और खराब user experience भी। समझ नहीं आता इसमें तनाव कहाँ है
बेशक, PHP sites लिखने वालों ने जल्दी ही यह समझ लिया, तरह-तरह के bypass तरीके इस्तेमाल हुए, और कुल मिलाकर संभवतः यह “sanitization” न होने की तुलना में और भी बुरा साबित हुआ
पहले एक बार यह झेल चुका हूँ, इसलिए “network error” शब्द देखते ही कारण तुरंत समझ आ गया
जब मैं competitive programming team को पढ़ाता था, तो आधी class को solution submit करने पर blank page मिल रहा था। एक घंटे की debugging के बाद इसे कुछ C++ types और keywords तक सीमित किया, जो code में आने पर 403 देते थे, और उन सबका JavaScript में भी मतलब था
बैंक में काम करते समय भी एक API था जिसमें Python files submit करनी होती थीं, लेकिन ज्यादातर Python files पर 403 आता था और छोटी files पास हो जाती थीं। कई घंटे debug करने के बाद इसे एक ऐसे keyword तक सीमित किया जो code में कभी-कभी आता था
कुछ महीनों बाद नए cloud environment में भी यही हुआ और फिर कई घंटे बर्बाद हुए। दूसरी बार के बाद एक सहकर्मी ने deployment script में यह जोड़ दिया कि 403 मिलने पर
"HAHAHA YOU'VE BEEN WAFFED"प्रिंट हो, और यह error उम्मीद से कहीं ज़्यादा बार दिखा, इसलिए आज तक उसका आभारी हूँहमारे application में भी ऐसा ही कुछ हुआ। अंदर की red team ऐसा data पोस्ट कर रही थी जिसमें XSS और दूसरी injection attacks की कोशिशें थीं
हमला खुद सफल नहीं हुआ, लेकिन सिर्फ उन entries के मौजूद होने की वजह से company firewall ने ऐसे network requests रोक दिए जिनमें वह payload शामिल था, और internal admin page load ही नहीं हुआ। आखिरकार असफल XSS हमला एक प्रभावी DoS attack बन गया
पुरानी चीज़ फिर से नई बन गई है। पहले इसे Scunthorpe problem कहा जाता था
https://en.m.wikipedia.org/wiki/Scunthorpe_problem
cockpitशब्द हमेशाc***pitमें बदल जाता था, यह याद है। काफी मज़ेदार थाअगर आप biology, finance, या geology के बारे में लिख रहे हों तो? बस आपकी किस्मत खराब है
समझदार और नेकनीयत लोग भी लिखें, तब भी बेवकूफ filtering काफी बुरी हो सकती है
कल रात OpenRouter में भी इसी तरह की समस्या मिली। OpenRouter एक शानदार “switchboard” सेवा है जो एक ही endpoint से कई LLMs इस्तेमाल करने देती है, और कल रात मैंने देखना शुरू किया कि raw HTML को अलग-अलग तरीकों से process करने में कौन सा model अच्छा है
लेकिन OpenRouter API को Cloudflare से protect किया गया है, इसलिए अगर POST request body में कुछ खास raw HTML और JavaScript snippets हों, तो हर request नहीं लेकिन बहुत-सी requests block हो जाती हैं। वही prompt अगर सीधे OpenAI या Anthropic को भेजें तो कोई समस्या नहीं होती
मुफ्त models के लिए abuse prevention कड़ा रखना समझ में आता है, लेकिन यह paid commercial models पर बिल होने वाली requests में हो रहा था, इसलिए और खटकता है
मैंने पहले यह समस्या झेली है और यह बेहद frustrating थी।
"Network error"की वजह से मैं कई महीनों से लिखे जा रहे लेख को update नहीं कर पाया, क्योंकि edits से लेख लंबा होता जा रहा था, इसलिए कारण समझ नहीं पायाsupport team से संपर्क करना भी AI chatbot की वजह से मुश्किल था, और जब किसी इंसान तक पहुँचा भी, तो उनका “technical support” इसे उचित समय में देखने का इच्छुक नहीं लगा
आखिरकार Twitter पर किसी ने इस संभावना का सुझाव दिया कि कोई magic string उस बेवकूफ security logic को trigger कर रही है, तभी समस्या पकड़ में आई और मैं आखिरकार लेख को edit कर सका