Description
Signed to Unsigned Conversion Error and Out-of-bounds Write vulnerability in Erlang OTP erts allows an attacker who can supply a crafted Erlang external term format (ETF) binary to binary_to_term/1 to corrupt the BEAM heap pointer and crash the virtual machine.

When decoding a LARGE_TUPLE_EXT term, the validation pass decoded_size() in erts/emulator/beam/external.c reads the 32-bit arity field as unsigned (get_uint32()), while the decode pass dec_term() reads the same field as a signed 32-bit integer (get_int32()) into an int. An arity wire value of 0x80000000 passes validation as 2147483648 but decodes as -2147483648, so the subsequent hp += n moves the heap allocation pointer backward. Neither pass enforces the runtime tuple-arity limit MAX_ARITYVAL. The result is an out-of-bounds heap write; in practice the VM detects an impossible heap size and aborts, denying service. The required padding is large when uncompressed but the compressed-ETF envelope shrinks it to a small payload on the wire.

This issue affects OTP from OTP 25.0 before OTP 29.0.4, OTP 28.5.0.4 and OTP 27.3.4.15, corresponding to erts from 13.0 before 17.0.4, 16.4.0.4 and 15.2.7.11.
Published: 2026-07-27
Score: 5.1 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A signed to unsigned conversion mismatch in Erlang OTP’s erts external term format decoder allows an attacker who can supply a crafted ETF binary to the binary_to_term/1 function to corrupt a BEAM heap pointer. The decoder validates the arity field as an unsigned 32‑bit integer during one pass and as a signed integer during decoding, permitting a negative arity that moves the heap allocation pointer backward and triggers an out‑of‑bounds heap write. The VM detects the inconsistency and aborts, resulting in a denial of service. No escalation of privileges or data exfiltration is possible; the impact is limited to service interruption of the vulnerable Erlang node.

Affected Systems

The flaw affects the Erlang:OTP distribution. Systems running OTP versions 25.0 up through 27.3.4.15, 28.5.0.4, and any OTP build less than 29.0.4 are vulnerable. Corresponding erts releases from 13.0 up to 17.0.4, 16.4.0.4, and 15.2.7.11 are affected.

Risk and Exploitability

The CVSS score of 5.1 indicates medium severity. The EPSS score is <1%, and the vulnerability is not listed in the CISA KEV catalog. An attacker only needs to transmit a malicious ETF payload to a vulnerable process; any Erlang node that processes untrusted ETF data can be targeted remotely for a denial of service attack. No privileged access is required, but the vulnerability can be exploited from outside the host if the process accepts external terms.

Generated by OpenCVE AI on August 3, 2026 at 17:16 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade to a fixed Erlang OTP release, such as 29.0.4 or later, which contains the corrected external term format decoder logic.
  • Limit the use of binary_to_term/1 to inputs from authenticated, internal nodes, ensuring that only trusted processes send external terms to vulnerable services.
  • Monitor Erlang nodes for unexpected aborts or crashes that may indicate exploitation attempts, and investigate any abnormal termination promptly.

Generated by OpenCVE AI on August 3, 2026 at 17:16 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 30 Jul 2026 00:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}

threat_severity

Important


Tue, 28 Jul 2026 16:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Mon, 27 Jul 2026 20:30:00 +0000

Type Values Removed Values Added
First Time appeared Erlang erlang/otp
Vendors & Products Erlang erlang/otp

Mon, 27 Jul 2026 16:15:00 +0000

