Nhà nghiên cứu 0xjohnnydev vừa công khai Geod-MCM-PoC, một proof-of-concept cho thấy ứng dụng iOS có thể thoát khỏi phạm vi sandbox thông thường và giành quyền đọc/ghi vào thư mục cache của MobileGestalt thông qua một chuỗi lỗi trong MobileContainerManager.
Đây là PoC dành cho developer và security researcher, không phải công cụ jailbreak hoàn chỉnh. Bản thân mã nguồn cũng được giữ ở mức tối thiểu nhằm chứng minh primitive bảo mật thay vì trực tiếp thay đổi dữ liệu hệ thống.
Hai lỗi MobileContainerManager kết hợp thành một sandbox escape
Theo README, Geod-MCM-PoC kết hợp hai vấn đề riêng biệt trong MobileContainerManager.
Đầu tiên, Class 12 cho phép truy cập container hệ thống được gắn với com.apple.geod. Tiếp theo, trường partDomain lại chấp nhận đường dẫn chứa path traversal.
Khi kết hợp hai hành vi này, request vốn được cấp quyền tới container của geod có thể bị chuyển hướng sang một vị trí khác nằm ngoài container ban đầu.
Điểm quan trọng ở đây là MobileContainerManager không chỉ trả về một path. Nó còn có khả năng cấp sandbox extension, tức quyền truy cập tạm thời cho process tới một vùng filesystem mà sandbox thông thường sẽ không cho phép.
PoC lợi dụng việc target path bị chuyển hướng trước khi extension được sử dụng.
Mục tiêu là MobileGestalt cache
Đích đến được PoC lựa chọn là system group:
systemgroup.com.apple.mobilegestaltcache
Cụ thể hơn, chuỗi traversal cuối cùng đưa quyền truy cập tới thư mục Library/Caches của MobileGestalt, nơi chứa file:
com.apple.MobileGestalt.plist
Theo tác giả, sandbox extension nhận được cho phép mở file cache đang được hệ thống sử dụng với quyền read/write.
MobileGestalt là một thành phần quen thuộc trong giới nghiên cứu iOS, liên quan đến việc hệ thống nhận diện nhiều thông tin và capability của thiết bị. Vì vậy, khả năng ghi vào cache của MobileGestalt là một primitive đáng chú ý đối với các nghiên cứu sâu hơn về iOS.
Tuy nhiên, cần phân biệt rõ phạm vi của bug.
Đây không phải arbitrary filesystem access.
Tác giả nhấn mạnh PoC chỉ đạt quyền truy cập vào một directory cố định, chứ không cho phép một ứng dụng tùy ý đọc hoặc ghi toàn bộ /private/var.
PoC chỉ chứng minh quyền ghi, không sửa MobileGestalt
Một điểm khá hay trong cách 0xjohnnydev công bố PoC là source code không trực tiếp chỉnh sửa com.apple.MobileGestalt.plist.
Mã chỉ thử mở file với O_RDWR, xác nhận rằng trước khi sandbox extension được kích hoạt thì ứng dụng không thể truy cập, sau khi kích hoạt thì có thể mở file read/write, và sau khi extension bị thu hồi thì quyền truy cập lại biến mất.
Điều này giúp PoC tập trung vào việc chứng minh lỗi trong cơ chế sandbox thay vì biến repository thành một công cụ chỉnh sửa cấu hình thiết bị.
Nói cách khác, primitive mà PoC chứng minh là:
ứng dụng sandboxed → MobileContainerManager → sandbox extension → quyền R/W tới MobileGestalt cache.
Việc có thể làm gì tiếp theo với primitive này là một câu hỏi khác và cần nghiên cứu riêng.
Vì sao geod lại trở thành điểm vào?
geod là một daemon hệ thống liên quan đến các dịch vụ vị trí trên iOS.
Trong chain này, điều đáng chú ý không phải một lỗi trực tiếp bên trong logic định vị của geod, mà là cách MobileContainerManager xử lý container của com.apple.geod.
Theo phân tích của tác giả, Class 12 coi container này là một container built-in được phép truy cập. Sau đó, việc partDomain không được kiểm tra đủ chặt khiến path có thể đi ra ngoài cây thư mục mà request ban đầu đáng lẽ phải bị giới hạn.
Vì vậy tên Geod-MCM-PoC phản ánh chính xác chain: geod cung cấp entry point hợp lệ, còn lỗi path handling trong MCM biến entry point đó thành quyền truy cập tới một system group khác.
Apple đã chặn chain trên iOS 27 beta 5
Theo bài phân tích được chính 0xjohnnydev công bố, chain geod đã bị patch trên iOS 27 beta 5, build 24A5408d.
Tác giả cho biết đây không phải bug duy nhất bị đóng trong bản beta này. Apple đã chặn một cụm các route liên quan đến MobileContainerManager mà researcher đang thử nghiệm.
Đối với riêng geod, thay đổi mới ngăn entry Class 12 tương ứng và xử lý chặt hơn trường partDomain, từ đó làm hỏng chuỗi traversal đã được PoC sử dụng.
README hiện tại của repository ghi PoC hoạt động trên iOS 27 beta 1 đến beta 4 và iOS 26, đồng thời tác giả cho rằng hướng khai thác cũng có thể áp dụng cho iOS 18 với một số điều chỉnh tùy phiên bản.
Tuy nhiên, phạm vi iOS 26 nên được hiểu theo từng build thay vì coi là tuyệt đối.
Lịch sử commit của repository từng ghi nhận trên một iPhone 11 chạy iOS 26.5.2 (23F84) rằng MCM có trả về path mang hình dạng traversal nhưng không cấp sandbox token, khiến file MobileGestalt vẫn không thể truy cập. Ghi chú này sau đó được thay bằng mô tả phiên bản đơn giản hơn trong README hiện tại.
Do đó, với developer muốn nghiên cứu PoC trên iOS 26, runtime result của từng build vẫn cần được kiểm chứng riêng.
Một PoC nhỏ nhưng cho thấy vấn đề lớn hơn của sandbox
Điểm thú vị của Geod-MCM-PoC không nằm ở số lượng code.
Repository chỉ cần một file Objective-C tương đối nhỏ để chứng minh chain. Phần đáng chú ý thực sự là trust boundary giữa ứng dụng, MobileContainerManager và sandbox extension.
Một ứng dụng iOS thông thường có thể biết đường dẫn tới rất nhiều file hệ thống, nhưng điều đó gần như vô nghĩa nếu sandbox không cho phép process mở chúng.
Ở đây, chính một service có đặc quyền của hệ thống lại cấp sandbox extension cho request. Khi target của request có thể bị chuyển hướng bằng path traversal, quyền hạn của service đó vô tình được sử dụng để mở một directory mà ứng dụng ban đầu không được phép truy cập.
Đó cũng là lý do chain này được xem là một sandbox escape, dù phạm vi filesystem mà PoC đạt được vẫn bị giới hạn.
Dành cho developer và security researcher
Geod-MCM-PoC phù hợp nhất với những developer đang nghiên cứu iOS internals, sandbox, MobileContainerManager, XPC và MobileGestalt.
PoC không phải jailbreak, không cung cấp arbitrary read/write trên toàn filesystem và cũng không tự chỉnh sửa MobileGestalt.
Giá trị của repository nằm ở việc chứng minh một cách rõ ràng rằng hai lỗi tưởng như riêng biệt — quyền truy cập Class 12 và path traversal trong partDomain — có thể kết hợp để biến một request container hợp lệ thành read/write access ngoài sandbox tới một system-group directory cụ thể.
Và với việc Apple đã đóng route này trên iOS 27 beta 5, Geod-MCM-PoC hiện cũng trở thành một tài liệu tham khảo hữu ích để nghiên cứu cách những sandbox escape dạng MobileContainerManager từng hoạt động trước khi được vá.
Repository: 0xjohnnydev/Geod-MCM-PoC
Lưu ý: Đây là proof-of-concept phục vụ nghiên cứu bảo mật. Không nên hiểu PoC này là một jailbreak hoặc công cụ cho phép truy cập tùy ý toàn bộ filesystem của iOS.


