The industrial equivalent of leaving a factory-reset button on the outside of the building, wired to the assembly line
The Rockwell Automation 1715-AENTR is a redundant EtherNet/IP adapter that fronts a bank of I/O modules on ControlLogix/GuardLogix systems — the thing that actually reads sensors and drives valves, motors, and safety interlocks. Firmware versions 3.003 and earlier ship with a network-reachable debug port that requires no authentication and exposes an intrusive CLI. From that CLI an unauthenticated attacker on the same L2/L3 segment as the device can read or delete files, kill running tasks, modify device memory, and directly change I/O states — meaning they can lie to the controller about a tank level or force an output that opens a breaker.
There is no published vendor CVSS in the assessment intake, but this is a textbook CWE-306 (Missing Authentication for Critical Function) on a component whose entire job is driving physical process I/O. Any severity below CRITICAL misrepresents the blast radius. The only reason the exposed-population count looks small is that these devices should never be internet-facing — but inside an OT VLAN, they typically are wide-open to anything that shares the cell/area zone. Vendor severity, once published, will match reality; if anything, CVSS understates the *safety* dimension because it has no metric for 'operator opens a relief valve remotely'.
5 steps from start to impact.
Reach the OT cell/area zone
- L3 reachability to the adapter's IP
- No ACL/firewall isolating the debug port TCP service
- Purdue-segmented networks with a properly configured IDMZ block IT-side attackers
- Cell/area firewalls (Rockwell Stratix, Cisco IE, Fortinet Rugged) with allow-lists usually limit non-CIP traffic
Enumerate the debug service
nmap -sV or a Metasploit auxiliary module will confirm the CLI banner. No credential stuffing, no session token, no MFA — the port answers to anyone who can TCP-connect.- Ability to send arbitrary TCP to the device
- Debug service running (default on affected firmware)
- Rockwell CIP Security (if enabled and rolled out) would tunnel/authenticate control traffic, but debug port is out-of-band and typically not covered
Invoke privileged CLI commands
- Debug port reachable from step 2
- Knowledge of the CLI command surface (reverse-engineered from firmware or leaked docs)
- None inside the device — this is the *entire point* of CWE-306
Manipulate physical I/O
- Successful CLI access
- I/O modules wired to consequential equipment (typical)
- Independent safety instrumented systems (SIS) on a separate SIL-rated bus limit the *safety* blow but not the *operational* blow
- Mechanical interlocks and PSVs are the last line of defense
Persist / propagate
- Write access to non-volatile storage on the adapter
- Backplane visibility to peer modules
- Rockwell's signed-firmware controls on newer FW blunt naive firmware swaps but do not prevent runtime memory tampering
- IT-side EDR — the adapter has no OS to run an agent on; endpoint controls are irrelevant to the device itself.
- Changing an application password on the ControlLogix controller — this vuln is on the adapter's debug port, not on the CIP application layer, and the debug service ignores controller credentials.
- Perimeter firewall / IDMZ alone — most attackers reach OT via lateral movement from a compromised engineering workstation, not from the internet; north-south controls do not stop east-west abuse.
- Assuming CVSS-BT temporal downgrade because no PoC exists — the CLI is trivially callable once reachable; absence of a public PoC today is not a control.
The supporting signals.
| In-the-wild status | No confirmed exploitation as of 2026-07-15. No public campaigns attributed. OT-targeting APTs (VOLTZITE, ELECTRUM, CHERNOVITE) are known to weaponize Rockwell/EtherNet-IP surface — assume tooling exists privately. |
|---|---|
| Proof-of-concept | No public PoC on GitHub, ExploitDB, or Metasploit as of assessment date. CLI syntax is easily reverse-engineered from firmware image; expect PoC within 30–90 days. |
| EPSS | Not yet scored (freshly disclosed 2026-07-14). Expect low initial score — EPSS underweights OT because it trains on IT telemetry. |
| KEV status | Not KEV-listed as of 2026-07-15. Historically CISA adds ICS bugs to KEV only after confirmed ITW use. |
| CVSS vector (CISA) | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — 10.0 Critical per CISA ICSA-26-195-04. Network / low complexity / no privs / no UI / scope change / full CIA impact. |
| Affected versions | 1715-AENTR EtherNet/IP Adapter firmware ≤ 3.003 |
| Fixed version | Firmware 3.011 or later from Rockwell Automation PCDC |
| Exposure data | Shodan queries for port:44818 product:"Rockwell" return several thousand internet-exposed CIP devices globally; 1715-AENTR-specific counts are in the low hundreds but represent the tip of the iceberg — the real installed base is inside OT networks and invisible to internet scanners. |
| Disclosure | 2026-07-14 via CISA advisory ICSA-26-195-04 |
| Reporter | Rockwell Automation self-reported to CISA |
Sources.
- CISA ICS Advisory ICSA-26-195-04
- CISA CSAF JSON — icsa-26-195-04
- Rockwell Automation Security Advisories portal
- Rockwell 1715-AENTR product page
- OpenCVE — 1715-AENTR EtherNet/IP Adapter CVE history
- CWE-306: Missing Authentication for Critical Function
- CISA guidance — Defense-in-Depth for ICS
- ODVA CIP Security overview
Why this verdict
- Role multiplier — OT I/O adapter, safety-adjacent: The 1715-AENTR *is* the interface between the controller and physical process equipment. A compromised chain ends in forced I/O states → process disruption or safety incident. This is on the canonical high-value-role list (OT/ICS/SCADA controllers) and pins the verdict floor at CRITICAL.
- Zero exploit friction on the device:
CWE-306means there is nothing to bypass — no auth, no session, no crypto. The only friction is *reaching* the device. - Network reachability is the sole gating factor, and inside a typical OT cell/area zone that gate is wide open. Segmentation between IT and OT reduces the exposed population but does not change what happens once an attacker is on the OT side (which is where phishing, VPN abuse, and third-party integrator compromise routinely land them).
- CISA-published CVSS confirms 10.0 (
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H). Our reassessed 9.8 nudges down only to reflect that most units are not directly internet-reachable — the technical severity is unchanged. - No compensating vendor control ships enabled by default on affected firmware; CIP Security (if deployed) does not cover the debug port.
Why not higher?
A pure 10.0 would assume drive-by internet reachability comparable to a Log4Shell-class bug. Realistic 1715-AENTR deployments sit behind at least one cell/area firewall and are not directly on the public internet, so mass-scan exploitation is unlikely. That single friction knocks the score to 9.8 but does not touch the CRITICAL bucket.
Why not lower?
Dropping to HIGH would require either (a) the affected role not being safety-adjacent, or (b) meaningful in-device friction. Neither applies: this is an I/O adapter and the vuln is missing-auth on a privileged CLI. Every enterprise operating GuardLogix / ControlLogix in energy, water/wastewater, or critical manufacturing has to treat this as a plant-safety issue, not an IT patch.
Crowdsourced verification payload.
Run this from an auditor workstation on the same OT segment as the target adapter (never from IT). Invoke as python check_1715aentr.py 10.10.20.15 where the argument is the adapter IP. Requires Python 3.8+ and outbound TCP to the target; no credentials needed. Uses only CIP List Identity (UDP/44818) to fingerprint firmware revision — it does not actually touch the vulnerable debug port.
#!/usr/bin/env python3
# noisgate verification: CVE-2026-10577 — Rockwell 1715-AENTR debug-port CWE-306
# Sends a CIP List Identity request over UDP/44818 and parses the returned
# major.minor firmware revision. Compares against fixed version 3.011.
import socket, struct, sys
FIXED_MAJOR, FIXED_MINOR = 3, 11
CIP_PORT = 44818
TIMEOUT = 3.0
def list_identity(host: str) -> bytes:
# ENIP encapsulation header: command 0x0063 (ListIdentity), length 0, session 0
pkt = struct.pack('<HHIIQI', 0x0063, 0, 0, 0, 0, 0)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(TIMEOUT)
try:
s.sendto(pkt, (host, CIP_PORT))
data, _ = s.recvfrom(4096)
return data
finally:
s.close()
def parse_revision(pdu: bytes):
# Very rough parse: locate the CIP Identity item (type 0x000C) then jump to
# the Revision field (Major=1B, Minor=1B) which sits at a known offset.
idx = pdu.find(b'\x0c\x00') # item type 0x000C little-endian
if idx < 0 or idx + 40 > len(pdu):
return None
# ProductName length byte lives at offset+32 from item start; revision at +40
major = pdu[idx + 40]
minor = pdu[idx + 41]
return major, minor
def main():
if len(sys.argv) != 2:
print('usage: check_1715aentr.py <adapter-ip>', file=sys.stderr)
sys.exit(2)
host = sys.argv[1]
try:
pdu = list_identity(host)
except socket.timeout:
print('UNKNOWN: no CIP List Identity response')
sys.exit(3)
rev = parse_revision(pdu)
if not rev:
print('UNKNOWN: could not parse CIP identity payload')
sys.exit(3)
major, minor = rev
print(f'device firmware: {major}.{minor:03d}')
if (major, minor) < (FIXED_MAJOR, FIXED_MINOR):
print('VULNERABLE')
sys.exit(1)
else:
print('PATCHED')
sys.exit(0)
if __name__ == '__main__':
main()