- แนะนำกรณีที่สามารถ ทำให้ iPhone ใช้งานไม่ได้จนกลายเป็นก้อนอิฐ ได้ โดยอาศัยคุณลักษณะและช่องโหว่ของระบบ Darwin Notification
- ช่องโหว่นี้ถูกลงทะเบียนเป็น CVE-2025-24091 และผู้รายงานได้รับเงิน bug bounty $17,500 (25 ล้านบาทวอนเกาหลี)
- มีการนำจุดที่สามารถส่งการแจ้งเตือนระดับระบบได้ โดยไม่ต้องมีสิทธิพิเศษ มาใช้โจมตีจนทำให้ อุปกรณ์ iOS ทั้งเครื่องเป็นอัมพาต ได้
- ยืนยันความเป็นไปได้ของการโจมตีแบบ ปฏิเสธการให้บริการ (DoS) ที่ใช้โค้ดเพียงบรรทัดเดียวเพื่อบังคับให้เข้าสู่โหมด "Restore in Progress" และทำให้ รีบูตซ้ำไม่สิ้นสุด
- ช่องโหว่นี้ถูกแก้ไขแล้วผ่าน อัปเดต iOS 18.3 โดยกำหนดให้การส่ง Darwin Notification ที่สำคัญต้องใช้ สิทธิแบบจำกัด (entitlement)
Darwin Notifications
- Darwin Notifications เป็นกลไกระดับ CoreOS สำหรับส่งข้อความอย่างง่ายระหว่างโปรเซสใน iOS และ macOS
- ใช้
notify_post เพื่อประกาศเหตุการณ์ และ notify_register_dispatch เพื่อรับเหตุการณ์ โดยมีโครงสร้างที่สามารถอ่านหรือเขียน ค่าสถานะ (state) ได้
- สามารถรับและส่งได้ โดยไม่ต้องมีสิทธิพิเศษ และ ไม่มีขั้นตอนตรวจสอบความปลอดภัย
- คอมโพเนนต์หลายส่วนของระบบยังคงพึ่งพา legacy API นี้อยู่
ภาพรวมของช่องโหว่
- ทุกโปรเซสในระบบปฏิบัติการของ Apple สามารถรับ Darwin Notifications ได้ โดยไม่ต้องใช้สิทธิพิเศษ
- มีช่องโหว่เชิงโครงสร้างที่ทำให้แม้แต่ แอปที่อยู่ใน sandbox ก็ยัง ส่ง Darwin Notification ได้
- เนื่องจากปริมาณข้อมูลที่ส่งได้มีจำกัด ความเสี่ยงด้านการรั่วไหลของข้อมูลสำคัญจึงไม่สูงมาก
- แต่หากส่งการแจ้งเตือนระบบที่สำคัญบางรายการ (เช่น การแจ้งเริ่มการกู้คืนระบบ) ก็อาจ ส่งผลกระทบต่อทั้งระบบ ได้
- จากจุดนี้จึงค้นพบความเป็นไปได้ของการโจมตีแบบ ปฏิเสธการให้บริการ (DoS)
EvilNotify และ VeryEvilNotify
- แอป EvilNotify สามารถบังคับให้ระบบตอบสนองหลายรูปแบบได้
- แสดง ไอคอนตรวจพบน้ำหรือของเหลว
- บล็อก Wi‑Fi และบังคับใช้เครือข่ายเซลลูลาร์
- ปิดกั้นท่าทางบนหน้าจอล็อกและ Control Center
- เข้าสู่ Find My Lost Mode เป็นต้น
- โดยเฉพาะอย่างยิ่ง เพียง
notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted") บรรทัดเดียว ก็ทำให้อุปกรณ์เข้าสู่สถานะ Restore in Progress ได้
- โหมดนี้จะล้มเหลวเพราะตัวอุปกรณ์ไม่ได้กำลังกู้คืนจริง และวิธีแก้เพียงอย่างเดียวคือกดปุ่ม "รีสตาร์ต"
- แอป VeryEvilNotify ใช้ส่วนขยายวิดเจ็ตเพื่อให้ เริ่มการโจมตีใหม่อัตโนมัติได้แม้หลังรีบูต
- ส่วนขยายวิดเจ็ตจะถูกระบบเรียกทำงานเป็นระยะในพื้นหลัง และเรียกฟังก์ชัน
notify_post เพื่อกระตุ้นโหมด "กำลังกู้คืน" ซ้ำๆ
- ผลลัพธ์คือสามารถทำให้อุปกรณ์ กลายเป็นก้อนอิฐโดยสมบูรณ์ ได้
ไทม์ไลน์และการลงทะเบียน CVE
- 26 มิถุนายน 2024: ส่งรายงานเหตุการณ์ฉบับแรกให้ Apple
- 27 กันยายน 2024: ได้รับข้อความจาก Apple ว่ากำลังดำเนินมาตรการบรรเทาผลกระทบ
- 28 มกราคม 2025: แก้ปัญหาเสร็จสมบูรณ์และยืนยันสิทธิ์รับ bug bounty
- 11 มีนาคม 2025: ลงทะเบียนอย่างเป็นทางการเป็น CVE-2025-24091 และแก้ไขใน iOS/iPadOS 18.3
- จำนวนเงิน bug bounty ที่จ่ายคือ 17,500 ดอลลาร์สหรัฐ
การรับมือและมาตรการบรรเทา
- การส่ง Darwin Notification ที่มีความอ่อนไหวถูกเปลี่ยนให้ต้องใช้ สิทธิแบบจำกัด (entitlement)
- ตัวอย่างเช่น การแจ้งเตือนเดิม
com.apple.MobileBackup.BackupAgent.RestoreStarted ถูกเปลี่ยนเป็น com.apple.private.restrict-post.MobileBackup.BackupAgent.RestoreStarted
- โปรเซสที่รับการแจ้งเตือนก็ใช้ชื่อใหม่เช่นกัน เพื่อ ป้องกันการส่งโดยไม่ได้รับอนุญาตจากแอปที่ไม่ได้รับสิทธิ์
- ระบบสิทธิแบบจำกัดนี้เริ่มถูกนำมาใช้ตั้งแต่ iOS 18.2 beta 2 และเสร็จสมบูรณ์ใน iOS 18.3
1 ความคิดเห็น
ความเห็นจาก Hacker News
น่าสนใจที่ API นี้ไม่ขอสิทธิ์สำหรับการใช้งานทั้งหมดที่เกี่ยวกับการตั้งค่าและการโพสต์การแจ้งเตือน
ช่องโหว่ที่อธิบายไว้ไม่ได้ทำให้อุปกรณ์ "พังจนใช้การไม่ได้" จริง
$17,500 ถือว่าค่อนข้างดี
งานยอดเยี่ยมมาก
จินตนาการได้เลยว่าวันนั้นจะเป็นวันที่หนักหนาแค่ไหนในออฟฟิศ ตอนที่ทีมแกนหลักของ iOS เข้ามาตรวจสอบเรื่องนี้
โค้ดเพียงบรรทัดเดียวก็สามารถทำให้อุปกรณ์เข้าสู่โหมด "กำลังกู้คืน" ได้
คิดถึงยุค IRC สมัยก่อน
เป็นนัยว่าแอปของบุคคลที่สามที่มีระบบแจ้งเตือนของตัวเองก็อาจถูกปลอมแปลงในลักษณะคล้ายกันได้
เนื่องจากผู้ใช้ต้องติดตั้งแอปอันตรายด้วยตัวเองอย่างตั้งใจ จึงอาจถูกจัดว่าเป็นเรื่องลำดับความสำคัญต่ำ
บทความนี้อ่านสนุกมาก
notify_postตอนนี้เป็นอย่างไรบ้าง