CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

ics-modbus

Modbus TCP attack — port 502 enumeration, coil/holding-register read/write without auth, function-code abuse (FC8 diagnostic, FC43 read-device-id), Modbus-over-Serial via TCP gateway, write-with-no-confirm DoS, value tampering against PLCs.

Quality

81%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Critical

Do not install without reviewing

SKILL.md
Quality
Evals
Security

Quality

Content

80%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

An excellent, dense operational reference with executable commands across discovery, enumeration, identification, and write attacks, plus a commendable safety/OPSEC section. Its main gap is the absence of a validation feedback loop for its destructive and batch write operations — no read-back confirmation or restore procedure.

Suggestions

Add an explicit pre-write validation step ("record the current coil/register value before writing") and a post-write verification step ("re-read to confirm the change; restore the original value when done"), which would lift workflow_clarity past the destructive-operation cap.

Make the write-attack snippets standalone (reconnect the client in the write section) or state that `c` is the client from the read section.

Pin or future-proof the FC43 example against pymodbus API churn (version-sensitive import path and `c.execute` call).

DimensionReasoningScore

Conciseness

Lean and efficient throughout: one-line threat model ("Modbus has no authentication and no transport encryption. Port 502 → full PLC control if reachable."), tight code blocks with only load-bearing comments ("coil 10 might be: motor start, valve open, breaker close"), a findings table instead of prose, and no explanation of concepts Claude already knows. Every section earns its tokens.

5 / 5

Actionability

Mostly executable and concrete: copy-paste nmap commands, a complete pymodbus read script, mbtget invocations, and a raw-socket FC8 packet (mbap + struct-packed PDU). Minor gaps: the write-attack snippets use `c.write_coil(...)` without re-showing client setup, and the FC43 example relies on a version-sensitive pymodbus import/API (`pymodbus.mei_message.ReadDeviceInformationRequest`, `c.execute`) that may not match current pymodbus 3.x.

4 / 5

Workflow Clarity

Sections imply a sensible sequence (Discover → Read → Identify → Write) and the OPSEC section does require written authorization before FC5/6/15/16, but this is a destructive/batch skill with no verification checkpoint: no "read the current value first", no "re-read to confirm the write took effect", and no restore-original-value step. Per the rubric, a destructive/batch skill missing validation steps is capped at 3.

3 / 5

Progressive Disclosure

A single-file, one-page attack reference with well-organized sections and no bundle files to navigate — nothing here belongs in a separate file at this size. The References section points one level deep to clearly-labeled external resources (Langill talks, pymodbus docs, nmap NSE, IEC 62443), not to nested or missing bundle paths.

5 / 5

Total

17

/

20

Passed

Description

75%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A highly specific, comprehensive capability statement covering the full Modbus attack surface with concrete function codes and primitives. Its one structural weakness is the absence of a "Use when..." trigger clause in the description itself, leaving the "when to use this" answer to the metadata when_to_use field.

Suggestions

Append an explicit trigger clause to the description, e.g. "Use when testing Modbus TCP devices, port 502, PLCs, SCADA/ICS environments, or serial-to-TCP gateways."

Fold common synonyms users would say into the description ("SCADA", "ICS", "pymodbus") rather than relying solely on the metadata when_to_use field.

Keep the existing enumeration of attack primitives — it is the description's strongest asset.

DimensionReasoningScore

Specificity

Lists multiple concrete, specific actions — "port 502 enumeration", "coil/holding-register read/write without auth", "function-code abuse (FC8 diagnostic, FC43 read-device-id)", "Modbus-over-Serial via TCP gateway", "write-with-no-confirm DoS", "value tampering against PLCs" — which is comprehensive coverage of the domain's attack surface.

5 / 5

Completeness

The "what" is explicit and thorough (enumeration, read/write, function-code abuse, DoS, tampering), but the description field contains no "Use when..." clause or equivalent trigger guidance — per the rubric this caps completeness at 3. The separate metadata.when_to_use field mitigates this only partially since it is not part of the description.

3 / 5

Trigger Term Quality

Good natural-term coverage: "Modbus TCP", "port 502", "coil", "holding-register", "PLCs" are phrases a user in this domain would naturally say. Missing a few common synonyms/variants in the description itself (e.g., "SCADA", "ICS", "pymodbus"), though the frontmatter metadata's when_to_use field adds "plc scada ics ot".

4 / 5

Distinctiveness Conflict Risk

Clear niche — Modbus TCP attacks against PLCs — with distinct triggers ("port 502", "FC8", "FC43", "coil") that no other plausible skill would claim; minimal conflict risk.

5 / 5

Total

17

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

Total

15

/

16

Passed

Repository

PurpleAILAB/Decepticon

Path

packages/decepticon/decepticon/skills/standard/exploit/ics-ot/modbus/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.