← Back to search

CVE-2026-64678

9.8 CRITICALpublic exploit available

Published 2026-11-11 · Updated 2026-11-11

AI risk analysis

Summary
Nitrite DB versions prior to 4.4.1 deserialize untrusted data from legacy database files using Java ObjectInputStream without class filtering, enabling arbitrary code execution via gadget chains when malicious serialized objects are present in the database file. This is a deserialization flaw (CWE-502) with CVSS 9.8 due to remote exploitability and full confidentiality/integrity/availability impact.
Exploitability
Exploitation requires an attacker to first inject a malicious serialized object into a Nitrite database file (e.g., via compromised data ingestion or social engineering of a local file), then trigger database opening by the vulnerable application; no network-based remote injection is possible without such prior compromise.
Blast radius
If exploited, attackers could achieve full remote code execution on the host running the vulnerable Nitrite-backed application, potentially compromising all data, systems, and services accessible to that application's process.
Detection
No reliable host or network indicator is derivable from the published description.
Prioritized remediation
Upgrade to Nitrite version 4.4.1 or later, which implements class filtering via NitriteObjectInputStream to prevent unsafe deserialization.
rcedeserializationembedded-dbgadget-chaincwe-502

Analysis generated locally by garnet-coder (no data left the box). AI-assisted — verify against primary sources before acting.

NVD description

NOsql Object (NO2 a.k.a Nitrite) database is an open source nosql embedded document store. Prior to version 4.4.1, when Nitrite opens a database file, MVStoreUtils.openOrCreate() automatically checks for a legacy v1-format store and, on detecting one (or hitting a compatibility error while opening), triggers an automatic migration path. This path deserializes stored values using NitriteDataType.deserialize(byte[]), which passes the raw bytes directly to java.io.ObjectInputStream.readObject() via a custom NitriteObjectInputStream subclass. That subclass overrides only readClassDescriptor() — solely to remap a handful of known legacy class names to their current equivalents — and implements no class allowlist, blocklist, or ObjectInputFilter (JEP 290). Any Serializable class reachable on the embedding application's classpath can therefore be instantiated via readObject(), with readObject()/readExternal()/readResolve() callbacks invoked unconditionally. If a suitable gadget class (e.g. from commons-collections or similar) happens to be present on the classpath, this is a precondition for remote code execution. This issue has been patched in version 4.4.1.

CVSS vector

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Weaknesses

CWE-502

Public exploit & PoC references

All references

Source data: NVD (nvd.nist.gov), public domain. Exploit-DB.ai adds local AI analysis for defensive use only.

Related CVEs

Related by shared AI tags and CWE weakness class. Browse the full archive.