
SQLite 3.53.4 CLI - उच्च - स्थानीय - कमांड इंजेक्शन - go और slash टर्मिनेटर फिर dot-command
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cli-go
राइट-अप: https://abraxaslabs.tech/research/sqlite-cli-go
वर्ग: कमांड इंजेक्शन पहुँच: स्थानीय
SQLite 3.53.4 (b09c88c) का डिफ़ॉल्ट sqlite3 CLI अभी भी SQL Server के go और Oracle के / को स्टेटमेंट टर्मिनेटर मानता है। line_is_command_terminator उस पंक्ति को ; में बदल देता है। खाली SQL बफ़र वाली अगली पंक्ति do_meta_command है, इसलिए .shell / .output / .read ऑपरेटर UID के रूप में चलते हैं।
--safe अभी भी .shell को ब्लॉक करता है। वह नियंत्रण कायम है। डिफ़ॉल्ट sqlite3 --safe को चालू नहीं करता। libsqlite3 नहीं। Oracle एक witness स्ट्रिंग का echo है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | कमांड इंजेक्शन (CLI go / / टर्मिनेटर और फिर बाद में एक डॉट-कमांड) |
| पहुँच | स्थानीय (पीड़ित --safe के बिना हमलावर के SQL/स्क्रिप्ट पर डिफ़ॉल्ट sqlite3 चलाता है; UI:R) |
| CWE | CWE-78 |
| CVSS | उच्च: 7.8 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| उत्पाद | SQLite (sqlite3 CLI) |
| प्रभावित | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc |
| प्रमाणीकरण | पीड़ित डिफ़ॉल्ट sqlite3 को एक स्क्रिप्ट देता है; कोई --safe नहीं |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18920। Witness SQLITE-CLI-GO-WITNESS। |
ऑपरेटर द्वारा --safe के बिना sqlite3 को दी गई स्क्रिप्ट में अधूरे SQL के बाद, एक go या / पंक्ति और फिर .shell / .output / .read ऑपरेटर UID के रूप में चलते हैं।
एक सेमीकोलन पहले ही स्टेटमेंट समाप्त कर देता है। बचा हुआ भाग ऐसा SQL टर्मिनेट कर रहा है जिसमें ; नहीं है, इसलिए जो रैपर सोचता था कि स्टेटमेंट अभी भी खुला है, वह अगला डॉट-कमांड फिर भी चला देता है। .shell यानी system()। लैब ओरेकल एक witness का echo है। रिवर्स शेल नहीं।
OpenLiteSpeed के बाद 3.53.4 की बीस सोर्स खोजें। नवीनतम GA, 3.54.0 ड्राफ़्ट नहीं। CLI अतिरिक्त सुविधाएँ डिफ़ॉल्ट लाइब्रेरी नहीं हैं। --safe अविश्वसनीय स्क्रिप्ट के लिए प्रलेखित सिंक है (CVE-2022-46908)। यह अभी भी .shell को ब्लॉक करता है। डिफ़ॉल्ट sqlite3 इसे चालू नहीं करता।
src/shell.c.in में अभी भी SQL Server / Oracle संगतता पथ मौजूद है। ट्रंक ac6ac0c22d (2026-10-08) इसे अक्षम कर देता है जब तक SQLITE_SHELL_LEGACY_COMMAND_TERMINATOR न हो। वह चेक-इन इस GA के बाद का है।
पहले से दर्ज गलत मोड़: सेमीकोलन को वही बचा हुआ भाग मानना; CVE-2022-46908 को फिर से दर्ज करना; --safe के डिफ़ॉल्ट होने की अपेक्षा करना; इसे libsqlite3 RCE कहना; ओरेकल के रूप में रिवर्स शेल का उपयोग करना; 3.54.0 (ड्राफ़्ट) को पिन करना।
cd lab
./run.sh
आधिकारिक sqlite-src-3530400 को डिफ़ॉल्ट Unix sqlite3 (--disable-readline) में बनाता है। sqlite-cli-go को कंपोज़ करता है। 127.0.0.1:18920 पर डमी TCP। डिफ़ॉल्ट CLI ने go और / को टर्मिनेटर माना और फिर .shell echo SQLITE-CLI-GO-WITNESS चलाया। --safe ने cannot run .shell in safe mode प्रिंट किया। लूपबैक पर बाइंड करता है।
SUCCESS sqlite-cli-go how=go-then-dot-shell slash=yes safe=blocked SQLITE-CLI-GO-WITNESS
go और / को टर्मिनेटर मानना बंद करें, जो कि trunk ac6ac0c22d करता है जब तक -DSQLITE_SHELL_LEGACY_COMMAND_TERMINATOR न हो। तब तक, अविश्वसनीय स्क्रिप्ट को --safe के साथ चलाएँ। --safe वह नियंत्रण है जो अभी भी कायम है।
b09c88c14082339b66c7b7158d609a771e64ca69)src/shell.c.in line_is_command_terminator, process_input पुनर्लेखन, do_meta_command, failIfSafeMode के बाद .shell system()--safe--safe