CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

ics-dnp3

DNP3 attack — TCP/20000 (or 19999 serial-over-TCP) outstation enumeration, binary input / analog input poll, control relay output block (CROB) actuation, unsolicited reporting abuse, DNP3 Secure Authentication (DNP3-SA) downgrade, vendor-specific objects.

Quality

73%

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

Fix and improve this skill with Tessl

tessl review fix ./packages/decepticon/decepticon/skills/standard/exploit/ics-ot/dnp3/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

61%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.

A well-organized, appropriately lean skill body whose protocol-specific knowledge (point classes, CROB codes, vendor index conventions, OPSEC concerns) genuinely adds value beyond Claude's baseline. The main gaps are non-executable opendnp3 examples with elided setup, a comment-only DNP3-SA downgrade section, and missing post-control verification steps for inherently destructive operations.

Suggestions

Make the opendnp3 examples runnable: include the minimal master-stack setup (or an explicit pointer to a working harness) so the read/CROB/AOB snippets are copy-paste executable, and give the DNP3-SA downgrade section actual probe code instead of comments only.

Add a post-operation verification step for control actions — e.g., re-scan class 0 / read the binary input point after SelectAndOperate to confirm the state change — creating a validate-feedback loop for destructive operations.

Move the vendor point-map table and external references into a reference file (e.g., references/point-maps.md) referenced one level deep from the body.

DimensionReasoningScore

Conciseness

The body is lean and section-driven, and its explanatory asides are protocol-specific knowledge Claude would not already have (Class 0/1/2/3 semantics, CROB operation codes 0x81/0x41/0x01, vendor index conventions) rather than padding. Minor trims are possible ('Quick test:', the multi-library name-drop 'pyOPENDNP3 / pydnp3 / dnp3-toolkit'), placing it at 'efficient with minor over-explanation' rather than the every-token-earns-its-place level.

4 / 5

Actionability

The nmap command and raw-socket probe are concrete, but the opendnp3 blocks elide essential setup ('# ... master init + asyncrun ...') making them non-executable as written, and the DNP3-SA downgrade section is comment-only with no runnable code. This matches the 'pseudocode instead of executable code; missing key details' anchor — not 4, because a significant fraction of the guidance cannot be copy-pasted or run.

3 / 5

Workflow Clarity

An implicit discover → read → control sequence exists with some pre-action checkpoints ('Always confirm point map (POINT.CSV or DNP3 device profile) before any write', simulator-first testing), but this is a destructive-operation skill with no post-operation verification or feedback loop (e.g., read-back of point state after SelectAndOperate). Per the rubric's cap for destructive workflows lacking validation steps, workflow clarity cannot exceed 3.

3 / 5

Progressive Disclosure

The body is well-organized into clearly signaled sections (Discover, Read attacks, Control attacks, Unsolicited reporting abuse, DNP3-SA downgrade, Tooling, OPSEC + safety) with no nested references and no bundle files, so everything is one level deep. It falls short of 5 only because ~120 lines of mixed material (vendor point-map table, SA-downgrade detail, external references) sits inline where a reference file would help; there is no explicit navigation to separate materials.

4 / 5

Total

14

/

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, well-scoped description that comprehensively enumerates concrete DNP3 attack capabilities with protocol-level detail. Its main weakness is the missing 'Use when...' trigger clause and the absence of natural user-facing synonyms (SCADA, RTU, substation) that would improve discovery.

Suggestions

Append an explicit trigger clause such as 'Use when attacking or assessing DNP3/SCADA outstations, RTUs, or substations over TCP/20000 or serial-over-TCP.'

Include natural synonyms users would say — SCADA, RTU, substation, power grid — in the description itself rather than only in metadata.when_to_use.

Keep the current action enumeration; it is comprehensive without padding.

DimensionReasoningScore

Specificity

The description lists multiple concrete, protocol-specific actions — "outstation enumeration", "binary input / analog input poll", "control relay output block (CROB) actuation", "unsolicited reporting abuse", "DNP3 Secure Authentication (DNP3-SA) downgrade" — with ports (TCP/20000, 19999) and object-level detail, matching the comprehensive-coverage anchor rather than the minor-gaps anchor at 4.

5 / 5

Completeness

The 'what' is explicit and detailed (enumeration, polling, CROB actuation, SA downgrade), but there is no 'Use when...' clause or equivalent trigger guidance in the description; 'when' is only weakly implied by the word 'attack'. Per the guideline, a missing explicit trigger clause caps completeness at 3 — not 4 because the 'when' is absent rather than merely imprecise.

3 / 5

Trigger Term Quality

Good keyword coverage including DNP3, outstation, CROB, analog/binary input, unsolicited, and DNP3-SA, but common natural variations a user would actually say — SCADA, RTU, substation, power grid — are missing from the description itself. This sits between 'some relevant keywords' (3) and 'comprehensive including synonyms' (5), closer to the former's completeness but with solid coverage, so 4.

4 / 5

Distinctiveness Conflict Risk

A clear niche (DNP3 protocol attacks) with highly distinct protocol-specific triggers (CROB, DNP3-SA, outstation, TCP/20000) that no other plausible skill would share, matching the minimal-conflict anchor. Not 4 because there is no meaningful overlap with related skills; the terms are unambiguous.

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/dnp3/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.