Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cve-2026-69243-poc-aiohttp-smuggling — aiohttp CWE-444 अनुरोध तस्करी को अस्वीकृत WebSocket अपग्रेड के माध्यम से पुनः उत्पन्न करता है, Python/Rust पेलोड और Docker लैब के साथ जो प्रॉक्सी एक्सेस-नियंत्रण बाईपास प्रदर्शित करती है। | Kitploit
उपकरण/GitHubGitHub/jvbotelho/cve-2026-69243-poc-aiohttp-smuggling
पेलोड जनरेशनभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षाफज़िंग
GitHubjvbotelho/cve-2026-69243-poc-aiohttp-smuggling

cve-2026-69243-poc-aiohttp-smuggling

aiohttp CWE-444 अनुरोध तस्करी को अस्वीकृत WebSocket अपग्रेड के माध्यम से पुनः उत्पन्न करता है, Python/Rust पेलोड और Docker लैब के साथ जो प्रॉक्सी एक्सेस-नियंत्रण बाईपास प्रदर्शित करती है।

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें
रिपॉजिटरी देखेंवेबसाइट
116 दिन पहलेअभी तक समीक्षित नहीं

CVE-2026-69243 — aiohttp अनुरोध स्मगलिंग (CWE-444)

aiohttp < 3.14.2 में अस्वीकृत WebSocket अपग्रेड के माध्यम से अनुरोध स्मगलिंग। जब कोई रिवर्स प्रॉक्सी Connection: Upgrade + Upgrade: websocket हेडर फॉरवर्ड करता है, तो कमजोर aiohttp पार्सर अनुरोध बॉडी को छोड़ देता है और अंतिम बाइट्स को पाइपलाइन अनुरोध के रूप में व्याख्या करता है — एज एक्सेस नियंत्रणों को बायपास करते हुए।

aiohttp 3.14.2 में ठीक किया गया (कमिट 6ae358f)।

लेखक: João Victor Botelho (JV Botelho) — https://glitchedcat.com

60-सेकंड रन

पायथन संस्करण को कॉपी-पेस्ट करें (शून्य निर्भरताएँ, केवल stdlib):

root@kitploit:~
curl -O https://raw.githubusercontent.com/JVBotelho/cve-2026-69243-poc-aiohttp-smuggling/main/poc.py
python3 poc.py <proxy-host> <proxy-port> <backend-host>

या रस्ट संस्करण बनाएँ (शून्य निर्भरताएँ, केवल std):

root@kitploit:~
git clone https://github.com/JVBotelho/cve-2026-69243-poc-aiohttp-smuggling
cd cve-2026-69243-poc-aiohttp-smuggling/poc
cargo build --release
./target/release/cve-2026-69243-poc <proxy-host> <proxy-port> <backend-host>

प्रीबिल्ट बाइनरी को रिलीज़ वर्कफ़्लो के माध्यम से Releases पर प्रकाशित किया जाएगा।

दोनों बाइट-समान पेलोड उत्पन्न करते हैं (CI पैरिटी परीक्षण द्वारा सुनिश्चित)। यदि लैब चल रही है:

root@kitploit:~
python3 poc.py nginx-upgrade 80 backend-vuln

अपेक्षित आउटपुट: 1 HTTP प्रतिक्रिया (WebSocket upgrade rejected)। फिर सत्यापित करें:

root@kitploit:~
# Backend processed 2 requests (/ws + smuggled /admin):
docker logs backend-vuln | grep -c '"path".*"/admin"'

# Nginx only logged 1 request (the /ws):
docker exec nginx-upgrade cat /logs/nginx-upgrade.access.log | grep -c '/admin'

बैकएंड गिनती > 0 और Nginx गिनती = 0 का मतलब है CWE-444 विभाजन पुष्ट। यह PoC एक एकल TCP खंड भेजता है — बॉडी ही स्मगल किया गया अनुरोध है; Nginx इसे बॉडी मानता है, aiohttp इसे दूसरा अनुरोध मानता है।

