CVE-2026-54500

Oj (Optimized JSON) is a JSON parser and Object marshaller packaged as a Ruby gem. In versions prior to 3.17.3, Oj.load in :object mode reads uninitialized stack memory (and, for long keys, reads out of bounds) when parsing a JSON object whose key is 254 bytes or longer. The interned bytes can surface to the caller, disclosing process stack memory. In ext/oj/intern.c, form_attr() handles the long-key path by allocating a heap buffer, `b`, populating it with the attribute name, and then freeing it — but it passed the uninitialized stack buffer buf (not b) to rb_intern3(). rb_intern3 therefore reads len + 1 bytes of uninitialized stack memory. When the key length is >= 256, it also reads out of bounds past the 256-byte buf. The resulting bytes are interned and can reach the caller via the produced Symbol or via the EncodingError message raised on invalid UTF-8, leaking process stack contents. This issue has been fixed in version 3.17.3.
Configurations

No configuration.

History

25 Oct 2026, 17:10

Type Values Removed Values Added
Summary
  • (es) Oj (Optimized JSON) es un analizador JSON y un serializador de objetos empaquetado como una gema de Ruby. En versiones anteriores a la 3.17.3, Oj.load en modo :object lee memoria de pila no inicializada (y, para claves largas, lee fuera de los límites) al analizar un objeto JSON cuya clave tiene 254 bytes o más. Los bytes internados pueden llegar al llamador, revelando la memoria de pila del proceso. En ext/oj/intern.c, form_attr() maneja la ruta de clave larga asignando un búfer en el heap, ’b’, rellenándolo con el nombre del atributo y luego liberándolo - pero pasó el búfer de pila no inicializado buf (no ’b’) a rb_intern3(). rb_intern3, por lo tanto, lee len + 1 bytes de memoria de pila no inicializada. Cuando la longitud de la clave es >= 256, también lee fuera de los límites más allá del búfer buf de 256 bytes. Los bytes resultantes son internados y pueden llegar al llamador a través del Símbolo producido o a través del mensaje de EncodingError generado por UTF-8 no válido, filtrando el contenido de la pila del proceso. Este problema ha sido solucionado en la versión 3.17.3.

Information

Published : 2026-07-01 00:16

Updated : 2026-10-25 17:10


NVD link : CVE-2026-54500

Mitre link : CVE-2026-54500

CVE.ORG link : CVE-2026-54500


JSON object : View

Products Affected

No product.

CWE
CWE-125

Out-of-bounds Read

CWE-908

Use of Uninitialized Resource