CVE-2026-41503
Published: 24 April 2026
Summary
CVE-2026-41503 is a high-severity Out-of-bounds Read (CWE-125) vulnerability in Bacnetstack Bacnet Stack. Its CVSS base score is 7.5 (High).
Operationally, exploitation aligns with the MITRE ATT&CK technique Exploit Public-Facing Application (T1190); ranked at the 47.9th percentile by exploit likelihood (below the median); it is not currently listed in the CISA KEV catalog; a public proof-of-concept is referenced.
The strongest mitigations our analysis identified are NIST 800-53 SI-10 (Information Input Validation) and SI-16 (Memory Protection).
Threat & Defense at a Glance
Threat & Defense Details
Mitigating Controls (NIST 800-53 r5)AI
Directly requires timely patching and remediation of the out-of-bounds read flaw fixed in BACnet Stack version 1.4.3.
Mandates memory protection mechanisms like bounds checking to prevent out-of-bounds reads from crafted BACnet/IP packets causing crashes.
Requires validation of BACnet protocol inputs in the ReadPropertyMultiple decoder to reject malformed property lists with truncated payloads.
MITRE ATT&CK Enterprise TechniquesAI
Why these techniques?
The remote out-of-bounds read in the BACnet RPM service decoder directly enables exploitation of a public-facing network service (T1190) and facilitates application/system exploitation causing crash-based denial of service (T1499.004).
NVD Description
BACnet Stack is a BACnet open source protocol stack C library for embedded systems. Prior to 1.4.3, an out-of-bounds read vulnerability in bacnet-stack's ReadPropertyMultiple service property decoder allows unauthenticated remote attackers to read past allocated buffer boundaries by sending an…
more
RPM request with a truncated property list. The vulnerability stems from rpm_decode_object_property() calling the deprecated decode_tag_number_and_value() function at src/bacnet/rpm.c:344, which accepts no buffer length parameter and reads blindly from whatever pointer it receives. A crafted BACnet/IP packet with a 1-byte property payload containing an extended tag marker (0xF9) causes the decoder to read 1 byte past the end of the buffer, leading to crashes on embedded BACnet devices. The vulnerability exists in src/bacnet/rpm.c and affects any deployment that enables the ReadPropertyMultiple confirmed service handler (enabled by default in the reference server). This vulnerability is fixed in 1.4.3.
Deeper analysisAI
CVE-2026-41503 is an out-of-bounds read vulnerability in the BACnet Stack, an open-source C library protocol stack for embedded systems implementing the BACnet protocol. The issue affects versions prior to 1.4.3 and resides in the ReadPropertyMultiple (RPM) service property decoder at src/bacnet/rpm.c:344. Specifically, the rpm_decode_object_property() function calls the deprecated decode_tag_number_and_value() function, which lacks a buffer length parameter and reads blindly from the provided pointer. A crafted BACnet/IP packet with a 1-byte property payload containing an extended tag marker (0xF9) triggers a read one byte past the buffer end. The vulnerability impacts deployments enabling the ReadPropertyMultiple confirmed service handler, which is enabled by default in the reference server. It is rated 7.5 on CVSS 3.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) and maps to CWE-125 (Out-of-bounds Read).
Unauthenticated remote attackers can exploit this vulnerability over the network with low complexity by sending a malicious RPM request featuring a truncated property list. Successful exploitation causes the decoder to access memory beyond allocated buffer boundaries, resulting in crashes and denial-of-service on vulnerable embedded BACnet devices. No privileges, user interaction, or scope change are required, making it accessible to any network-adjacent adversary.
The GitHub security advisory (GHSA-5w2v-mwqj-pr2c) confirms the fix in BACnet Stack version 1.4.3, recommending immediate upgrades for affected deployments. Security practitioners should verify if ReadPropertyMultiple services are exposed and apply the patch, as the service is enabled by default.
Details
- CWE(s)