
SQLite 3.53.4 CLI - عالي - محلي - حقن الأوامر - استعادة البيانات تُصدر مخططًا ضارًا كـ أمر نقطة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cli-recover
المقال التقني: https://abraxaslabs.tech/research/sqlite-cli-recover
الفئة: حقن أوامر النطاق: محلي
أمر .recover في واجهة سطر أوامر SQLite 3.53.4 (b09c88c) يطبع sqlite_schema.sql الخبيث كأمر نقطي لاحق. الدالة recoverOneStmt تُحضّر العبارة الأولى فقط. ومع ذلك يُكتب CREATE TABLE المزروع متبوعًا بسطر جديد و.shell. أنبوب الاستعادة الموثّق يشغّله بمعرّف المستخدم الخاص بالمشغّل (operator UID).
أمر .dump والدالة printSchemaLine ينتميان إلى نفس فئة الإخراج. ليس libsqlite3. وليس --safe. المرجع (Oracle) هو echo لسلسلة شاهد.
| المعرّف | لا يوجد CVE بعد |
| الفئة | حقن أوامر (إخراج المخطط عبر .recover / .dump في واجهة سطر الأوامر) |
| النطاق | محلي (الضحية تشغّل أنبوب الاستعادة الموثّق؛ UI:R) |
| CWE | CWE-78 |
| CVSS | مرتفع: 7.8 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| المنتج | SQLite (واجهة sqlite3 CLI) |
| المتأثر | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc |
| المصادقة | الضحية تشغّل sqlite3 hostile.db .recover | sqlite3 restored.db |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18930 فقط. الشاهد SQLITE-CLI-RECOVER-WITNESS. |
زرع عبارة CREATE أولى صالحة متبوعة بـ .shell لاحق في sqlite_schema.sql. الضحية التي تستعيد قاعدة البيانات تلك إلى sqlite3 ثانٍ تشغّل الأمر النقطي بمعرّف المستخدم الخاص بها.
الزرع هو ملف .db. وفعل الضحية هو أنبوب الاستعادة الموثّق، وليس سطر go ملصقًا ولا إيقاف --safe عن طريق الخطأ. .shell هي system(). ومرجع المختبر هو echo لشاهد. وليس صدفة عكسية (reverse shell).
عشرون عملية بحث في المصدر للإصدار 3.53.4. بحث الاستعادة الخاص بها وصف recoverOneStmt بأنها تحضير للعبارة الأولى فقط ثم انصرف. المتبقي هو مسار الطباعة: لا تزال recoverSqlCb تُخرج النص الإضافي. وأنبوب ذلك السكربت هو ما يخبرك sqlite.org به للاستعادة.
مسارات خاطئة مسجّلة مسبقًا: اعتبار تحضير العبارة الأولى عملية إزالة؛ تثبيت 3.54.0 (مسودة)؛ إعادة تقديم CVE-2022-46908 الخاص بـ --safe؛ وصف هذا بأنه RCE في libsqlite3؛ استخدام صدفة عكسية كمرجع.
cd lab
./run.sh
يبني sqlite-src-3530400 إلى sqlite3 مع استرداد Unix CLI الافتراضي (OPT_SHELL / SQLITE_ENABLE_DBPAGE_VTAB). writable_schema بعد .dbconfig defensive off. تم زرع CREATE TABLE t(x); بالإضافة إلى سطر جديد .shell echo SQLITE-CLI-RECOVER-WITNESS. طبع .recover الأمر .shell. عند تمريره عبر أنبوب إلى sqlite3 ثانٍ، فقد نُفّذ. ربط loopback.
SUCCESS sqlite-cli-recover how=recover-pipe-dot-shell recover-has-shell=yes restore-echo=yes SQLITE-CLI-RECOVER-WITNESS
لا تطبع SQL للمخطط ليس عبارة واحدة. قسّم عند أول prepare، وأصدر تلك العبارة فقط، أو ارفض الصف. اقتبس CREATE العادية بالطريقة التي يستخدمها تفريغ الجدول الافتراضي بالفعل %q. تعامل مع سطر . اللاحق كعدائي وأسقطه. --safe على sqlite3 للاستعادة يحظر .shell؛ وهو غير مفعّل في الأنبوب الموثّق.
b09c88c14082339b66c7b7158d609a771e64ca69).recover الموثّق ثم الاستعادةext/recover/sqlite3recover.c recoverOneStmt / recoverWriteSchema1src/shell.c.in recoverSqlCb، .dump printSchemaLine