Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
mysql-set-role-leftover — MySQL Community Server 26.7.0 - उच्च - SET ROLE ALL EXCEPT शेष FILE - mysqld UID लेखन | Kitploit
उपकरण/GitHubGitHub/abraxas/mysql-set-role-leftover
प्रमाणीकरण और प्राधिकरणविशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषणपेनिट्रेशन टेस्टिंगडेटाबेस सुरक्षालैब और अभ्यास
GitHubabraxas/mysql-set-role-leftover

mysql-set-role-leftover

MySQL Community Server 26.7.0 - उच्च - SET ROLE ALL EXCEPT शेष FILE - mysqld UID लेखन

रिपॉजिटरी देखें
32214 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Abraxas Labs - mysql-set-role-leftover

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-set-role-leftover

राइट-अप: https://abraxaslabs.tech/research/mysql-set-role-leftover

mysql-set-role-leftover

वर्ग: विशेषाधिकार अवशेष (mysqld UID के रूप में FILE; OS LPE नहीं) पहुँच: रिमोट

MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle

SET ROLE ALL EXCEPT rfile (या डिफ़ॉल्ट के बिना SET ROLE DEFAULT) सक्रिय-भूमिका सूची को साफ़ करता है, फिर checkout_access_maps() set_master_access(user->access) के बिना लौटता है। CURRENT_ROLE() NONE है। वे स्थिर वैश्विक बिट्स जिन्हें भूमिका ने एकत्र किया था (FILE, PROCESS, SUPER, ...) m_master_access में बने रहते हैं। check_access उसी अवशेष को पढ़ता है। लैब: अवशेष FILE, mysqld UID के रूप में INTO OUTFILE लिखता है।

SET ROLE NONE वह पथ है जो ACL_USER::access को पुनर्स्थापित करता है। गतिशील विशेषाधिकार (SYSTEM_USER) हट जाते हैं। DB-स्तरीय अवशेष पहले ही बंद हो चुका है (Bug#35386565)। डिफ़ॉल्ट खातों में कोई भूमिका नहीं होती।

IDअभी तक कोई CVE नहीं
वर्गविशेषाधिकार अवशेष (mysqld UID के रूप में FILE; OS LPE नहीं)
पहुँचरिमोट (प्रमाणित SQL)
CWECWE-269
CVSSउच्च: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
उत्पादMySQL Community Server mysqld
प्रभावित26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
प्रमाणीकरणप्रमाणित; पीड़ित को एक भूमिका दी गई है जो स्थिर वैश्विक ACL रखती है (लैब में FILE)
लाइसेंसGNU Affero GPL v3.0
लैबकेवल 127.0.0.1। साक्षी फ़ाइल। अवशेष FILE लेखन।

हमलावर क्या कर सकता है

ऐसा खाता रखें जिसे FILE (या कोई अन्य स्थिर वैश्विक बिट) वाली भूमिका दी गई हो। उस भूमिका पर SET ROLE करें, फिर उसे SET ROLE ALL EXCEPT करें। CURRENT_ROLE() NONE बताता है। SELECT 'witness' INTO OUTFILE अभी भी secure_file_priv के अंतर्गत mysqld UID के रूप में लिखता है।

जो एप्लिकेशन SET ROLE ALL EXCEPT dangerous_role या SET ROLE DEFAULT से सैंडबॉक्स बनाता है और फिर CURRENT_ROLE() पर भरोसा करता है, उसके पास अभी भी वे स्थिर बिट्स होते हैं। SET ROLE NONE वास्तव में उन्हें हटा देता है।

अवशेष उस खाते को FILE नहीं देता जो उसने कभी किसी भूमिका के माध्यम से नहीं रखा था। यह निष्क्रियता के बाद FILE को हटाने में विफल रहता है।

मैंने इसे कैसे खोजा

तीन क्लाइंट अवशेषों की तरह ही 26.7.0 की खोज। डिफ़ॉल्ट डेमॉन के अप्रकाशित Crit/High खाली थे। ACL / भूमिकाओं में अभी भी यह खाली-भूमिका वाला अर्ली रिटर्न था।

void Security_context::checkout_access_maps(void) {
  if (m_acl_map != nullptr) {
    get_global_acl_cache()->return_acl_map(m_acl_map);
    m_acl_map = nullptr;
  }
  if (m_active_roles.size() == 0) return;
  // ...
}

activate_role_all (ALL EXCEPT) और खाली activate_role_default उस चेकआउट को कॉल करते हैं। फिर activate_role_none set_master_access(user->access) करता है।

पहले से दर्ज गलत मोड़: पहला बचा हुआ SELECT note FROM lab.t INTO OUTFILE ने 1142 लौटाया (db_acl() कैश 0)। स्थिर SELECT 'witness' INTO OUTFILE ही FILE ऑरेकल है।

Lab

cd lab
./run.sh

Image mysql:26.7.0. प्रकाशित 127.0.0.1:18630. भूमिका rfile में FILE है। Victim के पास GRANT SELECT ON lab.* और GRANT rfile, file_priv=N, कोई डिफ़ॉल्ट भूमिका नहीं। लॉगिन outfile 1227. SET ROLE rfile outfile ठीक। SET ROLE ALL EXCEPT rfile CURRENT_ROLE() को NONE बनाता है; शेष outfile /var/lib/mysql-files/MYSQL-SET-ROLE-LEFTOVER-WITNESS लिखता है। SET ROLE NONE फिर से 1227 है।

SUCCESS mysql-set-role-leftover before-file=denied with-role=yes leftover-role=NONE leftover-file=yes after-none=denied dump=26.7.0 image=mysql:26.7.0 MYSQL-SET-ROLE-LEFTOVER-WITNESS

समाधान

जब m_active_roles खाली हो, तो checkout_access_maps() को SET ROLE NONE की तरह ही set_master_access(user->access) करना चाहिए। खाली ALL EXCEPT / DEFAULT को पिछला एकत्रित मैप नहीं रखना चाहिए।

संदर्भ

  • github.com/mysql/mysql-server टैग mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • sql/auth/sql_security_ctx.cc checkout_access_maps
  • sql/auth/roles.cc activate_role_all / activate_role_none
  • सहोदर पैक: abraxas/mysql-mysqldump-show-tables-overflow · abraxas/mysql-mysqldump-tab-path · abraxas/mysql-mysqlbinlog-raw-path
टूल डाउनलोड करें