
Semgrep नियम जो हेडर-ट्रस्ट प्रमाणीकरण बाईपास पैटर्न (CVE-2025-29927 वर्ग) को फ्लैग करते हैं। bk-security.github.io का साथी।
एक छोटा Semgrep नियम पैक जो उस कोड को फ़्लैग करता है जो प्रमाणीकरण, प्राधिकरण, या विश्वास के निर्णय उन HTTP अनुरोध हेडर के आधार पर लेता है जिन्हें एक हमलावर नियंत्रित कर सकता है।
भेद्यता वर्ग का प्रामाणिक उदाहरण CVE-2025-29927 है: Next.js ने x-middleware-subrequest हेडर पर भरोसा करके यह तय किया कि मिडलवेयर चला या नहीं, और कोई भी इनबाउंड अनुरोध जो एक निर्मित मान प्रदान करता है, मिडलवेयर को पूरी तरह से छोड़ सकता है। यही पैटर्न विभिन्न फ्रेमवर्क और इकोसिस्टम में दोहराया जाता है।
यह पैक दो भाषा परिवारों और बग के तीन उप-वर्गों के लिए नियम प्रदान करता है। यह एक कोड-समीक्षा सहायता के रूप में अभिप्रेत है, न कि पूरी तरह से ट्यून किए गए CI गेट के रूप में। नियम सटीकता की तुलना में रिकॉल को प्राथमिकता देते हैं और सबसे अच्छा इंटरैक्टिव रूप से चलाए जाते हैं, जिसमें एक मानव प्रत्येक निष्कर्ष पर निर्णय लेता है।
भेद्यता वर्ग और इस पैक के पीछे डिज़ाइन विकल्पों के बारे में अधिक विस्तृत लेख के लिए, देखें bk-security.github.io।
| नियम | भाषा | गंभीरता | क्या पकड़ता है |
|---|---|---|---|
nodejs-header-flag-auth-bypass | JS / TS | चेतावनी | हेडर के पढ़ने को फ़्लैग करता है जिसका नाम आंतरिक-प्रोटोकॉल या प्रमाणीकरण-बाईपास उपयोग (x-internal, x-bypass-auth, x-middleware-subrequest, x-admin-override, x-impersonate, आदि) का सुझाव देता है |
nodejs-header-as-identity | JS / TS | चेतावनी | पारंपरिक रूप से उपयोगकर्ता पहचान (x-forwarded-user, x-authenticated-user, x-remote-user, आदि) ले जाने के लिए उपयोग किए जाने वाले हेडर के पढ़ने को फ़्लैग करता है |
nodejs-forwarded-for-trust | JS / TS | सूचना | x-forwarded-for, x-real-ip, और समान स्रोत-IP हेडर के पढ़ने को फ़्लैग करता है जो सुरक्षा निर्णयों के लिए आमतौर पर भरोसेमंद होते हैं |
python-header-flag-auth-bypass | Python | चेतावनी | Node.js संस्करण के समान, जिसमें Django-शैली request.META["HTTP_X_*"] एक्सेस शामिल है |
python-header-as-identity | Python | चेतावनी | Node.js संस्करण के समान, Python-शैली |
python-forwarded-for-trust | Python | सूचना | Node.js संस्करण के समान, Python-शैली |
Semgrep स्थापित करें:
pip install semgrep
लक्ष्य के विरुद्ध पैक चलाएँ:
semgrep --config /path/to/auth-header-trust-rules/rules /path/to/target
या एक एकल नियम चलाएँ:
semgrep --config /path/to/auth-header-trust-rules/rules/nodejs/header-flag-auth-bypass.yaml /path/to/target
बंडल किए गए फिक्स्चर के विरुद्ध नियमों को मान्य करें:
semgrep --test --config rules/ tests/
अपेक्षित आउटपुट:
6/6: ✓ All tests passed
नियम हेडर नामों की एक क्यूरेटेड सूची पर मेल खाते हैं जो भरोसा करने पर खतरनाक माने जाते हैं। वे सामान्य मामलों को पकड़ लेंगे। वे नहीं पकड़ेंगे:
getInternalFlag(req) है और जो x-some-novel-name पढ़ता है, नियमों से बच जाएगा।x-internal-*, x-trust-*, और x-bypass-* जैसे पैटर्न शामिल करके रिकॉल की दिशा में गलती करते हैं, लेकिन नए नाम फिसल जाएंगे।किसी विशिष्ट कोडबेस के लिए पैक का विस्तार करते समय, सबसे उच्च-मूल्य वाले परिवर्धन आमतौर पर फ्रेमवर्क-विशिष्ट सहायक-फ़ंक्शन पैटर्न होते हैं। यदि किसी कोडबेस में isInternalRequest(req) सहायक है, तो इसे पकड़ने वाला नियम YAML की एक पंक्ति है।
rules/<lang>/<name>.yaml के अंतर्गत नियम बनाएँ।tests/<lang>/<name>.<ext> के अंतर्गत एक परीक्षण फिक्स्चर बनाएँ जिसमें सकारात्मक उदाहरण # ruleid: <rule-id> से एनोटेट हों और नकारात्मक उदाहरण # ok: <rule-id> से एनोटेट हों।semgrep --test --config rules/ tests/ चलाएँ। नया नियम और फिक्स्चर स्वचालित रूप से उठा लिए जाएंगे; परिवर्तन सबमिट करने से पहले परीक्षण पास होने चाहिए।MIT.
ब्रूस कांग। सहयोगी ब्लॉग पोस्ट का स्रोत यहाँ स्थित है bk-security.github.io।