CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

kerberoasting

Request Kerberos TGS tickets for SPN-bound service accounts and crack offline with hashcat — classic AD priv-esc primitive.

Quality

80%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./packages/decepticon/decepticon/skills/standard/ad/kerberoasting/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

83%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 lean, highly actionable playbook: real commands for every identification, request, and cracking path, plus genuinely non-obvious empirical content (password heuristics, OPSEC events, SPN impact table). The main gap is the complete absence of validation checkpoints across a batch workflow — nothing confirms ticket capture, crack success, or credential validity before the promote step.

Suggestions

Add validation checkpoints between steps: verify /tmp/kerb.hashes is non-empty before hashcat, check hashcat output for cracked pot lines before promotion, and validate the credential authenticates (e.g. a single smbexec/ldap bind test) before kg_add_node — with an error-recovery path (re-run with different rules/wordlist if no cracks).

Add a verification step after identification that the collected SPN list is complete (coverage confirmation) before batch-requesting tickets, since the skill itself warns the OPSEC risk of requesting all SPNs at once but leaves the throttle wrapper undescribed.

Move the common-services table and password heuristics into a reference file (e.g. references/ targets and heuristics) to slim the main body below the simple-skill threshold, keeping SKILL.md as a lean overview.

DimensionReasoningScore

Conciseness

Every section carries operation-specific knowledge Claude cannot reliably improvise: the ldapsearch filter, hashcat modes 13100/19700, the '$krb5tgs$23$' vs '$krb5tgs$18$' hash-format tell, empirically-derived password heuristics ('ServiceName + season + year', 'SQLSvc2024!'), 4769-event OPSEC signals, and the SPN-to-impact table. Nothing explains what Kerberos or hashcat is; it fully matches anchor 5's 'lean and efficient; assumes Claude's competence; every token earns its place'.

5 / 5

Actionability

Commands are copy-paste ready and cover the common cases: a complete ldapsearch query with the exact UAC/bitness filter and attributes, 'GetUserSPNs.py DOM/USER:'PASS' -dc-ip DC_IP -request -outputfile /tmp/kerb.hashes', 'Rubeus.exe kerberoast /outfile:... /nowrap', and three hashcat invocations covering RC4 (mode 13100), AES256 (19700), and a combinator attack for pattern-based service passwords. This matches anchor 5; the only substitutions needed (DC_IP, USER, PASS) are engagement-specific values, and the kg_add_node/kg_add_edge promotion template is a concrete API shape rather than vague direction.

5 / 5

Workflow Clarity

The five-step sequence (identify → request → crack → promote → post-crack) is clearly ordered, but there are no validation checkpoints anywhere: no verify that /tmp/kerb.hashes is non-empty before cracking, no check of hashcat exit status / cracked-vs-uncovered outcomes, and no confirmation that the cracked credential actually authenticates before promoting it into the knowledge graph. Kerberoasting is a batch operation (requesting tickets for all roastable SPNs, cracking a hash file), and the rubric explicitly caps workflow_clarity at 3 for batch operations without validation feedback loops — this precludes anchor 4 despite the strong sequence.

3 / 5

Progressive Disclosure

The body (~89 lines) is a single well-organized file with clear section headers and no bundle files exist to reference, so navigation risk is low. It falls short of anchor 5 (which the under-50-line simple-skill exception would otherwise grant): the SPN-to-impact table, password-pattern heuristics, and CVSS severity guidance are reference-style content that could live in a separate file, matching anchor 4's 'good structure; most content appropriately placed; minor organization gaps'.

4 / 5

Total

17

/

20

Passed

Description

70%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 tight, specific description that names concrete actions, the tool, and the target with excellent distinctiveness. Its weaknesses are that it carries no explicit 'Use when...' trigger clause in the description field itself and never uses the word 'kerberoasting', the most natural term a user would say, leaving trigger coverage to the metadata when_to_use field.

Suggestions

Append an explicit trigger clause to the description, e.g. 'Use when a user mentions kerberoasting, roasting SPNs/service accounts, requesting TGS tickets for offline cracking, or cracking service account passwords with hashcat.'

Include the word 'kerberoasting' (and the common short form 'kerberoast') directly in the description text, since it is the single most natural term a user would say and currently appears only in the skill name and metadata.

DimensionReasoningScore

Specificity

"Request Kerberos TGS tickets for SPN-bound service accounts and crack offline with hashcat" names two concrete actions plus the tool (hashcat) and target (SPN-bound service accounts), fitting 'several specific actions; minor gaps' rather than anchor 3's bare '1-2 concrete actions' — but the identification/post-exploitation steps of the workflow are absent from the description, so it is not anchor 5's comprehensive coverage.

4 / 5

Completeness

The 'what' is explicit and concrete ("Request Kerberos TGS tickets for SPN-bound service accounts and crack offline with hashcat"), but the description field contains no 'Use when...' clause or equivalent explicit trigger guidance — "classic AD priv-esc primitive" characterizes impact, not when to invoke the skill, and the rubric guideline caps completeness at 3 in that case. This matches anchor 3: 'clear what but when is missing or only weakly implied'. (The frontmatter's metadata.when_to_use field does carry triggers, but it sits outside the description field being evaluated.)

3 / 5

Trigger Term Quality

Strong natural terms present: "Kerberos", "TGS tickets", "SPN", "service accounts", "hashcat", "AD priv-esc" — a user needing this skill would plausibly say several of these. It is not anchor 5 because the single most natural trigger word, "kerberoasting", never appears in the description text itself (it only exists in the skill name and metadata), and common variations like 'crack service account passwords' are missing.

4 / 5

Distinctiveness Conflict Risk

The combination of "Kerberos TGS tickets", "SPN-bound service accounts", and "hashcat" carves out a clear niche with minimal conflict risk — even against the nearest neighbors (AS-REP roasting, golden-ticket attacks), TGS/SPN terminology distinguishes it. It matches anchor 5's 'clear niche with distinct triggers'.

5 / 5

Total

16

/

20

Passed

Validation

87%

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

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

metadata_field

'metadata' should map string keys to string values

Warning

Total

14

/

16

Passed

Repository

PurpleAILAB/Decepticon

Path

packages/decepticon/decepticon/skills/standard/ad/kerberoasting/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.