यह क्या सिद्ध करता है

  • पार्सर भ्रम: aiohttp 3.14.1 _http_parser.pyx बॉडी खपत होने से पहले अपग्रेड डिटेक्शन पर 2 (स्किप बॉडी) लौटाता है (लाइन ~863)। बॉडी बाइट्स _message_tail में रहती हैं और web_protocol.py के finish_response में पार्सर को वापस फीड की जाती हैं (लाइन ~771)।
  • CWE-444 विभाजन: फ्रंटएंड बॉडी के साथ 1 अनुरोध देखता है; बैकएंड 2 पाइपलाइन अनुरोध देखता है। लॉग में अनुरोध-गिनती का बेमेल।
  • एक्सेस-नियंत्रण बायपास: जब Nginx में location /admin { deny all; } होता है, स्मगल किया गया /admin फिर भी बैकएंड तक पहुँचता है क्योंकि Nginx रूटिंग निर्णय केवल बाहरी अनुरोध पर किए जाते हैं।
  • कोई हैंडलर-स्तरीय समाधान नहीं: 3.14.1 में अपग्रेड अनुरोधों पर await request.read() 0 बाइट्स लौटाता है — बॉडी हैंडलर परत के नीचे रोक दी जाती है। पैच करें, या प्रॉक्सी पर उन रूट्स के लिए अपग्रेड हेडर हटाएँ जिन्हें प्रोटोकॉल स्विच नहीं करना चाहिए।

पूर्ण लैब

root@kitploit:~
git clone https://github.com/JVBotelho/cve-2026-69243-poc-aiohttp-smuggling
cd cve-2026-69243-poc-aiohttp-smuggling
docker compose up -d

# Run the PoC:
docker compose run --rm --entrypoint /app/poc attacker nginx-upgrade 80 backend-vuln

सेवाएँ:

चरण 1-3 के पूर्ण निष्कर्ष findings/ में।

सीमाएँ (ईमानदार)

  • प्रॉक्सी को अपग्रेड हेडर फॉरवर्ड करना चाहिए। जो Nginx कॉन्फ़िग बैकएंड को Connection: close भेजते हैं या Connection/Upgrade हेडर हटाते हैं, वे असुरक्षित नहीं हैं। विभाजन को उजागर करने वाला कॉन्फ़िग Nginx के स्वयं के प्रॉक्सिंग दस्तावेज़ से लिया गया विहित WebSocket map स्निपेट है।
  • स्मगल की गई प्रतिक्रिया प्रॉक्सी द्वारा अवशोषित कर ली जाती है। प्रदर्शित Nginx श्रृंखला में, हमलावर को केवल बाहरी /ws प्रतिक्रिया प्राप्त होती है। स्मगलिंग का सबूत बैकएंड लॉग में है, हमलावर की प्रतिक्रिया में नहीं — इस टोपोलॉजी में एक ब्लाइंड, एकतरफा प्रिमिटिव है। अन्य प्रॉक्सी टोपोलॉजी का परीक्षण नहीं किया गया।
  • Chunked फ्रेमिंग प्रभाव में CL-विशिष्ट है। सीधे aiohttp के विरुद्ध, Transfer-Encoding: chunked स्मगल नहीं करता है — कच्ची चंक-आकार लाइन (जैसे 3e) पार्सर को अमान्य मेथड के रूप में लगती है और कनेक्शन समाप्त हो जाता है। Nginx के माध्यम से यह काम करता है, लेकिन सामान्यीकरण के द्वारा: Nginx बॉडी को de-chunk करता है और एक संश्लेषित Content-Length फॉरवर्ड करता है, इसलिए बैकएंड उसी CL पथ के माध्यम से शोषित होता है। --chunked फ़्लैग प्रॉक्सी पथ को प्रदर्शित करता है।
  • एक ऐसे एंडपॉइंट की आवश्यकता है जो WebSocket अपग्रेड को अस्वीकार करता है। हैंडलर को एक गैर-WebSocketResponse लौटाना चाहिए। अधिकांश ऐप जो किसी रूट पर WebSocket का उपयोग नहीं करते, वे डिफ़ॉल्ट रूप से अस्वीकार कर देंगे (फ्रेमवर्क 404 लौटाता है या अगले हैंडलर पर चला जाता है)।

