
SQLite 3.53.4 CLI - عالي - محلي - حقن الأوامر - go ومحددات الشرطة المائلة ثم أمر النقطة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cli-go
المقال: https://abraxaslabs.tech/research/sqlite-cli-go
الفئة: حقن أوامر النطاق: محلي
SQLite 3.53.4 (b09c88c) لا يزال واجهة sqlite3 CLI الافتراضية تتعامل مع go الخاصة بـ SQL Server و/ الخاصة بـ Oracle كمنهيَّي عبارات. تعيد line_is_command_terminator كتابة ذلك السطر إلى ;. السطر التالي مع مخزن SQL فارغ هو do_meta_command، لذا تُنفَّذ .shell / .output / .read بمعرّف المستخدم الخاص بالمشغّل (UID).
لا يزال --safe يحجب .shell. هذا الضابط صامد. لا تُفعّل sqlite3 الافتراضية --safe. ليس libsqlite3. Oracle هو echo لسلسلة شاهد.
| المعرّف | لا يوجد CVE بعد |
| الفئة | حقن أوامر (منهي go / / في CLI ثم أمر نقطي لاحق) |
| النطاق | محلي (يشغّل الضحية sqlite3 الافتراضية على SQL/سكربت المهاجم دون --safe؛ 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 الافتراضية؛ دون --safe |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18920 فقط. الشاهد SQLITE-CLI-GO-WITNESS. |
بعد SQL غير منهيّ في سكربت يغذّيه المشغّل إلى sqlite3 دون --safe، يُنفَّذ سطر go أو / ثم .shell / .output / .read بمعرّف المستخدم الخاص بالمشغّل.
الفاصلة المنقوطة تُنهي العبارة بالفعل. المتبقي هو SQL منهٍ لا يحتوي على ;، لذا فإن غلافًا ظنّ أن العبارة ما زالت مفتوحة سيُنفّذ الأمر النقطي التالي. .shell هو system(). أداة التحقق في المختبر هي echo لسلسلة شاهد. وليست صدفة عكسية.
عشرون عملية بحث في المصدر للإصدار 3.53.4 بعد OpenLiteSpeed. أحدث إصدار GA، وليس مسودة 3.54.0. إضافات CLI ليست المكتبة الافتراضية. --safe هو المصبّ الموثّق للسكربتات غير الموثوقة (CVE-2022-46908). لا يزال يحجب .shell. لا تُفعّلها sqlite3 الافتراضية.
لا يزال src/shell.c.in يحتوي على مسار التوافق مع SQL Server / Oracle. يعطّله الفرع الرئيسي ac6ac0c22d (2026-10-08) ما لم يكن SQLITE_SHELL_LEGACY_COMMAND_TERMINATOR معرّفًا. هذا الإيداع يأتي بعد إصدار GA هذا.
مسارات خاطئة مسجّلة مسبقًا: اعتبار الفاصلة المنقوطة هي نفس المتبقي؛ إعادة تقديم CVE-2022-46908؛ توقّع أن يكون --safe افتراضيًا؛ وصف هذا بأنه RCE في libsqlite3؛ استخدام صدفة عكسية كأداة تحقق؛ تثبيت 3.54.0 (مسودة).
cd lab
./run.sh
يبني sqlite-src-3530400 الرسمي إلى sqlite3 الافتراضي على Unix (--disable-readline). يُركّب sqlite-cli-go. TCP وهمي على 127.0.0.1:18920. تعامل CLI الافتراضي مع go و/ كمُنهيات ثم شغّل .shell echo SQLITE-CLI-GO-WITNESS. طبع --safe الرسالة cannot run .shell in safe mode. يربط على loopback.
SUCCESS sqlite-cli-go how=go-then-dot-shell slash=yes safe=blocked SQLITE-CLI-GO-WITNESS
توقف عن معاملة go و / كمُنهِّيات، وهو ما يفعله trunk ac6ac0c22d ما لم يتم تعيين -DSQLITE_SHELL_LEGACY_COMMAND_TERMINATOR. حتى ذلك الحين، شغِّل السكربتات غير الموثوقة باستخدام --safe. يُعد --safe هو الضابط الذي لا يزال صامدًا.
b09c88c14082339b66c7b7158d609a771e64ca69)src/shell.c.in line_is_command_terminator، إعادة كتابة process_input، do_meta_command، .shell system() بعد failIfSafeMode--safe--safe