Type Values Removed Values Added
Description Signed to Unsigned Conversion Error and Out-of-bounds Write vulnerability in Erlang OTP erts allows an attacker who can supply a crafted Erlang external term format (ETF) binary to binary_to_term/1 to corrupt the BEAM heap pointer and crash the virtual machine. When decoding a LARGE_TUPLE_EXT term, the validation pass decoded_size() in erts/emulator/beam/external.c reads the 32-bit arity field as unsigned (get_uint32()), while the decode pass dec_term() reads the same field as a signed 32-bit integer (get_int32()) into an int. An arity wire value of 0x80000000 passes validation as 2147483648 but decodes as -2147483648, so the subsequent hp += n moves the heap allocation pointer backward. Neither pass enforces the runtime tuple-arity limit MAX_ARITYVAL. The result is an out-of-bounds heap write; in practice the VM detects an impossible heap size and aborts, denying service. The required padding is large when uncompressed but the compressed-ETF envelope shrinks it to a small payload on the wire. This issue affects OTP from OTP 25.0 before 27.3.4.15, 28.5.0.4, and 29.0.4 corresponding to erts from 13.0 before 15.2.7.11, 16.4.0.4, and 17.0.4. Signed to Unsigned Conversion Error and Out-of-bounds Write vulnerability in Erlang OTP erts allows an attacker who can supply a crafted Erlang external term format (ETF) binary to binary_to_term/1 to corrupt the BEAM heap pointer and crash the virtual machine. When decoding a LARGE_TUPLE_EXT term, the validation pass decoded_size() in erts/emulator/beam/external.c reads the 32-bit arity field as unsigned (get_uint32()), while the decode pass dec_term() reads the same field as a signed 32-bit integer (get_int32()) into an int. An arity wire value of 0x80000000 passes validation as 2147483648 but decodes as -2147483648, so the subsequent hp += n moves the heap allocation pointer backward. Neither pass enforces the runtime tuple-arity limit MAX_ARITYVAL. The result is an out-of-bounds heap write; in practice the VM detects an impossible heap size and aborts, denying service. The required padding is large when uncompressed but the compressed-ETF envelope shrinks it to a small payload on the wire. This issue affects OTP from OTP 25.0 before OTP 29.0.4, OTP 28.5.0.4 and OTP 27.3.4.15, corresponding to erts from 13.0 before 17.0.4, 16.4.0.4 and 15.2.7.11.

Mon, 27 Jul 2026 15:30:00 +0000

Type Values Removed Values Added
Description Signed to Unsigned Conversion Error and Out-of-bounds Write vulnerability in Erlang OTP erts allows an attacker who can supply a crafted Erlang external term format (ETF) binary to binary_to_term/1 to corrupt the BEAM heap pointer and crash the virtual machine. When decoding a LARGE_TUPLE_EXT term, the validation pass decoded_size() in erts/emulator/beam/external.c reads the 32-bit arity field as unsigned (get_uint32()), while the decode pass dec_term() reads the same field as a signed 32-bit integer (get_int32()) into an int. An arity wire value of 0x80000000 passes validation as 2147483648 but decodes as -2147483648, so the subsequent hp += n moves the heap allocation pointer backward. Neither pass enforces the runtime tuple-arity limit MAX_ARITYVAL. The result is an out-of-bounds heap write; in practice the VM detects an impossible heap size and aborts, denying service. The required padding is large when uncompressed but the compressed-ETF envelope shrinks it to a small payload on the wire. This issue affects OTP from OTP 25.0 before 27.3.4.15, 28.5.0.4, and 29.0.4 corresponding to erts from 13.0 before 15.2.7.11, 16.4.0.4, and 17.0.4.
Title Heap pointer corruption via signed/unsigned mismatch in LARGE_TUPLE_EXT decoding in erts external term format decoder
First Time appeared Erlang
Erlang erlang\/otp
Weaknesses CWE-195
CWE-787
CPEs cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:*
Vendors & Products Erlang
Erlang erlang\/otp
References
Metrics cvssV4_0

{'score': 5.1, 'vector': 'CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N'}


Subscriptions

Erlang Erlang/otp Erlang\/otp Erts
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-07-28T09:55:26.434Z

Reserved: 2026-06-17T10:44:34.365Z

Link: CVE-2026-55737

cve-icon Vulnrichment

Updated: 2026-07-27T18:34:50.572Z

cve-icon NVD

Status : Analyzed

Published: 2026-07-27T16:17:48.847

Modified: 2026-08-10T20:24:25.123

Link: CVE-2026-55737

cve-icon Redhat

Severity : Important

Publid Date: 2026-07-27T15:13:54Z

Links: CVE-2026-55737 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-03T17:30:17Z

Weaknesses
  • CWE-195

    Signed to Unsigned Conversion Error

  • CWE-787

    Out-of-bounds Write