agentleFS
thejefflarsonthejefflarson/soundcheck/.claude/skills/file-upload/SKILL.md

file-upload

Skill20 starsChanged 4 months agoMITView on GitHub

Detects file upload handlers that accept executable content or write to web-

15 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use sqli, xss and 5 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • SubhiSecSkill

    sqli

    Hunt SQL injection in REST/GraphQL/SOAP/raw parameters using sqlmap, ghauri, manual UNION/Time/Boolean techniques, and custom WAF-bypass tamper scripts. Use when an input flows into a database query or when the user has identified a parameter that might be vulnerable.

    Also in 6 projects that use this

  • SubhiSecSkill

    xss

    Hunt reflected, stored, and DOM-based Cross-Site Scripting (XSS) including CSP bypass, polyglot payloads, mutation XSS (mXSS), markdown XSS, and template XSS. Use when the user has identified a parameter or input that reflects to the page, or wants to test for XSS in a specific input.

    Also in 7 projects that use this

  • zebbernSkill

    js-analysis

    Analyze JavaScript files to discover hidden endpoints, API keys, secrets, and sensitive data. Use when testing web applications, when user mentions JavaScript analysis, or when looking for hidden API endpoints.

    Also in 3 projects that use this

  • blacklanternsecuritySkill

    jwt-attacks

    Exploit JWT (JSON Web Token) vulnerabilities during authorized penetration testing.

    Also in 3 projects that use this

  • +3 more from SubhiSec

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 11 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    No extension allowlist, or an extension denylist that misses novel or case-varied extensions

    line 23
  2. Distinctive:

    No upload-size cap enforced at the framework or reverse-proxy level

    line 24

“Common” is measured: kept by at least 6 in 10 of the 11 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

File Upload Security Check (A04:2025)

What this checks

Protects against unrestricted file upload attacks where an attacker uploads executable files (web shells, scripts, HTML with embedded JS) that the server later serves or executes. Exploitation leads to remote code execution, stored XSS, or full server compromise.

Vulnerable patterns

  • Upload handler that writes the user-supplied filename directly to disk, enabling path traversal and extension bypass
  • Upload destination inside the web-accessible document root, so uploaded content is served directly by the web server
  • No extension allowlist, or an extension denylist that misses novel or case-varied extensions
  • No upload-size cap enforced at the framework or reverse-proxy level
  • MIME type taken from the client-supplied Content-Type header rather than the file's magic bytes

Fix immediately

Flag the vulnerable code and explain the risk. Then suggest a fix that establishes these properties:

  1. Extension is validated against an allowlist, never a denylist. Denylists miss novel extensions (.phtml, .phar, .svg) and case variations. An allowlist of expected types (.png, .jpg, .pdf) fails closed.
  2. The user-supplied filename is never used as the storage path. Rename the file to a CSPRNG identifier, preserving only the validated extension. This defeats path traversal (../../etc/passwd), overwrites of existing files, and filename-based XSS on download.
  3. Uploads are written outside the webroot. The server must not serve them directly — files are handed out through an application route that sets a safe Content-Type and Content-Disposition: attachment, never inferred from the filename.
  4. Size is capped at the framework or proxy level, not just inside the handler. A handler-only check lets a multi-gigabyte upload exhaust memory before the check runs.
  5. MIME type is validated against the file's magic bytes, not the Content-Type header the client sent — the header is attacker-controlled.

Translate these principles to the audited file's language and framework. Use the framework's documented upload-size limit, storage path configuration, and content-type sniffing helper — do not hand-roll path joining or extension parsing.

Verification

Confirm the following properties hold (language-agnostic):

  • Only explicitly-allowed file extensions are accepted — enforced via an allowlist, not a denylist
  • The user-supplied filename is never used as the storage path — files are renamed to a random or hashed identifier
  • Uploaded files are stored outside the web-accessible document root
  • A maximum upload size is enforced at the framework or reverse-proxy level
  • Files are served with Content-Disposition: attachment and a safe, explicit Content-Type — never inferred from the filename

References

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.