
# musl libc 0.8.0-1.2.6 में एल्गोरिदमिक कॉम्प्लेक्सिटी DoS का प्रूफ ऑफ कॉन्सेप्ट और एंड-टू-एंड परीक्षण, जिसे CVE-2026-6042 सौंपा गया है
iconv में एल्गोरिथमिक जटिलता DoSmusl के iconv GB18030 4-बाइट डिकोडर में गैप-स्किपिंग लूप एक छोटे से तैयार किए गए इनपुट को असमान रूप से अधिक CPU समय उपभोग करने की अनुमति देते हैं। एक 40 KB प्रतिकूल पेलोड एक CPU कोर को 40 मिनट से अधिक समय तक पिन कर सकता है।
एडवाइज़री में कही गई बातों के विपरीत, इस एक्सप्लॉइट का हमला वेक्टर स्पष्ट रूप से नेटवर्क है, स्थानीय नहीं। यह इस तथ्य से उपजा है कि VulDB वास्तव में उन कमजोरियों को नहीं समझता जिन्हें वे असाइन करते हैं।
CVSS 3.1 वेक्टर: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - 7.5 (उच्च)
| फ़ील्ड | विवरण |
|---|
| प्रभावित सॉफ़्टवेयर | musl libc (iconv कार्यान्वयन) |
| प्रभावित एन्कोडिंग | GB18030 (4-बाइट अनुक्रम) |
| प्रकार | एल्गोरिथमिक जटिलता / सेवा से इनकार |
| पुष्टि किए गए संस्करण | musl 1.2.5 (Alpine 3.21), musl 1.2.6 (स्रोत से निर्मित) |
| संभावित रूप से प्रभावित | GB18030 और UHC/CP949 समर्थन शुरू होने के बाद से सभी musl संस्करण |
| हमला सतह | कोई भी musl-आधारित सेवा जो इन एन्कोडिंग के साथ अविश्वसनीय इनपुट पर iconv() कॉल करती है |
musl में GB18030 4-बाइट डिकोडर (src/locale/iconv.c, लगभग पंक्तियाँ 434-442) एक 4-बाइट इनपुट अनुक्रम को एक रैखिक सूचकांक में परिवर्तित करता है और फिर उस सूचकांक को एक Unicode कोडपॉइंट में मैप करने के लिए एक गैप-स्किपिंग लूप चलाता है। प्रत्येक डिकोड किए गए वर्ण के लिए, आंतरिक लूप पूरी gb18030[126][190] तालिका (23,940 प्रविष्टियाँ) को पुनरावृत्त करता है ताकि गिना जा सके कि एक स्लाइडिंग रेंज के भीतर कितने 2-बाइट-मैप किए गए कोडपॉइंट आते हैं।
बाइट अनुक्रम 82 35 8F 33 एक रैखिक सूचकांक 19,171 उत्पन्न करता है, जो घने CJK एकीकृत आइडियोग्राफ़ रेंज (U+4E00-U+9FBD, ~20,902 प्रविष्टियाँ) के ठीक नीचे आता है। गैप-स्किपिंग लूप को फिर पूरे घने ब्लॉक को एक-एक करके पीछा करना पड़ता है, ~20,905 बाहरी पुनरावृत्तियाँ चलानी पड़ती हैं, प्रत्येक सभी 23,940 तालिका प्रविष्टियों को स्कैन करती है। यह प्रति इनपुट वर्ण लगभग 500 मिलियन तुलनाएँ हैं।
क्योंकि लागत इनपुट में प्रतिकूल वर्णों की संख्या के साथ रैखिक रूप से बढ़ती है, और प्रत्येक वर्ण स्वतंत्र रूप से पूर्ण आंतरिक लूप को ट्रिगर करता है, कुल कार्य O(n * k^2) है जहाँ n इनपुट वर्णों की संख्या है और k लुकअप तालिका का आकार है।
कोई भी musl-आधारित सिस्टम (Alpine Linux, Void Linux, postmarketOS, एम्बेडेड/कंटेनर इमेज, आदि) जो उपयोगकर्ता-आपूर्ति किए गए इनपुट से iconv() के माध्यम से GB18030 या EUC-KR ट्रांसकोड करने वाली सेवा चलाता है, सेवा से इनकार के लिए असुरक्षित है।
एकल कोर पर अनुमानित समय (Alpine 3.21 / musl 1.2.5 पर मापा गया):
| इनपुट | समय |
|---|---|
| 1 प्रतिकूल वर्ण (4 बाइट) | ~0.26 सेकंड |
| 100 वर्ण (400 बाइट) | ~26 सेकंड |
| 1,000 वर्ण (4 KB) | ~4.3 मिनट |
| 10,000 वर्ण (40 KB) | ~43 मिनट |
तुलना के लिए, 100 हानिरहित GB18030 वर्ण माइक्रोसेकंड में डिकोड होते हैं।
| फ़ाइल | विवरण |
|---|---|
poc_gb18030_dos.c | स्टैंडअलोन PoC: iconv() के माध्यम से हानिरहित बनाम प्रतिकूल GB18030 डिकोडिंग का समय मापता है |
server.c | न्यूनतम HTTP सर्वर जो POST बॉडी को iconv() के माध्यम से ट्रांसकोड करता है, एक वास्तविक हमला सतह का अनुकरण करता है |
Dockerfile | Alpine Linux कंटेनर इमेज जो असुरक्षित सर्वर को बनाता और चलाता है |
test.sh | एंड-टू-एंड परीक्षण स्क्रिप्ट: सर्वर को हानिरहित और प्रतिकूल पेलोड भेजता है और प्रतिक्रिया समय की तुलना करता है |
iconv समय)किसी भी musl-आधारित सिस्टम पर बनाएं और चलाएं:
# Alpine Linux पर
apk add gcc musl-dev
gcc -O2 -o poc_gb18030_dos poc_gb18030_dos.c
./poc_gb18030_dos
या Docker के माध्यम से:
docker run --rm -v "$(pwd)":/work -w /work alpine:latest \
sh -c "apk add gcc musl-dev && gcc -O2 -o poc_gb18030_dos poc_gb18030_dos.c && ./poc_gb18030_dos"
अपेक्षित आउटपुट: हानिरहित वर्ण माइक्रोसेकंड में डिकोड होते हैं; एक एकल प्रतिकूल वर्ण (82 35 8F 33) ~0.26 सेकंड लेता है।
असुरक्षित सर्वर बनाएं और शुरू करें:
docker build -t cve-2026-6042 .
docker run --rm -p 8080:8080 cve-2026-6042
दूसरे टर्मिनल में, परीक्षण हार्नेस चलाएं:
./test.sh
या मैन्युअल रूप से पेलोड भेजें:
# हानिरहित: 100 वर्ण, तुरंत वापस आना चाहिए
printf '\x81\x30\x81\x30%.0s' $(seq 1 100) > /tmp/benign.bin
curl -X POST -H "Content-Type: text/plain; charset=gb18030" \
--data-binary @/tmp/benign.bin http://localhost:8080/
# प्रतिकूल: केवल 5 वर्ण, >1 सेकंड लेना चाहिए
printf '\x82\x35\x8F\x33%.0s' $(seq 1 5) > /tmp/adversarial.bin
curl -X POST -H "Content-Type: text/plain; charset=gb18030" \
--data-binary @/tmp/adversarial.bin http://localhost:8080/
X-Transcode-Time प्रतिक्रिया हेडर iconv() के अंदर बिताए गए समय की रिपोर्ट करता है।
नीचे दिया गया स्क्रीनशॉट Docker सर्वर के खिलाफ प्रतिकूल इनपुट की रैखिक स्केलिंग दिखाता है: 20 वर्ण (80 बाइट) ~5.2 सेकंड लेते हैं, 80 वर्ण (320 बाइट) ~20.8 सेकंड लेते हैं, और 160 वर्ण (640 बाइट) ~41.5 सेकंड लेते हैं।

| अनुक्रम | रैखिक सूचकांक | व्यवहार |
|---|---|---|
81 30 81 30 (हानिरहित) | 128 | निम्न कोडपॉइंट; गैप-स्किप लूप जल्दी समाप्त होता है |
82 35 8F 33 (प्रतिकूल) | 19,171 | घने CJK ब्लॉक के ठीक नीचे आता है; ~500M तुलनाएँ ट्रिगर करता है |
82 35 90 30 (प्रतिकूल) | ~19,200 | समान क्षेत्र, समान लागत |
यह रिपॉज़िटरी सुरक्षा अनुसंधान और जिम्मेदार प्रकटीकरण उद्देश्यों के लिए प्रकाशित की गई है। कोड केवल CVE-2026-6042 को पुनरुत्पादित और सत्यापित करने के लिए प्रदान किया गया है। इसे उन सिस्टमों के खिलाफ उपयोग न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।