
Proof-of-Concept-Exploitcode und technische Analyse für CVE-2022-35737, einen Integer-Überlauf in der Funktion sqlite3_str_vappendf von SQLite3, der einen Stack-Pufferüberlauf und potenzielle beliebige Codeausführung ermöglicht.
Integer-Überlauf in der SQLite3-Funktion 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 wurde in SQLite Version 1.0.12 eingeführt und in Release 3.39.2 behoben, verfügbar am 21. Juli 2022. Es ist auf 64-Bit-Systemen ausnutzbar, und die Ausnutzbarkeit hängt davon ab, wie das Programm kompiliert wurde: Arbiträre Codeausführung ist bestätigt, wenn die Bibliothek ohne Stack-Canaries kompiliert wurde, aber unbestätigt, wenn Stack-Canaries vorhanden sind; Denial-of-Service ist in allen Fällen bestätigt.
Große Zeichenketteneingaben an die Funktion sqlite3_str_vappendf können einen vorzeichenbehafteten Integer-Überlauf verursachen, wenn der Formatspezifizierer %q, %Q oder %w ist. Dies kann dazu führen, dass vom Benutzer kontrollierte Daten über die Grenzen eines stack-allozierten Puffers hinaus geschrieben werden, was zu Programmabsturz, Endlosschleife oder möglicherweise arbiträre Codeausführung führt.
Dieses Repository enthält Proof-of-Concept-Code, der die Ausnutzung der Sicherheitslücke demonstriert.
snprintf-good-example.cDemonstriert, dass sqlite3_snprintf alle vorhandenen einfachen Anführungszeichen korrekt escaped und einer kurzen Zeichenkette ein führendes und ein abschließendes einfaches Anführungszeichen hinzufügt.
Erwartetes Ergebnis:
$ ./snprintf-good-example
src: hello, 'world'!
dst: 'hello, ''world''!'
snprintf-crash.cDemonstriert, dass sqlite_snprintf abstürzt, wenn es mit ausreichend großen Zeichenketten aufgerufen wird.
Erwartetes Ergebnis: SIGSEGV
$ ./snprintf-crash
Segmentation fault (core dumped)
snprintf-control-pc.cDemonstriert, dass es möglich ist, die Länge des Pufferüberlaufs zu kontrollieren, um gezielte Daten auf dem Stack zu überschreiben, wie den Stack-Canary und die gespeicherte Rücksprungadresse.
Erwartetes Ergebnis: SIGABRT
$ ./snprintf-control-pc
*** stack smashing detected ***: terminated
Aborted (core dumped)
snprintf-livelock.cDemonstriert, dass es möglich ist, das anfällige Programm nahezu endlos (2^64 Iterationen) schleifen zu lassen.
Erwartetes Ergebnis: Endlosschleife (in einem vernünftigen Zeitrahmen)
$ ./snprintf-livelock
<no output>
^C
pdo-sqlite3-quote-poc.phpDemonstriert, dass CVE-2022-35737 vom PHP-Interpreter aus erreichbar ist, wenn er mit nicht standardmäßigen Speichergrenzen ausgeführt wird.
Erwartetes Ergebnis: SIGSEGV
$ php pdo-sqlite3-quote-poc.php
Segmentation fault (core dumped)
Falls gewünscht, können die Nachweise des Konzepts in einem Docker-Container ausgeführt werden, dessen Abhängigkeiten auf die anfällige Version der SQLite-Bibliothek festgelegt sind.
$ docker build -t cve-2022-35737 .
$ docker run -it --rm cve-2022-35737 /bin/bash
root@289cef859649:/poc# ./snprintf-crash
Segmentation fault (core dumped)