CVE-2025-46613

7.5 HIGH

📋 TL;DR

OpenPLC 3 has a memory corruption vulnerability in server.cpp where threads may access handleConnections arguments after the parent stack frame becomes unavailable. This could allow attackers to crash the PLC server or potentially execute arbitrary code. Anyone running OpenPLC 3 versions up to commit 64f9c11 is affected.

💻 Affected Systems

Products:
  • OpenPLC_v3
Versions: All versions up to commit 64f9c11
Operating Systems: All platforms running OpenPLC
Default Config Vulnerable: ⚠️ Yes
Notes: All OpenPLC 3 installations are vulnerable regardless of configuration.

⚠️ Manual Verification Required

This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.

Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).

🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.

Recommended Actions:
  1. Review the CVE details at NVD
  2. Check vendor security advisories for your specific version
  3. Test if the vulnerability is exploitable in your environment
  4. Consider updating to the latest version as a precaution

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, manipulation of industrial processes, or denial of service affecting physical operations.

🟠

Likely Case

Server crash causing PLC service disruption and temporary loss of industrial control functionality.

🟢

If Mitigated

Limited impact with proper network segmentation and access controls preventing exploitation attempts.

🌐 Internet-Facing: HIGH - Directly exposed OpenPLC instances are vulnerable to remote exploitation without authentication.
🏢 Internal Only: MEDIUM - Internal attackers or compromised internal systems could exploit this vulnerability.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ⚠️ Yes
Complexity: MEDIUM

Exploitation requires understanding of memory corruption techniques but no authentication is needed.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Versions after commit 64f9c11

Vendor Advisory: https://github.com/thiagoralves/OpenPLC_v3/issues/273

Restart Required: Yes

Instructions:

1. Update OpenPLC to latest version after commit 64f9c11. 2. Pull latest changes from GitHub repository. 3. Recompile and restart OpenPLC service.

🔧 Temporary Workarounds

Network Segmentation

all

Isolate OpenPLC systems from untrusted networks

Access Control Lists

linux

Restrict network access to OpenPLC ports

iptables -A INPUT -p tcp --dport 502 -s trusted_network -j ACCEPT
iptables -A INPUT -p tcp --dport 502 -j DROP

🧯 If You Can't Patch

  • Implement strict network segmentation to isolate OpenPLC from untrusted networks.
  • Deploy intrusion detection systems to monitor for exploitation attempts.

🔍 How to Verify

Check if Vulnerable:

Check OpenPLC version or commit hash. If using commit 64f9c11 or earlier, system is vulnerable.

Check Version:

Check OpenPLC version in web interface or examine git commit history in installation directory.

Verify Fix Applied:

Verify OpenPLC is running version after commit 64f9c11 and check that the memory corruption fix is applied in server.cpp.

📡 Detection & Monitoring

Log Indicators:

  • Unexpected OpenPLC crashes or restarts
  • Memory access violation errors in system logs

Network Indicators:

  • Unusual traffic patterns to OpenPLC port 502
  • Connection attempts from unexpected sources

SIEM Query:

source="openplc.log" AND ("crash" OR "segmentation fault" OR "memory corruption")

🔗 References

📤 Share & Export