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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-41651 — # CVE-2026-41651 개념 증명 익스플로잇 CVE-2026-41651에 대한 개념 증명 익스플로잇으로, PackageKit의 TOCTOU 로컬 권한 상승 취약점이며, 기술 분석, 탐지 로직, 그리고 수정 지침을 포함합니다. | Kitploit
도구/GitHubGitHub/baph00met/cve-2026-41651
Privilege EscalationVulnerability AnalysisExploitationPenetration TestingRed TeamingLabs & Practice
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

# CVE-2026-41651 개념 증명 익스플로잇 CVE-2026-41651에 대한 개념 증명 익스플로잇으로, PackageKit의 TOCTOU 로컬 권한 상승 취약점이며, 기술 분석, 탐지 로직, 그리고 수정 지침을 포함합니다.

저장소 보기
17354개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-41651 — PackageKit TOCTOU 로컬 권한 상승

분류: 퍼플 팀 평가 산출물
승인된 용도로만 사용하십시오. 이 문서와 첨부된 테스트 스크립트는 서면 승인을 받은 시스템에서의 내부 보안 검증 목적으로만 사용됩니다.


악용 증명

악용 증명


목차

  1. 취약점 개요
  2. 기술 분석
  3. 테스트 스크립트 설명
    • 동작
    • 강화된 환경 지원
    • 호환성
  4. 침해 지표
    • 파일 시스템
    • 프로세스 및 실행
    • D-Bus 활동
    • 감사 로그 패턴
    • 패키지 관리자 산출물
    • 권한 상승 산출물
  5. 탐지 로직
  6. 영향을 받는 시스템 및 버전
  7. 수정 조치
  8. 참고 자료

취약점 개요

PackageKit은 시스템 패키지 관리를 위한 D-Bus 추상화 계층으로, Debian, Ubuntu, Fedora, RHEL, SUSE, Arch Linux의 GNOME 기반 데스크톱에 기본으로 포함되어 있습니다. 권한 없는 사용자를 대신하여 권한이 필요한 패키지 작업을 중재하기 때문에, 인증 흐름의 결함은 시스템 전체에 root 수준의 영향을 미칩니다.


기술 분석

근본 원인

pk-transaction.c(1.3.5 이전)는 액션 메서드 재호출에 대한 상태 가드를 적용하지 않았습니다. D-Bus 클라이언트는 트랜잭션이 이미 PK_TRANSACTION_STATE_NEW 상태를 벗어난 후에도 동일한 트랜잭션 객체에 대해 InstallFiles(또는 다른 액션 메서드)를 여러 번 호출할 수 있었습니다.

공격 체인

root@kitploit:~
공격자 (권한 없음)
  │
  ├─① CreateTransaction()          → PackageKit이 트랜잭션 객체 경로(tid) 반환
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit이 dummy.pkg에 대한 polkit 인증 확인을 대기열에 추가.
  │       아직 설치가 발생하지 않음 — SIMULATE는 건식 실행만 의미.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← TOCTOU 창
  │       인증이 해결되기 전에 동일한 tid에 대해 재호출.
  │       취약한 버전은 대기열에 있던 매개변수를 payload.pkg로 덮어씀.
  │
  └─④ polkit이 인증 부여 (사용자 승인 또는 자동 인증)
          packagekitd가 payload.pkg를 root로 설치.
          payload postinst/post 스크립트: install -m 4755 /bin/bash /tmp/.suid_bash
          공격자가 /tmp/.suid_bash -p 실행  →  root 셸.

경쟁 조건이 성공하는 이유

②와 ③ 단계는 동일한 연결에서 비차단 비동기 D-Bus 호출로 전송되며 단일 쓰기로 플러시됩니다. 두 메시지는 packagekitd가 ②를 처리하고 상태 머신을 진행시키기 전에 도착하므로 TOCTOU 창이 열린 상태로 남습니다. 1.3.5의 수정은 PK_TRANSACTION_STATE_NEW 이후의 모든 재호출에 대해 PK_TRANSACTION_ERROR_INVALID_STATE를 반환하는 명시적 상태 검사를 추가합니다.


테스트 스크립트 설명

파일: cve-2026-41651-purpleteam.py
언어: Python 3
의존성: python3-gi (GObject introspection / GLib/Gio 바인딩)

목적

