BACnet Stack is a BACnet open source protocol stack C library for embedded systems. Prior to 1.4.3, an off-by-one out-of-bounds read vulnerability in bacnet-stack's ReadPropertyMultiple service decoder allows unauthenticated remote attackers to read one byte past an allocated buffer boundary by sending a crafted RPM request with a truncated object identifier. The vulnerability is in rpm_decode_object_id(), which checks apdu_len < 5 but then accesses all 6 byte positions (indices 0-5) — consuming 1 byte for the context tag, 4 bytes for the object ID, then reading apdu[5] for the opening tag check. A 5-byte input passes the length check but causes a 1-byte OOB read, 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.
CVE-2026-41502 is a critical out-of-bounds read vulnerability in BACnet Stack versions prior to 1.4.3 affecting the ReadPropertyMultiple service decoder. Unauthenticated remote attackers can trigger a 1-byte buffer over-read by sending crafted RPM requests with truncated object identifiers, causing denial of service on embedded BACnet devices. The vulnerability is enabled by default and exploits are publicly available, making immediate patching essential for Saudi critical infrastructure.
IMMEDIATE ACTIONS:
1. Inventory all BACnet Stack deployments across your organization, particularly in SCADA/ICS environments
2. Identify systems running BACnet Stack versions < 1.4.3 and RC versions of 1.5.0
3. Assess network exposure — determine if BACnet devices are accessible from untrusted networks
PATCHING GUIDANCE:
1. Upgrade BACnet Stack to version 1.4.3 or later immediately
2. For systems unable to patch immediately, apply compensating controls (see below)
3. Prioritize patching in this order: energy/SCADA systems → water utilities → healthcare → government facilities
COMPENSATING CONTROLS (if patching delayed):
1. Disable ReadPropertyMultiple service if not required: set BACNET_USE_CONFIRMED_SERVICE_HANDLER to 0 in configuration
2. Implement network segmentation — isolate BACnet devices on dedicated VLANs with strict access controls
3. Deploy firewall rules to restrict BACnet traffic (port 47808/UDP) to authorized sources only
4. Implement rate limiting on BACnet service requests to mitigate DoS attempts
5. Monitor for abnormal BACnet traffic patterns and truncated RPM requests
DETECTION RULES:
1. Monitor for BACnet RPM requests with payload length < 5 bytes followed by device crashes/restarts
2. Alert on repeated failed BACnet service requests from external sources
3. Log all ReadPropertyMultiple service invocations and correlate with system stability events
4. IDS/IPS signature: detect BACnet APDU with context tag 0x0E (RPM) and truncated object identifier fields
5. Implement SIEM correlation: BACnet errors + system restarts + network anomalies
الإجراءات الفورية:
1. قم بحصر جميع نشرات BACnet Stack عبر مؤسستك، خاصة في بيئات SCADA/ICS
2. حدد الأنظمة التي تعمل بإصدارات BACnet Stack < 1.4.3 وإصدارات RC من 1.5.0
3. قيّم التعرض للشبكة — حدد ما إذا كانت أجهزة BACnet يمكن الوصول إليها من شبكات غير موثوقة
إرشادات التصحيح:
1. قم بترقية BACnet Stack إلى الإصدار 1.4.3 أو أحدث على الفور
2. بالنسبة للأنظمة التي لا يمكن تصحيحها على الفور، طبق الضوابط البديلة
3. أولويات التصحيح: أنظمة الطاقة/SCADA → مرافق المياه → الرعاية الصحية → المرافق الحكومية
الضوابط البديلة (إذا تأخر التصحيح):
1. عطّل خدمة ReadPropertyMultiple إذا لم تكن مطلوبة: اضبط BACNET_USE_CONFIRMED_SERVICE_HANDLER على 0
2. طبق تقسيم الشبكة — عزل أجهزة BACnet على شبكات VLAN مخصصة مع ضوابط وصول صارمة
3. نشر قواعد جدار الحماية لتقييد حركة BACnet (المنفذ 47808/UDP) للمصادر المصرح بها فقط
4. طبق تحديد معدل على طلبات خدمة BACnet للتخفيف من محاولات DoS
5. راقب أنماط حركة BACnet غير الطبيعية وطلبات RPM المقطوعة
قواعد الكشف:
1. راقب طلبات BACnet RPM بطول حمولة < 5 بايتات متبوعة بأعطال/إعادة تشغيل الجهاز
2. تنبيه على طلبات خدمة BACnet الفاشلة المتكررة من مصادر خارجية
3. سجل جميع استدعاءات خدمة ReadPropertyMultiple وربطها بأحداث استقرار النظام
4. توقيع IDS/IPS: كشف BACnet APDU مع علامة السياق 0x0E (RPM) ومعرفات كائنات مقطوعة
5. تنفيذ ارتباط SIEM: أخطاء BACnet + إعادة تشغيل النظام + شذوذ الشبكة