CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

docker-socket-mount

Docker / containerd socket mounted into a container → host RCE. Common in CI runners, GitOps controllers (ArgoCD, Flux), and 'Docker-in-Docker' setups. Single-command escape via `docker run --rm --privileged -v /:/host alpine chroot /host`.

Quality

82%

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

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

The body is an exemplar of lean, executable red-team guidance — copy-paste commands with fallbacks for every socket variant, no token waste, and clean organization. The one substantive gap is the absence of validation/verification steps around the destructive persistence and escape steps (no confirm-root check, no backdoor verification), which caps workflow clarity at 3 per the rubric's destructive-operation rule.

Suggestions

Add a verification step after the escape (e.g. `docker run ... chroot /host id` or checking `id` output) to confirm host root before moving to persistence.

Add validation for the persistence section — verify the backdoor account exists/logs in (`chroot /host su backdoor -c id`) and that the SUID binary works (`/host/tmp/.x -p` or `find /host -perm -4000`) — creating a validate→fix→retry loop.

Consider a short pre-persistence OPSEC check (verify no Falco before dropping SUID) since the skill already names Falco rules that flag exactly these actions.

DimensionReasoningScore

Conciseness

The body is lean and command-first: one framing sentence ("fully equivalent to root on the host"), then immediately executable blocks with terse inline comments, a compact attack-context table, and short OPSEC/detection bullets. No padding and no explanation of concepts Claude already knows — every token earns its place, matching anchor 5.

5 / 5

Actionability

Fully executable, copy-paste-ready commands cover the common cases: docker CLI escape, curl-on-unix-socket API fallback, ctr/crictl/nerdctl for containerd, CRI-O, and persistence (useradd/SUID), including fallbacks when a binary is missing ("apk add docker-cli ... || apt-get install"). This matches anchor 5; the only soft spot ("crictl exec is more limited — fall back to API") is explicitly handled.

5 / 5

Workflow Clarity

The Detect → Exploit (per socket type) → Persistence → OPSEC → defender-detection sequence is coherent and ordered, but there are no verification checkpoints: no step confirming the escape succeeded (e.g. running `id` on the host) and no validation that the backdoor/SUID persistence landed. Because the persistence section makes destructive, persistent host modifications without validation, the guideline capping destructive workflows without validation at 3 applies; it is not 2 because the sequence itself is clear and a pre-check (Detect) is present.

3 / 5

Progressive Disclosure

No bundle files exist and none are needed: the body is compact, every section is clearly headed (Detect / Exploit per variant / contexts / Persistence / OPSEC / detection), and nothing is inlined that clearly belongs in a separate file at this size. Well-organized sections with no external-reference need matches the top anchor.

5 / 5

Total

18

/

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.

The description is dense and highly concrete — domain, contexts, and the exact escape command are all stated — and occupies a distinct niche. Its main weakness is the absence of an explicit "Use when..." trigger clause in the description field itself (the trigger terms live in metadata.when_to_use), which caps completeness, and a few natural trigger terms are missing.

Suggestions

Add an explicit 'Use when...' clause to the description, e.g. 'Use when a docker.sock/containerd.sock mount, Docker-in-Docker setup, or CI runner container is found and host escape is in scope.'

Include the natural trigger terms users would actually say — 'docker.sock', 'containerd.sock', 'container escape', 'privilege escalation' — directly in the description rather than only in metadata.when_to_use.

Briefly mention the other capabilities the skill covers (detection of mounted sockets, containerd/CRI-O variants) so the description's coverage matches the body.

DimensionReasoningScore

Specificity

The description names the domain ("Docker / containerd socket mounted into a container → host RCE"), concrete contexts ("CI runners, GitOps controllers (ArgoCD, Flux), and 'Docker-in-Docker' setups"), and the exact escape command ("docker run --rm --privileged -v /:/host alpine chroot /host"). It stops at the escape action, leaving minor coverage gaps (detection, CRI-O variant, persistence) which the body covers — matching anchor 4 rather than the comprehensive anchor 5.

4 / 5

Completeness

The "what" is explicit (socket mount yields host RCE, with a single-command escape), but there is no "Use when..." clause or equivalent explicit trigger guidance in the description — "Common in CI runners..." only weakly implies when. Per the judging guideline, a missing 'Use when' clause caps completeness at 3; it is not 4 because the when-guidance is absent rather than merely under-specified.

3 / 5

Trigger Term Quality

Good natural keyword coverage: "Docker-in-Docker", "CI runners", "ArgoCD", "Flux", "host RCE", "docker run --privileged". A few natural terms users would say are missing from the description itself — "docker.sock", "container escape", "privilege escalation" — so it fits anchor 4 rather than the comprehensive synonym/extension coverage of anchor 5, and is clearly above the sparse coverage of anchor 3.

4 / 5

Distinctiveness Conflict Risk

A clear niche (Docker/containerd socket mount escape) with distinct triggers (socket mounts, DinD, specific CI/CD tooling) and essentially no overlap risk with other skills — matches anchor 5.

5 / 5

Total

16

/

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/cloud/container/docker-socket-mount/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.