
यह उपकरण CVE-2023-4863 के लिए पेचीदा विहित हफ़मैन हिस्टोग्राम की गणना करता है।
यह उपकरण एक पेचीदा कैनोनिकल हफमैन हिस्टोग्राम की गणना करता है, जो कमजोर libwebp लाइब्रेरी (यानी libwebp <= 1.3.1) के लिए OOB (आउट ऑफ बाउंड) राइट को ट्रिगर करने में सक्षम है। यह कमजोरी CVE-2023-4863 या CVE-2023-41064 के नाम से जानी जाती है। हम पूर्व-आवंटित हफमैन तालिका को अधिकतम 132 प्रविष्टियों तक ओवरफ्लो कर सकते हैं।
तर्क यह है कि libwebp मानता है कि प्रत्येक webp इमेज में निहित हफमैन हिस्टोग्राम अच्छी तरह से स्वरूपित है। अर्थात्, डिकोडिंग ट्री एक पूर्ण ट्री होना चाहिए। इस धारणा के साथ, libwebp समूह ने डिकोडिंग हफमैन तालिका (कैनोनिकल हफमैन कोड को तेजी से डिकोड करने के लिए एक शक्तिशाली संरचना) बनाने के लिए अधिकतम मेमोरी आकार का अनुमान लगाने के लिए एक enough उपकरण का लाभ उठाया। हालांकि, हैकर्स एक अपूर्ण ट्री का निर्माण करके इस मेमोरी सीमा को पार कर सकते हैं और इस प्रकार पूर्व-आवंटित मेमोरी को ओवरफ्लो कर सकते हैं।
यह हैकिंग उपकरण enough को अपूर्ण ट्री समर्थन के साथ समायोजित करके बनाया गया था।
नीचे दिए गए कमांड का उपयोग करके कोड संकलित करें:
gcc -o NotEnough ./main.c
40-प्रतीक, 8-बिट रूट तालिका और अधिकतम गहराई 15 वाली हफमैन तालिका के लिए, तालिका प्रविष्टियों की अधिकतम संख्या 410 है। हालांकि, एक अपूर्ण ट्री का निर्माण करके, तालिका प्रविष्टियों की संख्या 542 हो सकती है। नीचे दिया गया कमांड आज़माएं:
./NotEnough 40 8 15
ऐसे ट्री का एक उदाहरण नीचे दिया गया है:
ध्यान दें कि हमने संक्षिप्तता के लिए बिना पत्तियों वाली शाखाओं को काट दिया है।
फिर आप dwebp उपकरण (संस्करण <= 1.3.1) को ओवरफ्लो करने के लिए एक प्रभावी webp इमेज बनाने के लिए craft उपकरण का उपयोग कर सकते हैं। हफमैन कोड हिस्टोग्राम code_lengths_counts[4] को तदनुसार {0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 5, 9, 17, 1, 1, 3} में बदलें, और उपकरण को पुनर्निर्माण करें:
vim craft.c # Change huffman code histogram accordingly, i.e. about line 495.
gcc -o craft craft.c
./craft -o bad_542.webp
कृपया CVE-2023-4863 की बेहतर समझ के लिए @benhawkes का ब्लॉग देखें।