Android security tags, read closely by Lightrion

CVE-2025-48543 AI-generated analysis

platform/art, runtime JNI (runtime/jni/jni_internal.cc, runtime/jni/check_jni.cc)

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

Adds an instantiability check to three ART JNI object creation entry points in jni_internal.cc (AllocObject, NewObjectV and NewObjectA, per the matching CheckJNI call sites). Creating an instance of an abstract class or interface through them now throws java.lang.InstantiationException. The fix also relaxes the CheckJNI helper so it only rejects array classes.

Root cause

In runtime/jni/jni_internal.cc, three object creation functions in class JNI decoded the jclass, returned if it was nullptr, and then went straight to allocation, with a special case for the String class. None of them checked that the class is instantiable; the test's info.txt says "we forgot to check if a class is instantiable". The only guard was in CheckJNI: ScopedCheck::CheckInstantiableNonArray aborted on !IsInstantiableNonArray(). CheckJNI is a debugging layer that is normally off on production builds (general platform knowledge). The regression test (test/863-serialization) reaches the unchecked path from Java through ObjectInputStream.readObject on a serialized stream that refers to java.text.DateFormat. On the fixed runtime this fails with an InvalidClassException whose cause is an InstantiationException.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2025 · Findings