CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

profinet

PROFINET (L2 EtherType 0x8892 / DCP) attack playbook — DCP Identify-All broadcast enumeration, device fingerprinting, station-name and IP reassignment (breaks IO-controller mapping), flash-LED physical location, factory-reset, RT frame injection/replay for cyclic-IO spoofing. Siemens/EU fieldbus peer of S7Comm; requires same L2 broadcast domain.

Quality

77%

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/profinet/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

71%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-structured, technically deep playbook with runnable scapy code for every attack phase, explicit safety gating and evidence requirements for destructive operations. Its weaknesses are moderate: everything is monolithically inlined in SKILL.md instead of split into scripts/references files, a couple of code paths (DCP Get round-trip, Identify response parsing) are left incomplete, and safety warnings are repeated more than needed.

Suggestions

Move the DCP frame builders into a scripts/ file (e.g. scripts/dcp_frames.py) and keep SKILL.md as a phased overview with one-line invocations — this would cut the body roughly in half and fix progressive disclosure.

Complete the two unfinished code paths: a real DCP Identify-All response parser (walking DCP blocks to extract NameOfStation/IPSuite/VendorID) and an executed DCP Get round-trip with response parsing, since 'open in Wireshark' is not scripted guidance.

Consolidate the repeated authorization warnings into the single Phase 4 safety gate and reference it, trimming the duplicated disruption explanations to reduce token cost.

DimensionReasoningScore

Conciseness

The body is dense with protocol-specific detail Claude does not reliably know (DCP header layouts, service IDs, block option/suboption encodings, FrameID ranges), so most tokens earn their place. Not 5: there are minor trimmable instances — the authorization/safety warning is repeated four-plus times ('SAFETY FIRST', the Phase 4 'STOP' gate, repeated 'AUTHORIZED TESTING ONLY' comments, and the OPSEC reminder), and the opening deployment statistics ('virtually all post-2005 EU manufacturing') are background padding. Not 3: the verbosity is minor relative to the technical payload.

4 / 5

Actionability

Concrete, mostly executable scapy builders for every phase plus tcpdump/wireshark commands with exact filters. Not 5: Phase 1's response parser is left as a 'simple heuristic parse' that defers to Wireshark, and Phase 2's DCP Get is entirely commented out with no response-parsing example — the reader never sees a completed Get round-trip. Not 3: the builders are real, runnable code with correct struct layouts, and the commented-out send lines for write-class operations are an intentional, justified safety gate.

4 / 5

Workflow Clarity

Clear phased sequence (Prerequisites → Phase 1–5) with an L2-verification checkpoint ('tcpdump ... -c 20 / If frames appear: you are on the OT segment'), an explicit write-class safety gate before destructive operations, and validation guidance: ZFP two-method evidence, post-Set confirmation ('follow-up DCP Get confirming the new station name or IP'), and recording original values for restoration. Not 5: no explicit validate→fix→retry feedback loops, and Phase 1 device parsing falls back to 'open in Wireshark' rather than a scripted checkpoint. Not 3: destructive operations do have verification steps (BlockError=0x00 check plus follow-up Get), so the destructive-cap rule does not apply.

4 / 5

Progressive Disclosure

No bundle files exist (references/, scripts/, assets/ are absent) — all ~340 lines live in SKILL.md with good section headers, but content that clearly belongs in separate files is inlined: the full DCP frame builders (~150 lines of protocol code) belong in a scripts/ file, and the DCP option/suboption reference and OPSEC notes could be references/ files. This matches the anchor 'some structure but... content that should be separate is inline'. Not 4: for a skill this size, inlining everything is a real organization gap, not a minor one; not 2: headers and phase structure make it navigable.

3 / 5

Total

15

/

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 the skill's attack primitives and cleanly differentiates from sibling protocol skills. Its main weakness is the absence of an explicit 'Use when...' trigger clause, which caps completeness, and a few missing natural synonyms that would improve routing.

Suggestions

Append a trigger clause, e.g. 'Use when attacking or auditing PROFINET/DCP networks, enumerating industrial devices on an OT segment, or when the user mentions PROFINET, DCP, EtherType 0x8892, or Siemens fieldbus devices.'

Add natural synonyms users would say, such as 'industrial ethernet', 'ICS/OT', or 'PROFINET RT', so the description (not just metadata.when_to_use) carries them.

Optionally state evidence/output expectations ('produces device inventory tables and .pcap evidence') to sharpen the what.

DimensionReasoningScore

Specificity

The description enumerates the skill's full capability set with concrete actions: 'DCP Identify-All broadcast enumeration, device fingerprinting, station-name and IP reassignment (breaks IO-controller mapping), flash-LED physical location, factory-reset, RT frame injection/replay for cyclic-IO spoofing' — matching every phase in the body. Not 4: coverage is comprehensive with no gaps; each action is specific and protocol-anchored.

5 / 5

Completeness

The 'what' is clearly and concretely answered (attack playbook with enumerated primitives), but the description contains no 'Use when...' clause or equivalent trigger guidance — 'requires same L2 broadcast domain' is a precondition, not a when-to-use trigger. Per judging guidelines, a missing 'Use when...' clause caps completeness at 3.

3 / 5

Trigger Term Quality

Good natural terms: 'profinet', 'dcp', 'siemens', 'fieldbus', 'factory-reset', 'flash-LED', 'station-name', plus the technical '0x8892'. Not 5: misses common variations a user might naturally say such as 'ICS', 'OT', 'industrial ethernet', 'process automation', or 'PROFINET RT' (these appear only in metadata.when_to_use, not the description field itself). Not 3: keyword coverage here goes well beyond 'some relevant keywords'.

4 / 5

Distinctiveness Conflict Risk

Clear niche (PROFINET/DCP L2 attacks) with distinct triggers, and it explicitly positions itself against the sibling skill: 'Siemens/EU fieldbus peer of S7Comm' — reducing conflict risk with an S7Comm skill. Not 4: minimal overlap with any generic skill; nothing here would plausibly route to the wrong skill.

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