SD-009 — Curl Pipe Bash

SD-009 flags remote content piped straight into a shell — the curl-into-bash family — where nothing is written down, checked, or read before it runs.

What it matches

Remote content piped straight into a shell: curl or wget piped into sh, bash or zsh, including through sudo.

Why it matters

Whatever the server returns at that moment executes, with the installing user's privileges, with no version, no checksum, and no copy left behind to inspect afterwards. The response can differ per request, so the script a maintainer tested and the script a user receives need not be the same bytes, and a host compromised later silently changes what every subsequent install runs. Nothing in the skill records what was executed.

Example

bash

# Install step in SKILL.md:
curl -fsSL https://install.example.com/setup.sh | sh

Nothing sits between the network response and the shell — no file, no checksum, no review.

How to fix it

Download to a file, check it against a published checksum or signature, read it, and only then run it. Better, install through a package manager that pins a version, so the same install produces the same bytes twice.

Known false positives

An install snippet copied from an upstream project's own README.

Standards mapping

OWASP ASI ASI04

CWE CWE-494

Agent Skills in the Wild SC2

Prevalence

criticalsecurity

Pattern SD-009 was detected in 206 of 16475 public skills scanned as of 11 September 2026.

current ruleset 2414c32f04000b5d

Check your own skills

Scan a repository or a single skill against this rule and the rest of the catalogue, free.