
SQLite 3.53.4 sqlite3_rsync - عالي - عن بُعد - RCE - حقن أوامر اسم ملف SSH
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-rsync-ssh
المقال: https://abraxaslabs.tech/research/sqlite-rsync-ssh
الفئة: RCE (حقن أوامر) الوصول: عن بُعد (UI:R)
يقوم SQLite 3.53.4 (b09c88c) sqlite3_rsync بتغليف USER@HOST:PATH بعلامات اقتباس من أجل /bin/sh -c المحلي. بعد ذلك يقوم OpenSSH بضم argv البعيد بمسافات من أجل صدفة تسجيل الدخول دون تلك العلامات. أي فاصلة منقوطة أو $() أو backtick أو | في PATH يُنفَّذ بصلاحيات UID البعيد لـ SSH. هذه أداة مساعدة، وليست libsqlite3. ثغرة تجاوز سعة المكدس readPow2 x>16 الخاصة بـ Ada Logics مغلقة في هذا الإصدار المثبَّت.
| المعرّف | لا يوجد CVE بعد |
| الفئة | RCE (حقن أوامر بصلاحيات UID البعيد لـ SSH) |
| الوصول | عن بُعد (الضحية تشغّل sqlite3_rsync؛ UI:R) |
| CWE | CWE-78 |
| CVSS | عالٍ: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| المنتج | أداة SQLite sqlite3_rsync |
| المتأثر | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69، SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) |
| المصادقة | الضحية تشغّل sqlite3_rsync مع USER@HOST:PATH خبيث |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18910 فقط. شاهد صدى. لا reverse shell. |
ضع ; أو $() أو backticks أو | في المسار البعيد لـ sqlite3_rsync USER@HOST:PATH. يجب أن تشغّل الضحية الأداة (UI:R). يُنفَّذ الأمر الإضافي بصلاحيات UID البعيد لـ SSH.
يقوم append_escaped_arg(..., 1) بتغليف الوسيط بعلامات اقتباس مفردة من أجل /bin/sh -c المحلي. تُستهلك تلك العلامات محليًا. ثم يدمج OpenSSH ما تبقى من argv في سلسلة أمر بعيد واحدة. ترى صدفة تسجيل الدخول الأحرف الخاصة دون علامات اقتباس.
هذا ليس libsqlite3. ملف sqlite3.c الافتراضي لا يتضمن هذا البروتوكول. ثغرة تجاوز سعة المكدس في نسخة Ada Logics (حد أُس readPow2) مغلقة بالفعل في 3.53.4.
عشرون عملية بحث في المصدر لوسم SQLite version-3.53.4 بعد موجة FTS5 / session في 3.53.2. لا تزال المكتبة الافتراضية تحتوي على بقايا أخرى (هذه الحزمة هي أداة rsync). يستدعي popen2 في tool/sqlite3_rsync.c الأمر /bin/sh -c. يقسم hostSeparator عند أول نقطتين. لا يتم التحقق من قيمة إرجاع append_escaped_arg أبدًا.
مسارات خاطئة: اعتبار تجاوز سعة المكدس في Ada Logics ما يزال مفتوحًا؛ اختبار reverse shell في المختبر؛ التواصل مع sshd حقيقي؛ تثبيت مسودة 3.54.0؛ وصف هذا بأنه RCE في المكتبة.
cd lab
./run.sh
يبني sqlite3_rsync من أرشيف المصدر الرسمي 3.53.4. يقوم OpenSSH المزيف بضم argv بعد dest. الأصل lab@host:;echo SQLITE-RSYNC-SSH-WITNESS>/work/sandbox/pwned.txt. احتوى الأمر البعيد على ;echo دون علامات اقتباس. ربط على loopback.
SUCCESS sqlite-rsync-ssh how=openssh-argv-join dest=lab@host remote-has-semicolon=yes SQLITE-RSYNC-SSH-WITNESS
رمّز أسماء الملفات المرسلة إلى الطرف الآخر بصيغة hex (isFilename==2 / --encoded-filenames) بالطريقة التي يفعلها trunk b0db2db (2026-10-07، ANT-2026-31X9HVRR) بعد هذا الإصدار GA. يبقى USER@HOST و--ssh ضمن اقتباسات sh المحلية. لا تعتمد على بقاء علامات الاقتباس المفردة المحلية عبر ضم argv في OpenSSH.
b09c88c14082339b66c7b7158d609a771e64ca69)append_escaped_arg، popen2، argv البعيد ORIGIN/REPLICA SSHb0db2db / Fossil eaec2f7f (2026-10-07)