Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/jvidhan/cve-2026-28912
Privilege EscalationStatic AnalysisVulnerability AnalysisExploitationReverse EngineeringBinary AnalysisPapers & ResearchLearning & Education
GitHubjvidhan/cve-2026-28912

cve-2026-28912

macOS PackageKit 심볼릭 링크 추적 버그(CVE-2026-28912)에 대한 리버스 엔지니어링 노트와 동작하는 PoC, 그리고 26.6 수정 버전의 디스어셈블리 diff를 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-28912 — 리버스 엔지니어링 노트 및 재현

macOS PackageKit 심볼릭 링크 추적 버그(CVE-2026-28912)에 대한 독립적인 리버스 엔지니어링과, 설치 프로그램이 설치 대상 경로의 디렉터리 심볼릭 링크를 통해 공격자가 제어하는 파일을 root 권한으로 기록하는 것을 보여주는 동작하는 PoC입니다.

이 버그는 PKCoreShove의 파일 재링크 로직에서 발생하는 동기화되지 않은 경로 순회입니다. 악성 .pkg는 비권한 디렉터리에 대상 경로를 선언하고, 경로 구성 요소 중 하나에 권한이 있는 위치를 가리키는 디렉터리 심볼릭 링크를 배치하여 root로 실행되는 설치 프로그램이 심볼릭 링크 대상에 기록하도록 만들 수 있습니다. Apple의 26.6 수정은 각 경로 구성 요소를 O_NOFOLLOW로 순회하고 모든 심볼릭 링크를 거부하는 _PKSIPOpenPathSafely를 추가합니다.


CVE 개요

필드값
CVECVE-2026-28912
구성 요소PackageKit (PKCoreShove, PKBundleComponent)
영향 받는 버전macOS Tahoe 26.5 및 이전
패치 버전macOS Tahoe 26.6
권고 영향"앱이 root 권한을 얻을 수 있습니다."
CVSS v3.17.8 (높음)
보고자Apple 권고에 따른 원래 발견자

이 문서가 존재하는 이유

CVE-2026-28912에 대한 Apple의 권고는 영향과 패치된 버전을 문서화합니다. 하지만 기술적 메커니즘은 문서화하지 않습니다:

  • PackageKit의 어떤 함수가 심볼릭 링크를 추적하는지
  • 설치 프로그램이 각 구성 요소를 확인하지 않고 대상 경로를 순회하는 이유
  • 26.6에서 버그를 닫기 위해 어떤 함수가 추가되었는지
  • 수정이 정확히 그 지점에 O_NOFOLLOW 순회를 삽입하는 이유
  • PoC가 파일 심볼릭 링크가 아닌 디렉터리 심볼릭 링크를 사용해야 하는 이유
  • 대상의 파일 수준 심볼릭 링크가 추적되지 않고 대체되는 이유

작성 시점에 공개된 기술 문서는 발견되지 않았습니다. 이 저장소는 26.4와 26.6 사이의 PackageKit에 대한 독립적인 리버스 엔지니어링 분석과 프리미티브를 실제로 보여주는 동작하는 PoC로 그 공백을 채웁니다.

이것은 발견 주장이 아닙니다. CVE는 원래 발견자에 의해 보고되었고 Apple에 의해 패치되었습니다. 여기서의 기여는 기술적 분석과 재현입니다.


취약점 요약

macOS 26.4의 PKCoreShove _relinkFile:dest:는 파일을 생성할 때 대상 경로를 구성 요소별로 순회합니다:

; macOS 26.4, PackageKit
1a9fb14f8   _relinkFile:dest:
    ...
    bl   _linkResolutionProhibitted     ; returns 0 in the normal case
    mov  w8, 0x10                       ; RENAME_NOFOLLOW_ANY
    cmp  w0, 0
    csel w22, w8, wzr, ne               ; w22 = 0x10 if prohibited, else 0
    ...
    mov  x2, x22
    bl   _renamex_np                    ; uses w22 as flags

_linkResolutionProhibitted는 호출 프로세스가 SIP 파일을 수정할 수 없을 때 0(false)을 반환합니다 — 사용자가 시작한 설치의 일반적인 경우입니다. 이는 RENAME_NOFOLLOW_ANY를 비활성화하므로, rename이 대상 경로의 모든 심볼릭 링크를 추적합니다.

