
SQLite 3.53.4 - عالي - محلي - بقايا صلاحيات - INSERT SELECT xfer يتخطى قراءة المصدر
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · 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 السجلات. البحث في 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. Compose sqlite-xfer-auth. Bind 127.0.0.1:18850. الـ Oracle هو 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
فوّض المصدر بالطريقة التي يفعلها d1cdb817 في 3.54: إذا كان هناك مفوّض مسجّل، يجب على xferOptimization أن يستدعي sqlite3AuthCheck لـ SELECT/READ على src (أو يرفض المسار السريع ويمر إلى sqlite3Select). حتى ذلك الحين، على المُضمِّنات التي ترفض READ على جدول أن ترفض أيضًا INSERT في أي dest متوافق، أو أن تُبنى مع -DSQLITE_OMIT_XFER_OPT.
b09c88c14082339b66c7b7158d609a771e64ca69)src/insert.c sqlite3AuthCheck INSERT dest، xferOptimization قبل sqlite3Select