
CVE-2026-8932 का प्रूफ-ऑफ-कॉन्सेप्ट, जो libcurl कनेक्शन पुनःउपयोग में अपूर्ण mTLS कॉन्फ़िगरेशन मिलान दोष है, जिसमें एक स्थानीय लैब सर्वर और C PoC शामिल है।
CVE-2026-8932 का प्रूफ-ऑफ-कॉन्सेप्ट पुनरुत्पादन, जो libcurl कनेक्शन पुनःउपयोग में एक अपूर्ण mTLS कॉन्फ़िगरेशन मिलान समस्या है।
CVE-2026-8932 libcurl के कनेक्शन पुनःउपयोग तर्क को प्रभावित करता है जब अनुरोधों के बीच mutual TLS (mTLS) कॉन्फ़िगरेशन बदलता है।
संवेदनशील स्थितियों के अंतर्गत, libcurl एक मौजूदा TLS कनेक्शन का पुनःउपयोग कर सकता है, भले ही एक mTLS-संबंधित कॉन्फ़िगरेशन विकल्प बदल गया हो और उसे उस कनेक्शन के पुनःउपयोग को रोकना चाहिए था।
यह PoC दो अनुरोधों के बीच private-key पासवर्ड बदलकर, जबकि समान client certificate और private key का उपयोग करते हुए, इस समस्या को प्रदर्शित करता है।
पहला अनुरोध सही पासवर्ड का उपयोग करता है:
correct-password
दूसरा अनुरोध जानबूझकर एक अमान्य पासवर्ड का उपयोग करता है:
WRONG-PASSWORD
यदि libcurl मौजूदा TLS कनेक्शन का गलत तरीके से पुनः उपयोग करता है, तो दूसरे अनुरोध के लिए किसी अन्य TLS हैंडशेक की आवश्यकता नहीं होती है। परिणामस्वरूप, नया TLS कनेक्शन स्थापित करने के लिए अमान्य निजी-कुंजी पासवर्ड की कभी आवश्यकता नहीं पड़ती है और अनुरोध सफल हो जाता है।
इसलिए PoC CVE-2026-8932 से जुड़ी कनेक्शन-पुनःउपयोग स्थिति को प्रदर्शित करता है।
| Property | Value |
|---|---|
| CVE | CVE-2026-8932 |
| Component | libcurl |
| Vulnerability Type | Incomplete mTLS configuration matching |
| CWE | CWE-305 — Authentication Bypass by Primary Weakness |
| Affected Area | TLS connection reuse |
| Protocol | HTTPS / mTLS |
| Client | libcurl API |
| curl CLI | Not affected |
| PoC Scope | Local laboratory environment |
यह भेद्यता एक लॉजिक/कॉन्फ़िगरेशन मिलान संबंधी समस्या है, न कि बफ़र ओवरफ़्लो या use-after-free जैसी पारंपरिक मेमोरी-सुरक्षा भेद्यता।
libcurl कनेक्शन जानकारी बनाए रखता है और जब कोई अनुवर्ती अनुरोध कनेक्शन के कॉन्फ़िगरेशन के साथ संगत माना जाता है, तो वह मौजूदा कनेक्शन का पुनः उपयोग कर सकता है।
इसलिए TLS कनेक्शनों के लिए, पुनः उपयोग से पहले कनेक्शन कॉन्फ़िगरेशन की सावधानीपूर्वक तुलना की जानी चाहिए।
भेद्य कार्यान्वयन में कनेक्शन मिलान लॉजिक में सभी प्रासंगिक mTLS कॉन्फ़िगरेशन फ़ील्ड शामिल नहीं थे।
प्रभावित सेटिंग्स में शामिल हैं:
cert_type
key
key_type
key_passwd
key_blob
इस PoC द्वारा उपयोग की जाने वाली महत्वपूर्ण सेटिंग है:
key_passwd
The PoC सही पासवर्ड और एक एन्क्रिप्टेड क्लाइंट प्राइवेट की का उपयोग करके एक TLS कनेक्शन स्थापित करता है:
correct-password
फिर यह उसी प्रमाणपत्र और कुंजी का उपयोग करके एक और अनुरोध करता है लेकिन पासवर्ड को इसमें बदल देता है:
WRONG-PASSWORD
एक कमज़ोर कनेक्शन-मिलान कार्यान्वयन अभी भी मौजूदा कनेक्शन को पुनः प्रयोग योग्य मान सकता है।
परीक्षण में दो HTTP अनुरोध शामिल हैं।
पहला अनुरोध TLS कनेक्शन स्थापित करता है:
URL:
https://server.test:8443/A
Client certificate:
client.crt
Private key:
client.key
Key password:
correct-password
TLS कनेक्शन स्थायी रहता है क्योंकि सर्वर HTTP keep-alive का समर्थन करता है।
दूसरा अनुरोध उसी प्रमाणपत्र और निजी कुंजी का उपयोग करता है लेकिन कुंजी पासवर्ड बदल देता है:
URL:
https://server.test:8443/B
Client certificate:
client.crt
Private key:
client.key
Key password:
WRONG-PASSWORD
यदि libcurl एक नया TLS कनेक्शन बनाता है, तो गलत पासवर्ड के साथ एन्क्रिप्टेड निजी कुंजी लोड करना विफल होना चाहिए।
हालाँकि, यदि libcurl गलत तरीके से मौजूदा कनेक्शन का पुनः उपयोग करता है, तो किसी नए TLS हैंडशेक की आवश्यकता नहीं होती।
इसलिए अमान्य पासवर्ड HTTP अनुरोध को सफल होने से नहीं रोकता।
प्रयोगशाला सेटअप में निम्नलिखित शामिल हैं:
localhost
|
v
+---------------------+
| Python mTLS Server |
| 127.0.0.1:8443 |
+----------+----------+
|
| HTTPS / TLS 1.3
|
+--------+--------+
| |
/A /B
\ /
\ /
v v
Same TLS Connection
|
v
libcurl
PoC (C)
महत्वपूर्ण अवलोकन यह है कि /A और /B को एक ही TLS कनेक्शन पर आना चाहिए।
CVE-2026-8932-PoC/
├── README.md
├── LICENSE
├── .gitignore
│
├── certs/
│ └── .gitkeep
│
├── poc/
│ └── poc.c
│
├── server/
│ └── server.py
│
└── docs/
├── CVE-2026-8932-POC.jpg
├── CVE-2026-8932-server-POC.jpg
├── poc-output.txt
└── server-output.txt
certs/ निर्देशिका को रिपॉज़िटरी में जानबूझकर खाली रखा गया है। प्रमाणपत्र और निजी कुंजियाँ स्थानीय रूप से उत्पन्न की जानी चाहिए।
PoC का परीक्षण निम्नलिखित वातावरण में किया गया था:
OS:
Debian GNU/Linux 13 (trixie)
Architecture:
x86_64
libcurl:
8.14.1
OpenSSL:
3.5.7
GCC:
14.2.0
पुनरुत्पादन के लिए उपयोग किया गया भेद्य libcurl इंस्टॉलेशन यह था:
libcurl/8.14.1
स्थापित संस्करण सत्यापित करें:
curl --version
और:
pkg-config --modversion libcurl
mkdir -p ~/cve-2026-8932-lab/{certs,poc,server,docs}
cd ~/cve-2026-8932-lab
cd ~/cve-2026-8932-lab/certs
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes \
-key ca.key \
-sha256 \
-days 3650 \
-subj "/CN=CVE-2026-8932-CA" \
-out ca.crt
सर्वर निजी कुंजी जनरेट करें:
openssl genrsa -out server.key 2048
CSR जनरेट करें:
openssl req -new \
-key server.key \
-subj "/CN=server.test" \
-out server.csr
प्रमाणपत्र एक्सटेंशन बनाएँ:
printf "subjectAltName=DNS:server.test\nextendedKeyUsage=serverAuth\n" \
> server.ext
प्रमाणपत्र को परीक्षण CA का उपयोग करके हस्ताक्षरित करें:
openssl x509 -req \
-in server.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-out server.crt \
-days 3650 \
-sha256 \
-extfile server.ext
क्लाइंट निजी कुंजी जनरेट करें:
openssl genrsa -out client.key.tmp 2048
CSR जनरेट करें:
openssl req -new \
-key client.key.tmp \
-subj "/CN=Client-A" \
-out client.csr
निजी कुंजी को एन्क्रिप्टेड PKCS#8 प्रारूप में बदलें:
openssl pkcs8 \
-topk8 \
-in client.key.tmp \
-out client.key \
-v2 aes-256-cbc \
-passout pass:correct-password
परिणामी निजी कुंजी इसके साथ एन्क्रिप्ट की गई है:
correct-password
क्लाइंट प्रमाणपत्र एक्सटेंशन बनाएँ:
printf "extendedKeyUsage=clientAuth\n" \
> client.ext
क्लाइंट प्रमाणपत्र पर हस्ताक्षर करें:
openssl x509 -req \
-in client.csr \
-CA ca.crt \
-CAkey ca.key \
-CAcreateserial \
-out client.crt \
-days 3650 \
-sha256 \
-extfile client.ext
इस बिंदु पर आवश्यक फ़ाइलें मौजूद होनी चाहिए:
certs/
├── ca.crt
├── ca.key
├── client.crt
├── client.key
├── server.crt
└── server.key
सर्वर निर्देशिका में जाएँ:
cd ~/cve-2026-8932-lab/server
सर्वर प्रारंभ करें:
python3 server.py
सर्वर इस पर सुनता है:
0.0.0.0:8443
क्लाइंट प्रमाणपत्र प्रमाणीकरण आवश्यक है।
सर्वर HTTP/1.1 कनेक्शनों को भी सक्रिय रखता है ताकि libcurl TLS कनेक्शन का पुनः उपयोग कर सके।