
إثبات المفهوم لرمز الاستغلال والتحليل الفني لـ CVE-2022-35737، وهو تجاوز عدد صحيح في دالة sqlite3_str_vappendf الخاصة بـ SQLite3 مما يتيح تجاوز سعة المخزن المؤقت للمكدس واحتمال تنفيذ تعليمات برمجية عشوائية.
تجاوز عدد صحيح في دالة sqlite3_str_vappendf الخاصة بـ SQLite3.
CVSS 6.7 AV:L/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H
تم إدخال CVE-2022-35737 في الإصدار 1.0.12 من SQLite وتم إصلاحه في الإصدار 3.39.2، المتاح في 21 يوليو 2022. يمكن استغلاله على الأنظمة 64 بت، وتعتمد قابلية الاستغلال على كيفية تجميع البرنامج: تم تأكيد تنفيذ التعليمات البرمجية التعسفية عند تجميع المكتبة بدون حراس المكدس، ولكن لم يتم تأكيدها عند وجود حراس المكدس؛ تم تأكيد رفض الخدمة في جميع الحالات.
يمكن أن تتسبب مدخلات السلسلة الكبيرة للدالة sqlite3_str_vappendf في تجاوز
عدد صحيح موقّع عندما يكون محدد التنسيق %q أو %Q أو %w. يمكن أن يؤدي
ذلك إلى كتابة بيانات يتحكم بها المستخدم خارج حدود مخزن مؤقت مخصص على المكدس،
مما يؤدي إلى تعطل البرنامج أو حلقة لا نهائية أو احتمال تنفيذ تعليمات برمجية
تعسفية.
يحتوي هذا المستودع على كود إثبات المفهوم الذي يوضح استغلال الثغرة.
snprintf-good-example.cيوضح أن sqlite3_snprintf تهرب بشكل صحيح جميع أحرف الاقتباس المفردة الموجودة
وتضيف اقتباسًا مفردًا بادئًا وتاليًا لسلسلة قصيرة.
النتيجة المتوقعة:
$ ./snprintf-good-example
src: hello, 'world'!
dst: 'hello, ''world''!'
snprintf-crash.cيوضح أن sqlite_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يوضح أنه يمكن الوصول إلى CVE-2022-35737 من مترجم PHP عند تشغيله بحدود ذاكرة غير افتراضية.
النتيجة المتوقعة: 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)