26.6 수정은 PKBundleComponent initWithBundleAtPath:relativeToDestination:에서 호출되는 _PKSIPOpenPathSafely를 추가합니다:

; macOS 26.6, PackageKit
1aa6dfe18   bl   _PKSIPOpenPathSafely    ; walks each component with O_NOFOLLOW

_PKSIPOpenPathSafely:

  1. 각 경로 구성 요소를 O_NOFOLLOW (0x4)로 엽니다
  2. S_IFLNK (st_mode의 0xa000)를 통해 심볼릭 링크를 감지합니다
  3. _PKSIPFullyProtected를 통해 SIP 보호를 확인합니다
  4. fgetattrlist를 통해 SF_RESTRICTED를 읽습니다
  5. 정리 시 close_drop_np를 사용하여 샌드박스 확장을 해제합니다

의도된 경로 외부를 가리키는 심볼릭 링크인 모든 구성 요소는 EPERM 또는 ELOOP로 거부되고 설치가 실패합니다.


이 저장소에 포함된 내용

리버스 엔지니어링

  • 26.4와 26.6 사이의 PKCoreShove _relinkFile:dest: 및 _linkResolutionProhibitted의 디스어셈블리 차이
  • 취약한 필드 식별: SIP를 수정하지 않는 프로세스에 대해 0을 반환하는 _linkResolutionProhibitted
  • 수정 식별: PKBundleComponent에 추가된 _PKSIPOpenPathSafely, 구성 요소별 O_NOFOLLOW 순회
  • 시스템 콜 분석: 설치 프로그램은 호출자가 SIP 파일을 수정할 수 있을 때만 RENAME_NOFOLLOW_ANY = 0x10으로 renamex_np를 사용합니다
  • 런타임 확인: fs_usage는 설치 프로그램이 심볼릭 링크 대상에 대해 stat/listxattr하고 디렉터리 심볼릭 링크를 통해 기록하는 것을 보여줍니다

전체 문서는 docs/ANALYSIS.md를, 주소와 로그 샘플은 docs/ARTIFACTS.md를 참조하세요.

재현

  • link.sh — 단일 파일의 자체 포함 PoC:

    1. $HOME/cve-poc/target → $HOME/cve-poc/real에 디렉터리 심볼릭 링크를 생성합니다
    2. 페이로드가 $HOME/cve-poc/target/poc.txt에 파일을 선언하는 .pkg를 빌드합니다
    3. sudo installer로 설치합니다
    4. 파일이 root:wheel 소유권으로 $HOME/cve-poc/real/poc.txt에 생성되었는지 확인합니다

이 PoC가 보여주는 것

  • 비권한 디렉터리 아래에 파일을 선언하는 .pkg 페이로드
  • 해당 경로의 디렉터리 심볼릭 링크를 추적하는 설치 프로그램
  • 선언된 대상 외부에 root 소유 파일이 생성됨
  • fs_usage를 통한 기록의 실시간 캡처

이 PoC가 보여주지 않는 것

  • 대상의 파일 수준 심볼릭 링크. 파일 심볼릭 링크는 renamex_np에 의해 대체되며 추적되지 않습니다 — 기록은 경로의 디렉터리 심볼릭 링크를 통해 이루어져야 합니다.
  • 코드 실행, 권한 상승 또는 피해자에 대한 셸
  • 무기화: PoC는 기본적으로 /etc/sudoers.d/ 또는 /Library/LaunchDaemons/가 아닌 $HOME/cve-poc/real/을 사용합니다

시연된 영향은 심볼릭 링크 추적 프리미티브입니다 — 26.6 수정이 닫는 정확한 동작입니다.


요구 사항

대상(피해자) 호스트

  • macOS Tahoe 26.5 또는 이전 (취약한 PackageKit)
  • pkgbuild, installer, fs_usage
  • Root (설치 프로그램용)

별도의 공격자 호스트 불필요

PoC는 전적으로 대상에서 실행됩니다. 심볼릭 링크와 페이로드 모두 로컬에서 생성됩니다. 이는 네트워크 구성 없이 PoC를 자체 포함적이고 재현 가능하게 유지합니다.


사용법

chmod +x link.sh
./link.sh

환경 변수를 통한 선택적 조정:

sudo CONTENT="test content" ./link.sh