फ़ाइलें

root@kitploit:~
poc/                       # Rust cargo project
├── Cargo.toml
├── src/main.rs            # CLI binary
├── src/lib.rs             # Library + unit tests
├── tests/parity.rs        # Cross-language payload parity test
└── fuzz/                  # cargo-fuzz targets
poc.py                     # Python PoC (copy-paste from blog)
attacker/ backend/ frontend/   # Docker lab services
docker-compose.yml         # 7-service lab
findings/                  # Research notes (Phase 1-3)
.github/workflows/
├── ci.yml                 # Build, test, clippy, parity, integration, fuzz
└── release.yml            # Cross-compile + GitHub Release

पहचान

पूर्ण विश्लेषण के लिए findings/fase3-deteccao.md देखें। सारांश, उन चेतावनियों के साथ जो प्रोडक्शन में मायने रखती हैं:

  1. अनुरोध-गिनती बेमेल (बैकएंड > फ्रंटएंड) समान कनेक्शन पर। ध्यान दें कि बैकएंड प्रॉक्सी का IP लॉग करता है, क्लाइंट का नहीं — सहसंबंध के लिए X-Forwarded-For/Proxy Protocol को सामान्यीकृत करना आवश्यक है, या एक अपस्ट्रीम कनेक्शन ID + प्रति-कनेक्शन अनुरोध अनुक्रम लॉग करना आवश्यक है। केवल क्लाइंट IP + समय विंडो कमजोर है (NAT, keep-alive, समवर्तीता)।
  2. फ्रंटएंड मिलान के बिना बैकएंड अनुरोध: बैकएंड लॉग में एक प्रतिबंधित पथ जिसकी फ्रंटएंड एक्सेस लॉग में कोई संगत प्रविष्टि नहीं है। आंतरिक सबनेट को फ़िल्टर करें (हेल्थ चेक जो प्रॉक्सी को बायपास करते हैं, गलत-सकारात्मक)।
  3. अपग्रेड अस्वीकृति + समान क्लाइंट से अलग पथ ~100 ms में। मध्यम विश्वास — वैध पाइपलाइनिंग समान अंतराल उत्पन्न करती है; लैब लॉगर रिमोट पोर्ट/कनेक्शन ID रिकॉर्ड नहीं करता, इसलिए "कोई नया TCP हैंडशेक नहीं" वह बात नहीं है जो यह डेटा प्रदर्शित करता है।
  4. रोकी गई-बॉडी मिडलवेयर (content_length बनाम request.read() से बाइट्स): 3.14.1 पर सक्रिय होता है, 3.14.2 पर शांत। पहचान करता है, शमन नहीं करता। इसे सीमित करें (अपग्रेड-उम्मीदवार रूट्स, छोटी बॉडी, गैर-101 स्थितियाँ) — नैव संस्करण हर बॉडी को मेमोरी में बफर करता है।
  5. WebSocket एंडपॉइंट्स पर हेडर बेसलाइन से ऊपर एज reqlen — अकेले कम विश्वास (cookies/JWT/tracing हेडर शोरगुल वाले होते हैं), लेकिन जब क्लाइंट कोई Content-Length नहीं भेजता (chunked इनग्रेस) तो यह एकमात्र एज सिग्नल है।
टूल डाउनलोड करें
ContainerPurpose
backend-vulnaiohttp 3.14.1 (असुरक्षित), READ_BODY=false
backend-vuln-readaiohttp 3.14.1, READ_BODY=true (सिद्ध करता है कि हैंडलर मदद नहीं कर सकता)
backend-patchedaiohttp 3.14.2 (ठीक किया गया)
nginx-upgradeअपग्रेड हेडर फॉरवर्ड करता है (deny all on /admin)
nginx-defaultकोई अपग्रेड फॉरवर्डिंग नहीं (बग को निष्क्रिय कर देता है)
nginx-stripConnection "" स्ट्रिप (बग को निष्क्रिय कर देता है)
attackerरस्ट बाइनरीज़: reproduce, fase2, poc