Skip to content

Commit d4c4883

Browse files
dguidoclaude
andcommitted
Split vulnerability policy into SECURITY.md
Move human-facing reporting policy to SECURITY.md (GitHub surfaces this on the Security tab). Keep implementation-specific guidance (blocklist maintenance, dotted path matching) in CLAUDE.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 61311f7 commit d4c4883

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

CLAUDE.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,11 @@ Build payloads using fickling's opcode API (`op.Proto`, `op.ShortBinUnicode`, `o
101101

102102
Actions are SHA-pinned with version comments. uv is used for dependency caching.
103103

104-
## Vulnerability reporting
104+
## Vulnerability fixes
105105

106-
- Every report must include a test case for `test/test_bypasses.py` with a GHSA/CVE link in a comment above the method.
107-
- Use `echo`/`print` for PoCs — no shells, no sensitive file reads, no remote scripts.
108-
- Keep impact descriptions brief (e.g., "module X is not blocklisted and enables code execution").
106+
See `SECURITY.md` for reporting policy. When implementing fixes:
107+
108+
- Every fix needs a regression test in `test/test_bypasses.py` with the GHSA/CVE linked in a comment above the method.
109109
- Update **both** blocklists: `UNSAFE_IMPORTS` in `fickle.py` and the relevant dict in `analysis.py`. Match specific names (e.g., `_io.FileIO` not all of `_io`) to avoid false positives.
110110
- Import matching checks all components of dotted paths (`foo.bar.os` matches `os`).
111111
- **Out of scope:** `UnusedVariables` bypasses — this is an intentionally weak supplementary heuristic.
112-
- No suggested code fixes without human review.

SECURITY.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Security Policy
2+
3+
## Reporting a vulnerability
4+
5+
Please report vulnerabilities through [GitHub Security Advisories](https://github.com/trailofbits/fickling/security/advisories/new). Do not open public issues for security reports.
6+
7+
## What to include
8+
9+
- A minimal reproducing test case using fickling's opcode API (`op.Proto`, `op.ShortBinUnicode`, `op.StackGlobal`, `op.Reduce`, etc.) or Python's `pickle` module. Do not submit raw byte strings.
10+
- Use `echo` or `print` for PoCs — no shells, no sensitive file reads, no remote scripts.
11+
- A brief impact description (e.g., "module X is not blocklisted and enables code execution"). Elaborate exploitation scenarios are not necessary.
12+
13+
## What is out of scope
14+
15+
- **`UnusedVariables` bypasses.** This is an intentionally weak, supplementary heuristic. Bypassing it alone is not a meaningful finding.
16+
17+
## Fixes
18+
19+
Do not include suggested code fixes in reports unless they have been reviewed and approved by a maintainer first. If a fix is accepted, it will include a regression test in `test/test_bypasses.py` linked to the advisory.

0 commit comments

Comments
 (0)