- Darwin Notification 시스템의 특성과 취약점을 이용해 iPhone을 벽돌화할 수 있었던 사례 소개
- 이 취약점은 CVE-2025-24091로 등록되었으며, 제보자는 $17,500(2500만원) 의 버그 바운티를 수령했음
- 특별한 권한 없이 시스템 수준 알림을 전송할 수 있다는 점을 악용해 iOS 장치 전체를 마비시킬 수 있었음
- 간단한 한 줄 코드로 "Restore in Progress" 모드를 강제 유발하여 재부팅 반복을 유도하는 서비스 거부(DoS) 공격 가능성이 확인됨
- iOS 18.3 업데이트를 통해 중요한 Darwin Notification 전송에 제한 권한(entitlement) 을 요구하도록 수정되어 취약점이 해결됨
Darwin Notifications
- Darwin Notifications는 iOS와 macOS에서 프로세스 간 간단한 메시지를 주고받기 위한 CoreOS 레벨의 메커니즘임
notify_post로 이벤트를 알리고,notify_register_dispatch로 이벤트를 수신하며, 상태값(state) 을 읽거나 쓸 수 있는 구조임- 특별한 권한 없이 수신 및 송신이 가능하고, 보안 검증 절차가 없음
- 시스템의 다양한 컴포넌트들이 이 레거시 API에 의존하고 있었음
취약점 개요
- Apple 운영 체제의 모든 프로세스는 Darwin Notifications를 수신할 수 있으며, 특별한 권한이 필요하지 않음
- 샌드박스된 앱에서도 Darwin Notification을 전송할 수 있는 구조적 허점이 존재했음
- 데이터 전송량이 제한적이기 때문에 민감한 데이터 유출 위험은 크지 않음
- 특정 중요한 시스템 알림(ex: 복원 시작 알림)을 송신하면 전체 시스템에 영향을 줄 수 있음
- 이로 인해 서비스 거부(DoS) 공격 가능성을 찾아냄
EvilNotify와 VeryEvilNotify
- EvilNotify 앱을 통해 다양한 시스템 반응을 강제로 발생시킬 수 있었음
- 액체 감지 아이콘 표시
- Wi-Fi 차단 및 셀룰러 강제 사용
- 잠금 화면 및 제어 센터 제스처 차단
- Find My Lost Mode 진입 등
- 특히,
notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted")한 줄로 Restore in Progress 상태에 빠뜨릴 수 있었음 - 이 모드는 장치가 실제로 복원되지 않기 때문에 실패하며, 유일한 해결책은 "재시작" 버튼을 누르는 것임
- VeryEvilNotify 앱은 위젯 확장을 이용해 재부팅 후에도 자동으로 공격 재시작이 가능하도록 구현함
- 위젯 확장은 시스템이 백그라운드에서 주기적으로 실행되며,
notify_post함수를 호출하여 "복원 진행 중" 모드를 반복적으로 트리거함 - 결과적으로 장치를 완전히 벽돌화시키는 효과를 일으킬 수 있었음
타임라인 및 CVE 등록
- 2024년 6월 26일: Apple에 초기사건 보고서 제출
- 2024년 9월 27일: Apple로부터 완화 조치가 진행 중이라는 메시지 수신
- 2025년 1월 28일: 문제 해결 완료 및 버그 바운티 자격 확정
- 2025년 3월 11일: CVE-2025-24091로 공식 등록되고 iOS/iPadOS 18.3에서 해결됨
- 버그 바운티 금액은 미화 17,500달러 지급
대응 및 완화 조치
- 민감한 Darwin Notification 송신에는 제한된 권한(entitlement) 이 필요하도록 변경됨
- 예를 들어, 기존
com.apple.MobileBackup.BackupAgent.RestoreStarted알림은com.apple.private.restrict-post.MobileBackup.BackupAgent.RestoreStarted로 변경됨 - 알림을 수신하는 프로세스도 새로운 이름을 사용해 비인가 앱의 무단 송신을 차단함
- 이 제한 권한 체계는 iOS 18.2 베타 2부터 적용되기 시작했고, iOS 18.3에서 완전히 마무리됨