Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
mysql-set-role-leftover — MySQL Community Server 26.7.0 – Hoch – SET ROLE ALL EXCEPT verbleibende FILE – mysqld UID-Schreibzugriff | Kitploit
Tools/GitHubGitHub/abraxas/mysql-set-role-leftover
Authentifizierung & AutorisierungPrivilege EscalationSchwachstellenanalyseExploitationPenetrationstestsDatenbanksicherheitLabs & Praxis
GitHubabraxas/mysql-set-role-leftover

mysql-set-role-leftover

MySQL Community Server 26.7.0 – Hoch – SET ROLE ALL EXCEPT verbleibende FILE – mysqld UID-Schreibzugriff

Repository anzeigen
27vor 9 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Abraxas Labs - mysql-set-role-leftover

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

mysql-set-role-leftover

Klasse: Privilegien-Überbleibsel (FILE als mysqld-UID; kein OS-LPE) Reichweite: Remote

MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle

SET ROLE ALL EXCEPT rfile (oder SET ROLE DEFAULT ohne Defaults) leert die Liste der aktiven Rollen, dann kehrt checkout_access_maps() zurück, ohne set_master_access(user->access) aufzurufen. CURRENT_ROLE() ist NONE. Statische globale Bits, die die Rolle aggregiert hat (FILE, PROCESS, SUPER, ...), bleiben in m_master_access. check_access liest dieses Überbleibsel. Labor: übrig gebliebenes FILE schreibt INTO OUTFILE als die mysqld-UID.

SET ROLE NONE ist der Pfad, der ACL_USER::access wiederherstellt. Dynamische Privilegien (SYSTEM_USER) entfallen. DB-Level-Überbleibsel ist bereits geschlossen (Bug#35386565). Standardkonten haben keine Rollen.

IDnoch keine CVE
KlassePrivilegien-Überbleibsel (FILE als mysqld-UID; kein OS-LPE)
ReichweiteRemote (authentifiziertes SQL)
CWECWE-269
CVSSHoch: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProduktMySQL Community Server mysqld
Betroffen26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
Authauthentifiziert; dem Opfer wird eine Rolle gewährt, die statische globale ACLs trägt (FILE im Labor)
LizenzGNU Affero GPL v3.0
Labornur 127.0.0.1. Witness-Datei. Überbleibsel-FILE-Schreibvorgang.

Was ein Angreifer tun kann

Ein Konto besitzen, dem eine Rolle mit FILE (oder einem anderen statischen globalen Bit) gewährt wurde. SET ROLE auf diese Rolle, dann SET ROLE ALL EXCEPT darauf. CURRENT_ROLE() meldet NONE. SELECT 'witness' INTO OUTFILE schreibt weiterhin als die mysqld-UID unter secure_file_priv.

Eine Anwendung, die mit SET ROLE ALL EXCEPT dangerous_role oder SET ROLE DEFAULT sandboxt und dann CURRENT_ROLE() vertraut, hat diese statischen Bits weiterhin. SET ROLE NONE entfernt sie tatsächlich.

Das Überbleibsel gewährt FILE nicht dem Konto, das es nie über eine Rolle gehalten hat. Es versäumt, FILE nach der Deaktivierung zu entfernen.

Wie ich es gefunden habe

Dieselbe 26.7.0-Jagd wie bei den drei Client-Überbleibseln. Unveröffentlichter Crit/High des Standard-Daemons war leer. ACL / Rollen hatten immer noch diesen Early Return bei leerer Rolle.

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) und leeres activate_role_default rufen diesen Checkout auf. activate_role_none führt dann set_master_access(user->access) aus.

Bereits dokumentierte Fehlspur: erstes Überbleibsel SELECT note FROM lab.t INTO OUTFILE gab 1142 zurück (db_acl()-Cache 0). Konstantes SELECT 'witness' INTO OUTFILE ist das FILE-Orakel.

Labor

cd lab
./run.sh

Image mysql:26.7.0. Veröffentlicht 127.0.0.1:18630. Rolle rfile hat FILE. Opfer hat GRANT SELECT ON lab.* und GRANT rfile, file_priv=N, keine Standardrolle. Login-Outfile 1227. SET ROLE rfile Outfile ok. SET ROLE ALL EXCEPT rfile macht CURRENT_ROLE() zu NONE; Überbleibsel-Outfile schreibt /var/lib/mysql-files/MYSQL-SET-ROLE-LEFTOVER-WITNESS. SET ROLE NONE ist wieder 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

Der Fix

Wenn m_active_roles leer ist, sollte checkout_access_maps() set_master_access(user->access) aufrufen, so wie es SET ROLE NONE bereits tut. Leeres ALL EXCEPT / DEFAULT sollte die vorherige aggregierte Map nicht behalten.

Referenzen

  • github.com/mysql/mysql-server Tag mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • sql/auth/sql_security_ctx.cc checkout_access_maps
  • sql/auth/roles.cc activate_role_all / activate_role_none
  • Schwester-Pakete: abraxas/mysql-mysqldump-show-tables-overflow · abraxas/mysql-mysqldump-tab-path · abraxas/mysql-mysqlbinlog-raw-path
Tool herunterladen