
CVE-2022-35737 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट कोड और तकनीकी विश्लेषण, जो SQLite3 के sqlite3_str_vappendf फ़ंक्शन में एक इंटीजर ओवरफ्लो है, जो स्टैक बफर ओवरफ्लो और संभावित मनमाना कोड निष्पादन को सक्षम बनाता है।
SQLite3 sqlite3_str_vappendf फ़ंक्शन में पूर्णांक अतिप्रवाह।
CVSS 6.7 AV:L/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H
CVE-2022-35737 को SQLite संस्करण 1.0.12 में पेश किया गया था और 21 जुलाई, 2022 को उपलब्ध रिलीज़ 3.39.2 में ठीक किया गया। यह 64-बिट सिस्टम पर शोषणीय है, और शोषणशीलता इस बात पर निर्भर करती है कि प्रोग्राम कैसे संकलित किया गया है: जब लाइब्रेरी को स्टैक कैनरी के बिना संकलित किया जाता है तो मनमाना कोड निष्पादन की पुष्टि की जाती है, लेकिन जब स्टैक कैनरी मौजूद होते हैं तो पुष्टि नहीं की जाती है; सभी मामलों में सेवा से वंचित (DoS) की पुष्टि की गई है।
sqlite3_str_vappendf फ़ंक्शन में बड़े स्ट्रिंग इनपुट हस्ताक्षरित पूर्णांक अतिप्रवाह का कारण बन सकते हैं जब स्वरूप निर्दिष्टकर्ता %q, %Q, या %w हो। इससे उपयोगकर्ता-नियंत्रित डेटा स्टैक-आवंटित बफर की सीमाओं से परे लिखा जा सकता है, जिसके परिणामस्वरूप प्रोग्राम क्रैश, अनंत लूप, या संभावित मनमाना कोड निष्पादन हो सकता है।
यह रिपॉजिटरी प्रूफ-ऑफ-कॉन्सेप्ट कोड प्रदान करता है जो भेद्यता के शोषण को प्रदर्शित करता है।
snprintf-good-example.csqlite3_snprintf सही ढंग से सभी मौजूदा सिंगल-कोट वर्णों को एस्केप करता है और एक छोटी स्ट्रिंग में आगे और पीछे सिंगल कोट जोड़ता है, यह प्रदर्शित करता है।
अपेक्षित परिणाम:
$ ./snprintf-good-example
src: hello, 'world'!
dst: 'hello, ''world''!'
snprintf-crash.csqlite_snprintf पर्याप्त रूप से बड़ी स्ट्रिंग्स के साथ कॉल करने पर क्रैश हो जाता है, यह प्रदर्शित करता है।
अपेक्षित परिणाम: SIGSEGV
$ ./snprintf-crash
Segmentation fault (core dumped)
snprintf-control-pc.cयह प्रदर्शित करता है कि बफर ओवरफ्लो की लंबाई को नियंत्रित करना संभव है ताकि स्टैक पर लक्षित डेटा, जैसे स्टैक कैनरी और सहेजे गए रिटर्न पते को अधिलेखित किया जा सके।
अपेक्षित परिणाम: SIGABRT
$ ./snprintf-control-pc
*** stack smashing detected ***: terminated
Aborted (core dumped)
snprintf-livelock.cयह प्रदर्शित करता है कि कमजोर प्रोग्राम को लगभग अंतहीन रूप से लूप करना संभव है (2^64 पुनरावृत्तियाँ)।
अपेक्षित परिणाम: अनंत रूप से लूप (उचित समय सीमा पर)
$ ./snprintf-livelock
<no output>
^C
pdo-sqlite3-quote-poc.phpयह प्रदर्शित करता है कि जब PHP इंटरप्रेटर को गैर-डिफ़ॉल्ट मेमोरी सीमाओं के साथ चलाया जाता है तो CVE-2022-35737 तक पहुँचा जा सकता है।
अपेक्षित परिणाम: SIGSEGV
$ php pdo-sqlite3-quote-poc.php
Segmentation fault (core dumped)
यदि वांछित हो, तो प्रूफ-ऑफ-कॉन्सेप्ट को एक Docker कंटेनर में निष्पादित किया जा सकता है जिसकी निर्भरताएँ SQLite लाइब्रेरी के कमजोर संस्करण पर पिन की गई हैं।
$ docker build -t cve-2022-35737 .
$ docker run -it --rm cve-2022-35737 /bin/bash
root@289cef859649:/poc# ./snprintf-crash
Segmentation fault (core dumped)