Skip to main content
VulnerabilityPublished Updated

CVE-2026-43233: Linux kernel · netfilter: nf_conntrack_h323: fix OOB read in decode_choice()

Affects Linux kernelSource CVE Database V5

0

Not known to be exploited · CVSS 8.2 High · fixed in f0a83d0a4b7c127d32ac06d607a9214937716129 : patch Linux kernel soon.

Data as of 26 Oct 2026, 14:18 UTC

CVSS 3.1 base score
8.2High
How severe the flaw is on the 0–10 CVSS scale.
EPSS
0.4% chance of exploitation in 30 days – higher than 39% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
CISA SSVC
Exploitation
No evidence of active exploitation and no public proof of concept
Automatable
Attackers can reliably automate steps 1–4 of the kill chain
Technical impact
Limited control over the software or limited information exposure

CISA SSVC assessment, 2026-10-16.

Patch
Available – fixed in f0a83d0a4b7c127d32ac06d607a9214937716129, bcb50aa0b8f2b74a9fe5a1c7bee6f2657a288041, baed0d9ba91d4f390da12d5039128ee897253d60 +5
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 6 May 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponised: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 26 Oct 2026.

What to do

Upgrade to a fixed release listed under Affected software.

Affected software

ProductAffectedFixed in
LinuxLinuxAffected
  • ≥ ec8a8f3c31ddef0a7d9626c4b8a4baa30f3b80aa, < f0a83d0a4b7c127d32ac06d607a9214937716129
Fixed in
  • f0a83d0a4b7c127d32ac06d607a9214937716129
LinuxLinuxAffected
  • ≥ ec8a8f3c31ddef0a7d9626c4b8a4baa30f3b80aa, < bcb50aa0b8f2b74a9fe5a1c7bee6f2657a288041
Fixed in
  • bcb50aa0b8f2b74a9fe5a1c7bee6f2657a288041
LinuxLinuxAffected
  • ≥ ec8a8f3c31ddef0a7d9626c4b8a4baa30f3b80aa, < baed0d9ba91d4f390da12d5039128ee897253d60
Fixed in
  • baed0d9ba91d4f390da12d5039128ee897253d60
LinuxLinuxAffected
  • ≥ ec8a8f3c31ddef0a7d9626c4b8a4baa30f3b80aa, < 81f2fc5b0d0cf4696146f00f837596d10b92dead
Fixed in
  • 81f2fc5b0d0cf4696146f00f837596d10b92dead
LinuxLinuxAffected
  • ≥ ec8a8f3c31ddef0a7d9626c4b8a4baa30f3b80aa, < 53d32735d77ab56cc3fc7bd53a7d099418f19be1
Fixed in
  • 53d32735d77ab56cc3fc7bd53a7d099418f19be1
LinuxLinuxAffected
  • ≥ ec8a8f3c31ddef0a7d9626c4b8a4baa30f3b80aa, < 35f1943d242e1b9f0b6e91c0c93bfb293a9f8224
Fixed in
  • 35f1943d242e1b9f0b6e91c0c93bfb293a9f8224

Description

In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_conntrack_h323: fix OOB read in decode_choice() In decode_choice(), the boundary check before get_len() uses the variable `len`, which is still 0 from its initialization at the top of the function: unsigned int type, ext, len = 0; ... if (ext || (son->attr & OPEN)) { BYTE_ALIGN(bs); if (nf_h323_error_boundary(bs, len, 0)) /* len is 0 here */ return H323_ERROR_BOUND; len = get_len(bs); /* OOB read */ When the bitstream is exactly consumed (bs->cur == bs->end), the check nf_h323_error_boundary(bs, 0, 0) evaluates to (bs->cur + 0 > bs->end), which is false. The subsequent get_len() call then dereferences *bs->cur++, reading 1 byte past the end of the buffer. If that byte has bit 7 set, get_len() reads a second byte as well. This can be triggered remotely by sending a crafted Q.931 SETUP message with a User-User Information Element containing exactly 2 bytes of PER-encoded data ({0x08, 0x00}) to port 1720 through a firewall with the nf_conntrack_h323 helper active. The decoder fully consumes the PER buffer before reaching this code path, resulting in a 1-2 byte heap-buffer-overflow read confirmed by AddressSanitizer. Fix this by checking for 2 bytes (the maximum that get_len() may read) instead of the uninitialized `len`. This matches the pattern used at every other get_len() call site in the same file, where the caller checks for 2 bytes of available data before calling get_len().

References

Community reviews

Loading reviews…