
MySQL Community Server 26.7.0 - उच्च - INSTALL COMPONENT योग्य स्कीम - plugin_dir छोड़ें
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · mysql-install-component-scheme
राइट-अप: https://abraxaslabs.tech/research/mysql-install-component-scheme
वर्ग: RCE पहुँच: रिमोट
MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle
डिफ़ॉल्ट file:// INSTALL COMPONENT को mysql_server_path_filter द्वारा रैप किया जाता है और plugin_dir के अंतर्गत बाध्य किया जाता है। अनफ़िल्टर्ड libminchassis लोडर dynamic_loader_scheme_file.mysql_minimal_chassis के रूप में पंजीकृत रहता है। URN स्कीम file.mysql_minimal_chassis उस कार्यान्वयन को प्राप्त करती है और mysqld UID के रूप में एक निरपेक्ष पथ को dlopen करती है। INSTALL PLUGIN / CREATE FUNCTION SONAME अभी भी / को अस्वीकार करते हैं। mysql.component पर INSERT आवश्यक है (PR:H)।
लैब स्टॉक component_query_attributes.so को /tmp/MYSQL-INSTALL-COMPONENT-SCHEME-WITNESS.so पर कॉपी करता है। कोई कस्टम कंपोनेंट नहीं।
| फ़ील्ड | मान |
|---|---|
| ID | अभी तक कोई CVE नहीं |
| वर्ग | RCE (mysqld के रूप में कंपोनेंट dlopen; PR:H; लैब ने एक स्टॉक .so लोड किया) |
| पहुँच | रिमोट (प्रमाणित SQL; INSTALL COMPONENT / PR:H) |
| CWE | CWE-427 |
| CVSS | उच्च: 7.2 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H |
| उत्पाद | MySQL Community Server mysqld |
| प्रभावित | 26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8) |
| प्रमाणीकरण | INSTALL COMPONENT (mysql.component पर INSERT) |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1। plugin_dir के बाहर कॉपी किया गया स्टॉक अप्रयुक्त कंपोनेंट। |
INSTALL COMPONENT रखें। एक कंपोनेंट .so को plugin_dir के बाहर रखें (secure_file_priv के अंतर्गत FILE DUMPFILE, या एक स्थानीय राइट)। INSTALL COMPONENT 'file.mysql_minimal_chassis:///abs/name' (कोई .so सफ़िक्स नहीं; लोडर इसे जोड़ता है)। mysqld UID के रूप में dlopen। वही URN mysql.component में बना रहता है और पुनः आरंभ पर पुनः लोड होता है।
file:///abs/name अस्वीकृत है (3529)। INSTALL PLUGIN ... SONAME '/abs/...' अस्वीकृत है (1124)। योग्य स्कीम ही बची हुई है।
वही 26.7.0 खोज। set_default("dynamic_loader_scheme_file.mysql_server_path_filter") प्रलेखित सीमा है। अनफ़िल्टर्ड कार्यान्वयन पंजीकृत रहता है ताकि रैपर इसे कॉल कर सके। get_scheme_service_from_urn :// से पहले के बाइट्स को स्कीम के रूप में लेता है।
my_service<SERVICE_TYPE(dynamic_loader_scheme)> service(
(my_string("dynamic_loader_scheme_") + scheme).c_str(),
&imp_mysql_minimal_chassis_registry);
file.mysql_minimal_chassis एक वास्तविक स्कीम है। component.test इसे कभी आज़माता नहीं है।
गलत मोड़: 3-स्लैश URN (scheme:///tmp/...) लोड हुआ; 4-स्लैश की आवश्यकता नहीं थी। URN स्टेम में .so छोड़ा जाना चाहिए।
cd lab
./run.sh
Image mysql:26.7.0. प्रकाशित 127.0.0.1:18650. plugin_dir=/usr/lib64/mysql/plugin. स्टॉक component_query_attributes.so को /tmp/MYSQL-INSTALL-COMPONENT-SCHEME-WITNESS.so में कॉपी करता है।
SUCCESS mysql-install-component-scheme file-slash-denied=yes qualified-load=yes component-urn=yes dump=26.7.0 image=mysql:26.7.0 MYSQL-INSTALL-COMPONENT-SCHEME-WITNESS
SQL URNs से dynamic_loader_scheme_file.mysql_minimal_chassis प्राप्त न करें। केवल file को path-filter कार्यान्वयन से मैप करें। ऐसी स्कीम को अस्वीकार करें जो किसी कार्यान्वयन का नाम देती हो। प्रत्येक file loader पर check_valid_path बनाए रखें।
06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)components/libminchassis/dynamic_loader.cc get_scheme_service_from_urnsql/server_component/dynamic_loader_path_filter.cc