준비된 테스트 시스템에서 CVE-2026-41651의 악용 가능성을 입증하며, 다음 목적을 위해 사용됩니다:

  • 설치된 PackageKit 버전이 취약한지 검증
  • SIEM/EDR 튜닝을 위한 현실적인 IOC 텔레메트리 생성
  • 패치 적용 전후의 탐지 범위 테스트

동작

강화된 환경 지원

기본적으로 강화된 시스템은 두 가지 독립적인 지점에서 악용을 차단할 수 있습니다. 스크립트는 두 경우 모두 자동으로 처리합니다.

1. 제한적인 umask (027 / 077)

프로세스에서 상속된 umask 027 또는 077은 mkdir()이 750 또는 700 디렉터리를 생성하게 합니다. dpkg-deb와 rpmbuild 모두 전체 빌드 트리를 탐색해야 하며, 디렉터리 중 하나라도 읽을 수 없으면 빌드가 조용히 실패합니다.

적용된 수정: os.umask(0o022)가 파일이나 디렉터리가 생성되기 전에 시작 시 호출됩니다. 또한 빌드 트리의 모든 디렉터리와 파일은 생성 직후 명시적 chmod를 받습니다(디렉터리와 스크립트는 0o755, 데이터 파일은 0o644). 따라서 상속된 umask와 관계없이 올바른 권한이 보장됩니다.

2. /tmp의 nosuid / noexec 마운트 플래그

플래그악용에 미치는 영향
nosuid커널이 해당 파일 시스템에 저장된 모든 파일에서 SUID 비트를 조용히 제거 — 복사된 bash는 root가 되지 않음
noexecSUID 바이너리를 전혀 실행할 수 없음

적용된 수정: 시작 시 _find_suid_dir()가 /proc/mounts를 읽고 두 플래그가 모두 설정되지 않은 파일 시스템을 찾을 때까지 우선순위 순서로 후보 디렉터리를 테스트합니다. 결정된 경로는 페이로드의 사후 설치 스크립트에 포함되고 폴링 및 실행에 사용됩니다.

모든 후보가 차단되면 스크립트는 조용히 실패하는 대신 명확한 오류와 함께 종료됩니다.

호환성

배포판 계열패키지 도구테스트됨
Debian / Ubuntudpkg-deb✓
RHEL / Fedorarpmbuild

침해 지표

IOC는 일반/인프라 수준에서 스크립트 특정 산출물 순으로 나열됩니다. 일반 지표를 기반으로 구축된 탐지는 사용된 PoC 변형과 관계없이 이 CVE를 탐지합니다.

파일 시스템

프로세스 및 실행

D-Bus 활동

감사 로그 패턴

활성화: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
또는 아래 규칙을 /etc/audit/rules.d/에 사용:

root@kitploit:~
# 모든 후보 드롭 디렉터리에서 SUID 파일 생성 탐지
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/var/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/dev/shm -k suid_drop

# 비-root에 의한 dpkg-deb / rpmbuild 탐지
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# 모든 후보 드롭 디렉터리에서 SUID bash 실행 탐지
-a always,exit -F arch=b64 -S execve -F dir=/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/dev/shm -F uid!=0 -F euid=0 -k priv_esc_drop

패키지 관리자 산출물

권한 상승 산출물


탐지 로직

SIEM 의사 규칙 (일반 — 모든 CVE-2026-41651 변형 포함)

root@kitploit:~
(
  event.category == "process"
  AND process.name IN ("dpkg-deb", "rpmbuild")
  AND process.user.id != "0"
  AND NOT process.parent.name IN ("apt", "apt-get", "dpkg", "rpm", "dnf", "yum", "zypper", "mock", "koji")
)
OR
(
  event.category == "file"
  AND file.path LIKE "/tmp/%" OR file.path LIKE "/var/tmp/%" OR file.path LIKE "/dev/shm/%"
  AND file.owner == "root"
  AND (file.mode LIKE "04%")
)
OR
(
  event.category == "process"
  AND process.name == "bash"
  AND process.real_user.id != "0"
  AND process.effective_user.id == "0"
  AND NOT process.parent.name IN ("sudo", "su", "sshd", "login", "pam")
)

EDR 동작 체인

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd 또는 인수가 /tmp, /var/tmp, /dev/shm 또는 $HOME과 일치)
       └─ install / cp / chmod  (대상에 SUID + 소유자 root)