CONTENT는 심볼릭 링크를 통해 기록되는 내용을 설정합니다. 기본값은 hello입니다.

예상 출력

[*] System information:
ProductName:        macOS
ProductVersion:     26.4
BuildVersion:       25E246

[*] Setup...
    Symlink:  /Users/nerd/cve-poc/target → /Users/nerd/cve-poc/real

[*] Build .pkg...
    Payload:  /Users/nerd/cve-poc/payload/Users/nerd/cve-poc/target/poc.txt
    Package:  /Users/nerd/cve-poc/poc.pkg

[*] Install (password prompt expected)...
installer: Package name is poc
installer: Installing at base path /
installer: The install was successful.

[✓] VULNERABILITY CONFIRMED
    Landed at /Users/nerd/cve-poc/real/poc.txt
    Owner:   root:wheel
    Content: hello

CVE-2026-28912 trigger SUCCESSFUL

패치 검증

패치된 시스템(26.6)에서는 동일한 PoC가 실패합니다:

[✗] Not triggered
No file was created in /Users/nerd/cve-poc/real/

디스어셈블리 비교는 docs/PATCH_DIFF.md를 참조하세요.


.pkg 주의사항 (재현성 관련)

PoC의 두 가지 세부 사항은 개발 중에 발견되었으며, 유사한 도구를 만드는 다른 사람들이 같은 문제를 겪지 않도록 여기에 문서화합니다:

  1. 심볼릭 링크는 설치 프로그램이 순회하는 경로 구성 요소에 있어야 합니다. 대상 리프의 파일 수준 심볼릭 링크는 renamex_np에 의해 대체됩니다; 경로 중간의 디렉터리 심볼릭 링크만 추적됩니다.

  2. 페이로드 경로는 대상 경로를 반영해야 합니다. pkgbuild --install-location /를 사용하면 페이로드 경로는 선행 /를 제거한 대상 경로입니다. 일치하지 않으면 설치 프로그램이 심볼릭 링크를 통해 순회하지 않습니다.

둘 다 docs/ANALYSIS.md에 문서화되어 있습니다.


비밀번호가 완화책이 아닌 이유에 대한 참고

CVE-2026-28912는 설치 프로그램을 root로 실행하기 위해 사용자의 비밀번호가 필요합니다. 그 비밀번호는 설치를 위한 것이지 심볼릭 링크 기록을 위한 것이 아닙니다. 사용자는 $HOME/cve-poc/target/에 기록하는 것을 승인하고, 취약점은 기록을 심볼릭 링크가 가리키는 대상으로 리디렉션합니다. 두 경로는 다르며, 사용자는 그 차이를 결코 보지 못합니다.


크레딧

  • 원래 발견: Matej Moravec (@MacejkoMoravec)
  • 독립 분석 및 PoC: jvidhan
  • 참고: Apple의 권고와 패치된 바이너리가 취약한 버전과의 비교를 위한 기준으로 사용되었습니다.

면책 조항

이 저장소는 방어적 보안 연구 및 교육 목적으로만 제공됩니다.

  • 소유하거나 테스트에 대한 명시적 서면 허가를 받은 시스템에 사용하기 위한 것입니다.
  • 소유하거나 통제하지 않는 시스템에 이 도구를 사용하는 것은 지역, 국가 또는 국제법을 위반할 수 있습니다.
  • 저자(들)는 이 코드로 인한 오용이나 손해에 대해 어떠한 책임이나 의무도 지지 않습니다.
  • PoC는 심볼릭 링크 추적 기록을 시연하는 것으로 제한됩니다. 코드 실행, 권한 상승 또는 바이트 수준 메모리 유출을 달성하지 않습니다. 이 PoC로부터의 RCE 또는 전체 메모리 노출에 대한 모든 주장은 포함된 분석에 의해 뒷받침되지 않습니다.
  • PoC는 기본적으로 $HOME/cve-poc/real/을 사용하며 /etc/, /Library/ 또는 어떤 시스템 경로도 건드리지 않습니다. 대상 경로의 수정은 사용자 자신의 결정입니다.
  • Apple, macOS, XNU, PackageKit 및 installer는 Apple Inc.의 상표입니다. 이 프로젝트는 Apple과 제휴하거나 Apple의 승인을 받지 않았습니다.

라이선스

MIT. LICENSE를 참조하세요.

도구 다운로드