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 leftover FILE - mysqld UID write | Kitploit
도구/GitHubGitHub/abraxas/mysql-set-role-leftover
Authentication & AuthorizationPrivilege EscalationVulnerability AnalysisExploitationPenetration TestingDatabase SecurityLabs & Practice
GitHubabraxas/mysql-set-role-leftover

mysql-set-role-leftover

MySQL Community Server 26.7.0 - 높음 - SET ROLE ALL EXCEPT leftover FILE - mysqld UID write

저장소 보기
3218일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

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을 수행합니다.

ACL_USER::access를 복원하는 경로는 SET ROLE NONE입니다. 동적 권한(SYSTEM_USER)은 제거됩니다. DB 수준의 잔존 문제는 이미 해결되었습니다(Bug#35386565). 기본 계정에는 역할이 없습니다.

ID아직 CVE 없음
분류권한 잔존 (mysqld UID로서의 FILE; OS LPE 아님)
도달 범위원격 (인증된 SQL)
CWECWE-269
CVSSHigh: 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
도구 다운로드