
MySQL Community Server 26.7.0 - उच्च - INSTALL COMPONENT योग्य स्कीम - plugin_dir छोड़ें
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · mysql-install-component-scheme
Class: RCE Reach: Remote
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 पर कॉपी करती है। कोई कस्टम कंपोनेंट नहीं।
| Field | Value |
|---|---|
| ID | अभी तक कोई CVE नहीं |
| Class | RCE (mysqld के रूप में कंपोनेंट dlopen; PR:H; लैब ने एक स्टॉक .so लोड किया) |
| Reach | Remote (प्रमाणित SQL; INSTALL COMPONENT / PR:H) |
| CWE | CWE-427 |
| CVSS | High: 7.2 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H |
| Product | MySQL Community Server mysqld |
| Affected | 26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8) |
| Auth | INSTALL COMPONENT (mysql.component पर INSERT) |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 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
इमेज 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 को पाथ-फ़िल्टर इम्प्लीमेंटेशन से मैप करें। ऐसी स्कीम को अस्वीकार करें जो किसी इम्प्लीमेंटेशन का नाम देती है। प्रत्येक फ़ाइल लोडर पर check_valid_path बनाए रखें।
06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)components/libminchassis/dynamic_loader.cc get_scheme_service_from_urnsql/server_component/dynamic_loader_path_filter.cc