
SQLite 3.53.4 - عالي - محلي - بقايا صلاحيات - INSERT SELECT xfer يتخطى قراءة المصدر
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-xfer-auth
المقال: https://abraxaslabs.tech/research/sqlite-xfer-auth
الفئة: صلاحية متبقية النطاق: محلي
SQLite 3.53.4 (b09c88c، SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) لا يزال يسلك المسار السريع xferOptimization من أجل INSERT INTO dest SELECT * FROM src. إن sqlite3AuthCheck هو SQLITE_INSERT على dest فقط. لا تستدعي عملية النسخ sqlite3Select ولا sqlite3AuthRead لكل عمود على src. يُرفض SELECT * FROM src. تنسخ جملة INSERT SELECT الشاهد. سجل المفوِّض هو INSERT:dest.
المفوِّض معطّل ما لم يثبّته المُضمِّن. ليس RCE. اعتبر DRH التغيير Fossil d1cdb817 ميزةً في 3.54، لا إصلاحًا لخطأ في 3.53. لا يزال 3.54.0 مسودة.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية (نسخ جدول مرفوض القراءة) |
| النطاق | محلي (sqlite3_set_authorizer في المُضمِّن) |
| CWE | CWE-863 |
| CVSS | مرتفع: 7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| المنتج | SQLite (Hwaci) |
| المتأثر | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) |
| المصادقة | SQL محلي ضد مفوِّض مثبَّت يرفض READ/SELECT على src ويسمح بـ INSERT على dest |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18850 فقط |
جهّز INSERT INTO dest SELECT * FROM src عندما يكون dest متوافقًا مع المخطط ويُسمح بـ INSERT. تغادر سجلات B-tree الخام جدول مصدر مرفوض القراءة وتحط في dest. إن SELECT * FROM src المجرّد هو SQLITE_AUTH. لا يُصرِّف مسار xfer جملة SELECT، لذا لا تُطلق أبدًا SQLITE_SELECT على المصدر، ولا SQLITE_READ على مستوى الجدول، ولا sqlite3AuthRead لكل عمود.
يتطلب مُضمِّنًا ثبّت sqlite3_set_authorizer كبوابة ACL لـ SQL غير الموثوق / الأعمدة. في المكتبة الافتراضية يكون هذا الاستدعاء الراجع NULL. ليس RCE.
نفس حملة البحث عن Crit/High في 3.53.4 كغيرها من الصلاحيات المتبقية على هذا الإصدار GA. المفوِّض موثَّق في sqlite3_set_authorizer. مصادقة INSERT على جدول dest فقط (insert.c:969). يُسلَك مسار xfer قبل sqlite3Select() (insert.c:1020-1038). ينسخ xferOptimization السجلات. بحث grep في insert.c على هذا التثبيت: استدعاء sqlite3AuthCheck واحد، ولا sqlite3AuthRead. إن SQLITE_OMIT_XFER_OPT ليس علم بناء افتراضيًا.
المنتدى 2026-05-21T03:31:22Z. إن Trunk d1cdb817cafd03a4 خاص بـ 3.54 فقط. DRH: ميزة جديدة، لن تُضاف إلى branch-3.53.
cd lab
./run.sh
يبني amalgamation 3.53.4 بالإضافة إلى lab/xfer_auth.c. يركّب sqlite-xfer-auth. يربط 127.0.0.1:18850. الأوراكل هو JSON من المصرّح داخل العملية: SELECT * FROM src مرفوض؛ INSERT INTO dest SELECT * FROM src مقبول؛ dest يحتوي على SQLITE-XFER-AUTH-WITNESS؛ إجراءات الإدراج هي INSERT:dest فقط.
SUCCESS sqlite-xfer-auth how=xfer-opt-skip-src-read select-src=denied insert-select=ok dest-has-witness=yes SQLITE-XFER-AUTH-WITNESS
صرّح بالمصدر بالطريقة التي تفعلها النسخة 3.54 d1cdb817: إذا كان هناك مُصرِّح مسجَّل، فيجب على xferOptimization أن تُجري sqlite3AuthCheck على SELECT/READ على src (أو ترفض المسار السريع وتنتقل إلى sqlite3Select). وحتى ذلك الحين، لا يزال على المُضمِّنين الذين يرفضون READ على جدول أن يرفضوا INSERT في أي dest متوافق، أو أن يُترجموا باستخدام -DSQLITE_OMIT_XFER_OPT.
b09c88c14082339b66c7b7158d609a771e64ca69)src/insert.c sqlite3AuthCheck INSERT dest، xferOptimization قبل sqlite3Select