Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-41651 — PackageKit의 TOCTOU 경쟁 조건을 통한 로컬 권한 상승. | Kitploit
도구/GitHubGitHub/gbuyssens/cve-2026-41651
Privilege EscalationVulnerability AnalysisExploitationCTFPenetration Testing
GitHubgbuyssens/cve-2026-41651

CVE-2026-41651

PackageKit의 TOCTOU 경쟁 조건을 통한 로컬 권한 상승.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-41651

root@kitploit:~
CVSS 3.x : 7.8 HIGH
CWE      : CWE-367 (Time-of-Check Time-of-Use)
Fix      : PackageKit 1.3.5+
Affects  : PackageKit 1.0.2 – 1.3.4

PackageKit의 D-Bus 트랜잭션 핸들러에서 TOCTOU 레이스 컨디션을 통한 로컬 권한 상승입니다.
권한이 없는 모든 로컬 사용자는 로컬 세션 외에 추가 인증 없이 루트 권한으로 임의의 패키지를 설치할 수 있습니다.

랩 / 승인된 테스트 전용 (HTB, CTF, 서면 범위가 명시된 작업).


사용법

root@kitploit:~
python3 exploit.py

이게 전부입니다. /tmp/.suid_bash를 드롭한 다음 exec로 루트 셸에 진입합니다.

사용자 지정 SUID 경로 또는 타임아웃:

root@kitploit:~
SUID_BIN=/dev/shm/.sh TIMEOUT=90 python3 exploit.py

요구 사항

root@kitploit:~
apt install python3-gi dpkg-dev

이 익스플로잇은 런타임에 두 개의 .deb 패키지를 빌드합니다 — 컴파일러가 필요 없습니다.


근본 원인

src/pk-transaction.c의 세 가지 버그가 연쇄적으로 연결됩니다:

버그 1 — 무조건적인 플래그 덮어쓰기

InstallFiles()는 상태 확인 없이 cached_transaction_flags와 cached_full_paths를 덮어씁니다. 동일한 트랜잭션에 대한 두 번째 D-Bus 호출은 트랜잭션이 이미 실행 중이더라도 이를 맹목적으로 교체합니다.

버그 2 — 조용한 상태 머신 가드

pk_transaction_set_state()는 불법적인 역방향 전이(RUNNING→READY 등)를 거부하지만 버그 1에서 덮어쓴 플래그는 롤백하지 않습니다. 손상된 플래그는 그대로 유지됩니다.

버그 3 — 늦은 플래그 읽기

pk_transaction_run()은 인증 시점이 아니라 디스패치 시점(GLib idle)에 cached_transaction_flags를 읽습니다. 백엔드는 공격자의 플래그를 보게 됩니다.

보너스 — SIMULATE는 polkit을 우회함

PK_TRANSACTION_FLAG_SIMULATE(0x4)를 설정하면 polkit 인증 확인을 완전히 건너뜁니다. 호출 1은 사용자 상호 작용 없이 인증됩니다.


공격 체인

root@kitploit:~
Attacker                         packagekitd
   │                                  │
   │  CreateTransaction()             │  state = NEW
   │─────────────────────────────────►│
   │                                  │
   │  InstallFiles(SIMULATE, dummy)   │  polkit skipped (SIMULATE)
   │─────────────────────────────────►│  state = READY, idle queued
   │                                  │
   │  InstallFiles(NONE, payload)     │  flags+paths overwritten
   │─────────────────────────────────►│  set_state(WAITING_FOR_AUTH) rejected
   │                                  │  state stays READY (BUG 2)
   │                                  │
   │                      [idle fires]│
   │                                  │  pk_transaction_run() reads NONE (BUG 3)
   │                                  │  → dpkg installs payload as root
   │                                  │  → postinst: chmod +s /tmp/.suid_bash
   │                                  │
   │  execv("/tmp/.suid_bash -p")     │
   │─────────────────────────────────►│  euid=0(root)

두 호출 모두 GLib idle이 발생하기 전에 도착하므로 — 레이스에서 이길 필요가 없으며, 결정적입니다.


영향을 받는 시스템

Ubuntu Desktop 18.04–26.04, Debian Trixie, Fedora 43, RockyLinux 10.1 및 데몬이 활성화된 상태로 PackageKit 1.0.2–1.3.4를 제공하는 모든 배포판.


해결 방법

  1. **PackageKit 1.3.5+**로 업그레이드
  2. 업그레이드가 불가능하면 서비스를 마스크: systemctl mask packagekit
  3. 이번 수정은 상태 가드를 추가합니다: transaction->state != PK_TRANSACTION_STATE_NEW → 거부

참고 자료

  • NVD — CVE-2026-41651
  • GitHub Advisory — GHSA-f55j-vvr9-69xv
  • 수정 커밋
도구 다운로드