Descripción
La base de datos NOsql Object (NO2, también conocida como Nitrite) es un almacén de documentos NoSQL embebido de código abierto. Antes de la versión 4.4.1, cuando Nitrite abre un archivo de base de datos, MVStoreUtils.openOrCreate() verifica automáticamente si existe un almacén en formato heredado v1 y, al detectarlo (o al encontrar un error de compatibilidad durante la apertura), activa una ruta de migración automática. Esta ruta deserializa los valores almacenados mediante NitriteDataType.deserialize(byte[]), que pasa los bytes sin procesar directamente a java.io.ObjectInputStream.readObject() a través de una subclase personalizada NitriteObjectInputStream. Dicha subclase solo sobrescribe readClassDescriptor() —únicamente para reasignar algunos nombres de clases heredadas conocidas a sus equivalentes actuales— y no implementa ninguna lista de clases permitidas, lista de bloqueo ni ObjectInputFilter (JEP 290). Por lo tanto, cualquier clase Serializable accesible en el classpath de la aplicación que lo integra puede instanciarse mediante readObject(), invocándose incondicionalmente las devoluciones de llamada readObject()/readExternal()/readResolve(). Si una clase gadget adecuada (por ejemplo, de commons-collections o similar) está presente en el classpath, esto constituye una condición previa para la ejecución remota de código (RCE). Este problema se corrigió en la versión 4.4.1.
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- nitrite-java Afectadas: < 4.4.1
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en github.comgithub.com/nitrite/nitrite-java/security/advisories/GHSA-9297-g93h-86…
- Referencia en github.comgithub.com/nitrite/nitrite-java/releases/tag/v4.4.1
Ver el texto original en inglés (CVE.org)
Nitrite: Unfiltered Java Deserialization in Legacy v1 Database Migration Path
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.