Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
cip-security-poc — Proof-of-concept reproducing CVE-2021-22681's hardcoded-key flaw and validating a per-device mutual TLS/CRL fix over simulated EtherNet/IP, with IEC 62443-4-2 mapping. | Kitploit
Tools/GitHubGitHub/pcrosby-1990/cip-security-poc
Vulnerability AnalysisSCADA/ICS SecurityCryptographyThreat IntelligenceAuthenticationIncident Response
GitHubpcrosby-1990/cip-security-poc

cip-security-poc

Proof-of-concept reproducing CVE-2021-22681's hardcoded-key flaw and validating a per-device mutual TLS/CRL fix over simulated EtherNet/IP, with IEC 62443-4-2 mapping.

View Repository
191 month agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

cip-security-poc — proving the fix principle behind CVE-2021-22681 (not just its flaw)

Six runnable scripts — real EtherNet/IP protocol traffic (Test 1), real TLS/PKI mechanics (Tests 3–6) — zero Rockwell software or licensing anywhere in the chain. Built to test a claim before writing it up, not to argue for it on faith.

Provenance: built 2026-07-31, alongside a parallel investigation into the Braham, MN WWTF — one of the four utilities publicly disclosed in the coordinated Minnesota water-sector incident of July 26–27, 2026. Context for that incident lives in CISA advisory AA26-097A (joint FBI/CISA/NSA/EPA/DOE/USCYBERCOM/Treasury; issued 2026-04-07, expanded 2026-07-22), which covers the ongoing IRGC-affiliated CyberAv3ngers campaign. Attribution caveat, held precisely: no agency has formally attributed the Minnesota incident specifically to that group — only the broader ongoing campaign is. This folder is the technical-fix side, kept separate from the incident investigation on purpose.

Vendor status (updated 2026-08-03)

Rockwell PSIRT ([email protected]) and RA Secure Mail ([email protected]) were contacted 2026-07-31, before this repository and writeup went live (~30 minutes before, by file timestamps). Rockwell's security architecture team reviewed the repository and replied 2026-08-03. Quoted directly, not paraphrased into a stronger claim than they made:

Rockwell Automation does not endorse or validate your interpretation, your IEC 62443-4-2 mapping, or any conclusions drawn from the proof of concept. Please do not represent the work as reviewed, approved, or endorsed by Rockwell Automation... the scripts demonstrate general cryptographic and authentication principles rather than anything specific to CIP Security or to CVE-2021-22681.

This work has not been reviewed, approved, or endorsed by Rockwell Automation, full stop. Their technical characterization — general principles, not CIP-Security-specific — is the same distinction "The hard boundary" table below already draws about this repo's own claims; their review confirms it independently rather than contesting it. For utilities on hardware that can't reach CIP Security, Rockwell pointed to their own Converged Plantwide Ethernet (CPwE) Design and Implementation Guide (cited in PHASED_ROLLOUT.md Phase 1) — the existing vendor resource this project tries to route people toward rather than duplicate.

This shape isn't Rockwell-specific

Test 1's finding — no authentication in the protocol's default state — is not unique to EtherNet/IP. Modbus TCP, still one of the most widely deployed protocols in water/wastewater control systems, has no authentication concept in the protocol specification at all; it dates to 1979 serial communications and was never designed with security in mind. CISA has repeatedly named exactly this failure across ICS advisories (e.g. Mitsubishi Electric's MELSEC iQ-F series: "MODBUS/TCP lacks proper authentication," allowing unauthorized read/write/halt). The Modbus Organization's own answer, Modbus/TCP Security, is TLS encapsulation with X.509 certificates — structurally the same fix category Test 3 demonstrates here, standardized at the protocol-organization level instead of one vendor's. DNP3 has an optional Secure Authentication extension (SAv5, standardized 2012); independent analysis and implementer accounts both describe it as rarely configured in practice, citing interoperability gaps between OT manufacturers and genuine protocol complexity — leaving the same exposure Test 1 demonstrates for EtherNet/IP.

The architectural point, stated precisely so it isn't oversold: Test 3's fix — mutual TLS, per-device identity bound in the certificate (not just CA validity), revocation via CRL — operates at the transport layer, not the ICS application protocol. The principle is equally applicable underneath Modbus, DNP3, or a proprietary protocol; what changes is the wrapper, not the shape of the fix. This repo has not built or run a Modbus- or DNP3-specific PoC — this is an architectural generalization from public documentation, held to the same "demonstrated vs. sourced" tiering as everything else here, not a new tested claim.

Sources: CISA ICS advisories on Modbus/TCP authentication gaps — Industrial Cyber · Modbus/TCP Security overview — Veridify · DNP3 SAv5/SAv6 adoption challenges — Step Function I/O

Three different failures — keep them distinct

A disclosure packet lives or dies on not smearing these together, because each has a different fix:

  • No / absent authentication (Test 1) — a device exposed with no credential layer at all. The broad baseline the CyberAv3ngers campaign leaned on (many victims were reachable with absent or default creds).
  • One hardcoded / shared key across a fleet (the specific shape of CVE-2021-22681, modeled by Test 2) — extract the one key once, forge fleet-wide. This is the actual CVE.
  • Default credentials — factory creds never changed. Not modeled here; named so it isn't conflated with the two above.

The fix demonstrated here — per-device identity binding (Test 3) — addresses the fleet-key failure.

The hard boundary (read this first)

ClaimTierWhy
The architectural principle"a single shared secret across a fleet is compromised fleet-wide by one leak; per-device identity-bound authentication closes that"PROVENdemonstrated with real running code including the negative control that proves the check is necessary, not merely that it fires: on a strict endpoint Device B's genuinely CA-valid cert is rejected on identity (Test 3 · case 3), but on a CA-validity-only endpoint the same cert is accepted (case 4 — the control) → "validly CA-signed alone == fleet-wide access == Test 2 in TLS clothing." The binding also holds in reverse: a rogue server presenting a valid fleet cert is rejected by the client (case 5). Test 1 separately shows the broader no-auth baseline.
Rockwell's specific CIP Security implementation behaves identically"enabling CIP Security on real Rockwell hardware remediates CVE-2021-22681 exactly this way"LEAD, sourced not verifiedthis is Rockwell's own advisory (PN1550) language — "When properly deployed, CIP Security remediates this vulnerability... does not make use of any hardcoded keys" — not something we've independently confirmed against real Logix hardware. We tested the principle their advisory describes, not their exact wire-level implementation.

Do not conflate the two rows. The principle is proven. The vendor's specific implementation of it is credible (it's their own stated design intent) but untested by us against real equipment.

Tools

test1_baseline_vulnerable.py — the no-auth baseline, live

Spins up a real EtherNet/IP PLC simulator (cpppo, emulating an Allen-Bradley ControlLogix) and reads + writes a control tag with zero credentials. (Scope: this is the broad no-authentication baseline the campaign leaned on — not the specific hardcoded-key mechanism of CVE-2021-22681. Kept distinct on purpose; see "Three different failures" above.)

python test1_baseline_vulnerable.py
Download Tool