
Out-Of-Bounds Read in html2xhtml : CVE-2022-44311
Html2xhtml v1.3 में प्रोसेसर.c में स्टैटिक void elm_close(tree_node_t *nodo) फ़ंक्शन में आउट-ऑफ़-बाउंड्स रीड पाया गया। यह कमजोरी हमलावरों को एक विशेष रूप से तैयार की गई html फ़ाइल के माध्यम से संवेदनशील फ़ाइलों तक पहुँचने या सेवा से वंचित (DoS) करने की अनुमति देती है।
CWE-125 आउट-ऑफ़-बाउंड्स रीड एक प्रकार का सॉफ़्टवेयर त्रुटि है जो मेमोरी से डेटा पढ़ते समय हो सकता है। यह तब हो सकता है जब प्रोग्राम किसी ऐरे के अंत से परे पढ़ने का प्रयास करता है, उदाहरण के लिए। आउट-ऑफ़-बाउंड्स रीड से क्रैश या अन्य अप्रत्याशित कमजोरियाँ हो सकती हैं, और हमलावर को उस संवेदनशील जानकारी को पढ़ने की अनुमति दे सकता है जिस तक उनकी पहुँच नहीं होनी चाहिए।
html2xhtml/src/procesador.c में आउट-ऑफ़-बाउंड्स रीड। (GHSA-28fm-qh2h-3mch)Html2xhtml एक कमांड-लाइन टूल है जो HTML फ़ाइलों को XHTML फ़ाइलों में परिवर्तित करता है। Html2xhtml निम्नलिखित दस्तावेज़ प्रकारों में से किसी एक के अनुरूप XHTML आउटपुट उत्पन्न कर सकता है: XHTML 1.0 (Transitional, Strict और Frameset), XHTML 1.1, XHTML Basic और XHTML Mobile Profile।
यह कमजोरी -t frameset विकल्प का उपयोग करते समय हुए सेगफॉल्ट त्रुटि के कारण खोजी गई। सेगमेंटेशन फॉल्ट या सेगफॉल्ट एक विशिष्ट प्रकार की त्रुटि है जो उस मेमोरी तक पहुँचने के कारण होती है जो आपकी नहीं है। यह एक सहायक तंत्र है जो आपको मेमोरी को दूषित करने और डीबग करने में कठिन मेमोरी बग्स को पेश करने से रोकता है।
Valgrind के उपयोग से, जो C और C++ प्रोग्राम में हीप मेमोरी (वह मेमोरी जो new या malloc से गतिशील रूप से आवंटित की जाती है) में मेमोरी एक्सेस त्रुटियों को खोजने का एक उपकरण है, सेगफॉल्ट त्रुटि को डीबग किया गया और इसने परीक्षण मामले में आकार 4 का अमान्य पढ़ना रिपोर्ट किया:
==1040381== Memcheck, a memory error detector
==1040381== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1040381== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==1040381== Command: ./src/html2xhtml -t frameset report/vuln/id:000000,sig:11,src:001386+001369,time:12081510,execs:2336913,op:splice,rep:16
==1040381==
==1040381== Invalid read of size 4
==1040381== at 0x40E911: elm_close (procesador.c:944)
==1040381== by 0x410617: err_html_struct (procesador.c:1889)
==1040381== by 0x40F20A: err_content_invalid (procesador.c:0)
==1040381== by 0x40F20A: elm_close (procesador.c:959)
==1040381== by 0x40E7C4: saxEndDocument (procesador.c:233)
==1040381== by 0x40DF7A: main (html2xhtml.c:117)
==1040381== Address 0x6f20d4 is not stack'd, malloc'd or (recently) free'd
==1040381==
==1040381==
==1040381== Process terminating with default action of signal 11 (SIGSEGV)
==1040381== Access not within mapped region at address 0x6F20D4
==1040381== at 0x40E911: elm_close (procesador.c:944)
==1040381== by 0x410617: err_html_struct (procesador.c:1889)
==1040381== by 0x40F20A: err_content_invalid (procesador.c:0)
==1040381== by 0x40F20A: elm_close (procesador.c:959)
==1040381== by 0x40E7C4: saxEndDocument (procesador.c:233)
==1040381== by 0x40DF7A: main (html2xhtml.c:117)
==1040381== If you believe this happened as a result of a stack
==1040381== overflow in your program's main thread (unlikely but
==1040381== possible), you can try to increase the size of the
==1040381== main thread stack using the --main-stacksize= flag.
==1040381== The main thread stack size used in this run was 8388608.
==1040381==
==1040381== HEAP SUMMARY:
==1040381== in use at exit: 88,190 bytes in 13 blocks
==1040381== total heap usage: 22 allocs, 9 frees, 2,218,413 bytes allocated
==1040381==
==1040381== LEAK SUMMARY:
==1040381== definitely lost: 0 bytes in 0 blocks
==1040381== indirectly lost: 0 bytes in 0 blocks
==1040381== possibly lost: 0 bytes in 0 blocks
==1040381== still reachable: 88,190 bytes in 13 blocks
==1040381== suppressed: 0 bytes in 0 blocks
==1040381== Rerun with --leak-check=full to see details of leaked memory
==1040381==
==1040381== For lists of detected and suppressed errors, rerun with: -s
==1040381== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
==1040419== Memcheck, a memory error detector
Valgrind से प्राप्त त्रुटि लॉग हमें निम्नलिखित फ़ंक्शन तक ले गया जहाँ सेगफॉल्ट हुआ:

यह पाया गया कि फ़ंक्शन में एक प्रकार की जाँच गायब है। उपयोगकर्ता फ़ंक्शन में element के बजाय comment प्रकार का नोड पास कर रहा था और इसके परिणामस्वरूप आउट-ऑफ़-बाउंड रीड त्रुटि होती है। एक उपयोगकर्ता एक विकृत दस्तावेज़ प्रदान कर सकता है जिसमें अमान्य ELM_PTR(nodo).contenttype[doctype] हो, जिसके परिणामस्वरूप असेंबली में निम्नलिखित तुलना होती है:
cmp dword ptr [rbp + rax*4 + 0xc], 4
यह कमजोरी हमलावरों द्वारा एक डॉक्टर्ड फ़ाइल का उपयोग करके संवेदनशील फ़ाइलों, मेमोरी या स्थानों को पढ़ने के लिए उपयोग की जा सकती है।
| गंभीरता | High 8.1 / 10 |
|---|
| हमले की जटिलता | निम्न |
| आवश्यक विशेषाधिकार | कोई नहीं |
| उपयोगकर्ता सहभागिता | आवश्यक |
| दायरा | अपरिवर्तित |
| गोपनीयता | उच्च |
| अखंडता | कोई नहीं |
| उपलब्धता | उच्च |