전체 체인에 플래그를 지정합니다. 개별 단계만으로는 양성일 수 있습니다. packagekitd를 통한 부모-자식 관계에서 SUID 설정 명령까지의 관계는 선택된 드롭 디렉터리와 관계없이 신뢰도가 높습니다. 네 후보 모두를 포함하도록 경로 기반 규칙을 확장하십시오.


영향을 받는 시스템 및 버전

설치된 버전 확인: pkcon backend-details 또는 packagekit --version
보고된 버전이 ≤ 1.3.4이면 취약합니다.


수정 조치

기본: PackageKit을 1.3.5로 업그레이드하거나 공급업체별 백포트를 적용합니다.

root@kitploit:~
# Debian / Ubuntu
apt update && apt install --only-upgrade packagekit

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

완화 조치 (즉시 패치가 불가능한 경우):


참고 자료


생성일: 2026-04-24 | 업데이트일: 2026-04-25 | 퍼플 팀 평가 | 내부 전용

도구 다운로드
필드값
CVE IDCVE-2026-41651
CWECWE-367 — 검사 시점 사용 시점(TOCTOU) 경쟁 조건
구성 요소PackageKit (packagekitd, D-Bus 서비스)
영향 범위PackageKit ≤ 1.3.4
수정 버전PackageKit 1.3.5
영향로컬 권한 상승 → root
공격 벡터로컬 / D-Bus (권한 없는 사용자 세션)
공개일2026-04-22 (Deutsche Telekom Red Team)
권고GHSA-f55j-vvr9-69xv
수정 커밋76cfb675fb31acc3ad5595d4380bfff56d2a8697
단계작업
설정/proc/mounts를 조사하여 SUID/실행 가능한 드롭 디렉터리를 선택하고, umask(022) 설정, 모든 빌드 산출물에 명시적 chmod 적용 후 /tmp에 더미 및 페이로드 패키지 빌드
악용시스템 D-Bus 연결을 열고 PackageKit 트랜잭션을 생성한 후 두 호출 경쟁 조건 실행
페이로드패키지 사후 설치 스크립트가 /bin/bash를 <drop_dir>/.suid_bash로 모드 04755, 소유자 root로 복사. 드롭 디렉터리는 런타임에 결정됨 (강화된 환경 지원 참조)
권한 상승SUID 바이너리를 폴링(90초 제한 시간)한 후 -p 옵션으로 execl하여 root 셸 획득
정리종료 시(성공 또는 실패) 임시 .deb/.rpm 파일 제거
우선순위후보일반적인 강화 수준
1/var/tmpnosuid/noexec가 거의 없음; 재부팅 후에도 유지됨
2/dev/shmtmpfs, 일반적으로 허용적; 재부팅 시 지워짐
3/tmpCIS/STIG 시스템에서 자주 강화됨
4$HOME최후의 수단; 사용자가 항상 쓸 수 있음
✓
SUSE / openSUSErpmbuild✓
IOC경로 / 패턴참고
전 세계 쓰기 가능 디렉터리의 SUID 바이너리<drop_dir>/.suid_bash — 드롭 디렉터리는 마운트 플래그에 따라 /var/tmp, /dev/shm, /tmp 또는 $HOME스크립트는 nosuid/noexec가 없는 첫 번째 디렉터리를 선택; 네 후보 모두를 포함하도록 탐지 범위 확장
/tmp의 임시 패키지 파일/tmp/*.deb, /tmp/*.rpm권한 없는 사용자가 빌드; 합법적인 패키지 작업은 /var/cache 또는 다운로드 경로 사용
dpkg 빌드 트리/tmp/pkbuild_*, /tmp/build_*dpkg-deb -b용 스테이징 디렉터리
/tmp의 rpmbuild 트리/tmp/rpmbuild_*~/rpmbuild 외부에서 호출된 rpmbuild용 스테이징 디렉터리
/tmp의 postinst / %post 스크립트/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.spec시스템 바이너리를 복사하거나 chmod하는 스크립트는 신뢰도가 높음
IOC세부 사항
비-root, 비-apt 프로세스가 생성한 dpkg-deb상위 프로세스는 사용자 Python/셸 프로세스이며 apt, dpkg 또는 unattended-upgrades가 아님
권한 없는 사용자가 생성한 rpmbuild패키징 관련 상위 프로세스(mock, koji, CI 러너)가 없으면 비정상
packagekitd가 /tmp 경로에서 /bin/sh 또는 /bin/bash 생성packagekitd는 postinst 스크립트를 실행; /tmp의 소스 경로가 비정상
UID ≠ EUID인 bash 프로세스SUID 실행; EUID=0, UID=<공격자>
bash -p 호출-p 플래그는 SUID가 설정된 경우 권한 모드를 활성화 — 합법적으로 거의 사용되지 않음
수명이 짧은 .suid_bash 프로세스 계보조부모는 packagekitd, 부모는 공격자의 셸
IOC세부 사항
동일한 객체 경로에 org.freedesktop.PackageKit.Transaction.InstallFiles가 두 번 호출됨두 호출 모두 수 밀리초 내에 도착; 합법적인 클라이언트는 트랜잭션당 한 번만 호출
동일한 tid에 FLAG_SIMULATE (4) 직후 FLAG_NONE (0)이 시퀀스는 합법적인 사용 사례가 없음
CreateTransaction → 빠른 이중 InstallFiles 패턴D-Bus 모니터(dbus-monitor --system) 또는 감사 dbus 규칙으로 탐지 가능
/tmp 아래의 파일 경로가 있는 InstallFiles합법적인 GUI 패키지 설치 프로그램(GNOME Software, Discover)은 $HOME 또는 /var/cache의 경로 사용
IOC세부 사항
dpkg/rpm 기록에 pk-dummy-* 또는 pk-payload-* 이름의 패키지스크립트 특정이지만 변형은 다른 이름을 사용
로컬 파일(/tmp/*.deb 또는 /tmp/*.rpm)에서 설치된 패키지dpkg -l 또는 rpm -qa --last — 저장소 출처가 없는 패키지 확인
변경 로그/설명이 없는 패키지제작된 패키지는 최소 메타데이터 사용; dpkg -s <pkg> 또는 rpm -qi <pkg>
설치 직후 제거되거나 패키지 DB에 나타나지 않는 패키지실패한 악용 시도가 부분 상태를 남길 수 있음
로컬 파일 설치에 대한 packagekit 트랜잭션 로그 항목/var/log/PackageKit/transactions.db 또는 journald packagekitd 항목
IOC세부 사항
모든 후보 드롭 디렉터리의 .suid_bash드롭 경로는 마운트 플래그에 따라 /var/tmp, /dev/shm, /tmp, $HOME에서 런타임에 선택 — 네 곳 모두 확인: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
사용자 쓰기 가능 디렉터리에 SUID 비트가 있는 root 소유 파일깨끗한 시스템에서는 항상 비어 있어야 함
euid=0이고 PAM / sudo / su 조상이 없는 bash 프로세스 트리합법적인 권한 전환이 아닌 SUID 실행 경로를 나타냄
비관리자 사용자에게 org.freedesktop.packagekit.package-install에 대한 polkit 부여사용자가 sudo / wheel 그룹에 없으면 예상치 못한 상황
배포판기본 PackageKit취약패치 버전 사용 가능
Ubuntu 24.04 LTS1.3.x예apt upgrade 통해
Ubuntu 22.04 LTS1.2.x예백포트 진행 중
Debian 12 (Bookworm)1.2.x예보안 추적기 대기 중
Fedora 411.3.x예dnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.x예RHSA 대기 중
SUSE Linux Enterprise 151.1.x가능성 높음SUSE 권고 대기 중
Arch Linux1.3.x예AUR / pacman 업데이트됨
완화 조치명령 / 구성주의 사항
PackageKit 서비스 비활성화systemctl disable --now packagekitdGNOME Software / Discover GUI 업데이트 중단
D-Bus 접근 제한/etc/dbus-1/system.d/org.freedesktop.PackageKit.conf에 권한 없는 사용자에 대한 deny 규칙 추가합법적인 사용자 대상 패키지 도구 중단 가능
Polkit 강화org.freedesktop.packagekit.package-install을 auth_admin으로 설정 (항상 관리자 비밀번호 요구)편의성은 낮아지지만 공격 표면 축소
감사 모니터링감사 로그 패턴 섹션의 감사 규칙 배포탐지 전용, 예방 아님
리소스링크
OSS-Security 공개https://www.openwall.com/lists/oss-security/2026/04/22/6
GitHub 보안 권고GHSA-f55j-vvr9-69xv
수정 커밋https://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
PackageKit 1.3.5 릴리스https://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
공개 PoC 참조https://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
polkit 문서https://www.freedesktop.org/software/polkit/docs/latest/