The three OpenPhone framework services pass raw JSON strings through their AIDL surface (IOpenPhoneAgentService.aidl, IOpenPhoneContextService.aidl, IOpenPhoneAssistantDataService.aidl). Parsing happens inside system_server after the binder transition — every field is untyped, and parsing bugs run as system UID.
Fix
Replace the string-JSON payloads with structured @JavaOnlyStableParcelable types (or full AIDL parcelables). Payloads become type-checked at the binder boundary; parsing bugs die in the caller, not in system_server.
Scope
- 0001 (agent manager)
- 0014 (context service)
- 0015 (assistant data service)
Cost is real (parcelable definitions, versioning), but the DoS and injection surface reduction is significant.
Size: L
The three OpenPhone framework services pass raw JSON strings through their AIDL surface (
IOpenPhoneAgentService.aidl,IOpenPhoneContextService.aidl,IOpenPhoneAssistantDataService.aidl). Parsing happens insidesystem_serverafter the binder transition — every field is untyped, and parsing bugs run as system UID.Fix
Replace the string-JSON payloads with structured
@JavaOnlyStableParcelabletypes (or full AIDL parcelables). Payloads become type-checked at the binder boundary; parsing bugs die in the caller, not insystem_server.Scope
Cost is real (parcelable definitions, versioning), but the DoS and injection surface reduction is significant.
Size: L