Android security tags, read closely by Lightrion

CVE-2025-32325 AI-generated analysis

platform/frameworks/native, libs/binder (Parcel)

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 (6 corrections). Verify against the commit before relying on it.

Hardens Parcel::appendFrom in libbinder in three ways: it rejects appends that would overwrite existing objects in the destination, it only copies and acquires source objects that actually fall inside the requested [offset, offset+len) range (instead of a contiguous index range), and it keeps the object-ordering bookkeeping (mObjectsSorted, RPC mObjectPositions) accurate.

Root cause

In libs/binder/Parcel.cpp, the kernel binder path of Parcel::appendFrom chose which source objects to copy by recording the first and last index whose position fell in [offset, offset+len), then copying every entry in [firstIndex, lastIndex]. This implicitly assumed the source mObjects array was sorted by position. When it was not, entries outside the requested byte range were also copied. Their new offset (objects[i] - offset + startPos) could underflow or point past the appended bytes, and acquire_object was then called on a flat_binder_object read at that offset. Separately, appendFrom never checked whether the destination write range starting at mDataPos overlapped existing objects in the destination parcel, so an append at a rewound mDataPos could overwrite object data while the matching object entries stayed in place. In addition, mObjectsSorted was not cleared in some cases where ordering could be broken (appendFrom, and object writes not at the end of the data), and the RPC path added to mObjectPositions with push_back without keeping it sorted.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings