Android security tags, read closely by Lightrion

CVE-2026-0075 AI-generated analysis

platform/packages/providers/ContactsProvider, ContactsProvider2 (CP2) query/insert/update/delete entry points

AI-generated: written from the bulletin and the fixing diffs by claude-fable-5-1, then checked against the code by claude-opus-5-5 (2 corrections). Verify against the commit before relying on it.

When the caller lacks the provider's READ_PERMISSION (query; READ_CONTACTS according to the commit message) or WRITE_PERMISSION (insert/update/delete), ContactsProvider2 now replaces any SQLiteException whose message contains "json" with one carrying the fixed message "Stripped exception message". It also calls cursor.getCount() inside the try block of query so that deferred SQLite errors are caught and filtered too.

Root cause

ContactsProvider2.query/insert/update/delete caught any Exception, logged it and rethrew it unchanged to the caller. According to the commit message, CP2 applied no strict SQL checks to callers. A caller without READ_CONTACTS could therefore send malformed queries and run a side channel attack by parsing the strings returned in the resulting SQLite exception. The code comment ties this to certain "json" tokens. In query(), cursor.getCount() was only called in the finally block, so an exception raised when the cursor was materialized never reached the catch block.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to June 2026 · Findings