Dan Levy

सुरक्षा नोट्स: रेगेक्स

क्या रेगेक्स कमजोर हो सकता है?

RegEx Denial-of-Service: ReDOS

एक ऐसी असामान्य, लेकिन पहचानने में कठिन सुरक्षा कमजोरी जो मैंने देखी है, वह रेगुलर एक्सप्रेशन से जुड़ी है।
या तो खराब लिखा गया या खराब लागू किया गया।

बड़े या विशेष रूप से तैयार किए गए उपयोगकर्ता इनपुट से मेमोरी/CPU समाप्त हो सकता है।

यह एक डिनायल‑ऑफ़‑सर्विस कमजोरी है, सिर्फ प्रदर्शन की गंध नहीं। यदि दुर्भावनापूर्ण इनपुट CPU को इतना देर तक रोक सकता है कि वास्तविक उपयोगकर्ता भूखे रह जाएँ, तो इसे आपके सुरक्षा थ्रेट मॉडल में शामिल किया जाना चाहिए।

Warning Signs

  1. नेस्टेड क्वांटिफ़ायर, दोहराए गए समूह, या ओवरलैपिंग अल्टरनेशन
  2. बैकट्रैकिंग‑हेवी इंजन बिना टाइम‑आउट या इनपुट‑लेंथ सीमा के
  3. एक्सप्रेशन को अनचेक्ड यूज़र इनपुट के साथ उपयोग किया गया है
  4. रेगेक्स वैलिडेशन हॉट रिक्वेस्ट पाथ पर चल रहा है

Mitigation / Resolution

  1. RegEx कठिन है।
    1. उदाहरण के लिए, यहाँ वह तरीका है जो बहुत समझदार लोग [OWASP IP वैलिडेशन को संभालने की सलाह देते हैं][owasp] में देते हैं: ^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
    2. यह (पुराने स्कूल) ट्वीट से भी लंबा है, केवल 4‑बाइट IP पता के लिए!!!
  2. रेगेक्स मूल्यांकन से पहले इनपुट की लंबाई को सीमित करें।
  3. टाइम‑आउट, स्थैतिक विश्लेषण, या जहाँ प्लेटफ़ॉर्म समर्थन करता है, गैर‑बैकट्रैकिंग इंजन जोड़ें।
  4. यह लगभग हर भाषा और प्लेटफ़ॉर्म को प्रभावित करता है – .NET/Node/Python/PERL/Java।

Reference