From appsec
This skill should be used when the user asks to "check for regressions", "verify fixes still hold", "regression test security", "check for reintroduced vulnerabilities", "security regression check", or "verify no old bugs returned". Also triggers when the user wants to confirm that previously fixed vulnerabilities have not been reintroduced by recent code changes.
npx claudepluginhub florianbuetow/claude-code --plugin appsecThis skill uses the workspace's default tool permissions.
Verify that previously fixed vulnerabilities have not been reintroduced.
Acquire memory dumps from live systems/VMs and analyze with Volatility 3 for processes, networks, DLLs, injections in incident response or malware hunts.
Provides x86-64/ARM disassembly patterns, calling conventions, control flow recognition for static analysis of executables and compiled binaries.
Identifies anti-debugging checks like IsDebuggerPresent, NtQueryInformationProcess in Windows binaries; suggests bypasses via patches/hooks/scripts for malware analysis, CTFs, authorized RE.
Verify that previously fixed vulnerabilities have not been reintroduced.
Reads the fix history from .appsec/fixed-history.json, checks
whether vulnerable patterns have returned or fixes have been removed, and
reports any regressions. Designed to run as a gate check before merges or
releases.
Read ../../shared/schemas/flags.md for the full flag specification.
| Flag | Regression Behavior |
|---|---|
--scope | Default branch. Checks regressions in all files changed on the current branch. Use changed for working tree only, full for all historical fixes. |
--depth quick | Pattern match only: check if the exact vulnerable code snippet reappears. |
--depth standard | Pattern match + semantic analysis: check if equivalent vulnerable patterns exist even if code changed. |
--depth deep | Standard + trace data flows to verify fix integrity across refactored code. |
--depth expert | Deep + attempt to bypass each fix with variant inputs and alternate code paths. |
--severity | Only check regressions for findings at or above this severity. |
--format | Default text. Use json for CI pipeline integration. |
Read .appsec/fixed-history.json. This file contains all findings that have been verified as fixed by /appsec:verify. Each entry includes:
If the file does not exist or is empty, inform the user that no fix history is available and suggest running /appsec:verify on resolved findings to build the history.
Resolve which files to check for regressions:
Intersect the scope file list with files referenced in fix history. Only check files that both (a) have historical fixes and (b) fall within scope. If scope includes files without fix history, skip them, but report in the summary: Files in scope without fix history: N (skipped).
For each historical fix in scope, check whether the vulnerability has returned:
vulnerable snippet from the fix history.For each historical fix checked, assign a status:
| Status | Meaning |
|---|---|
| HOLDING | Fix is intact. No regression detected. |
| REGRESSION | Vulnerable pattern has returned. The fix was reverted, removed, or bypassed. |
| DEGRADED | Fix is partially intact but weakened (e.g., validation is present but less strict). |
| RELOCATED | The fixed code was moved. Fix may be intact at new location but needs verification. |
| INCONCLUSIVE | Code changed significantly. Cannot determine if fix is still effective. Manual review needed. |
Output the regression check results:
## Security Regression Report
### Summary
- Historical fixes checked: N
- Holding: N
- Regressions found: N
- Degraded: N
- Relocated: N
- Inconclusive: N
### Regressions
#### REGRESSION: INJ-001 - SQL injection in user lookup
**Original fix**: Parameterized query in src/db/queries.ts:45
**Current state**: String interpolation reintroduced at src/db/queries.ts:52
**Introduced by**: <commit hash if determinable>
**Severity**: CRITICAL -- This was a verified fix that has been undone.
**Action**: Re-apply parameterized query. Run `/appsec:fix INJ-001`.
#### DEGRADED: AC-003 - Missing rate limiting on login
**Original fix**: Added express-rate-limit middleware at 5 req/min
**Current state**: Rate limit increased to 1000 req/min (effectively disabled)
**Action**: Review rate limit configuration. 1000 req/min does not prevent brute force.
### Holding
- CRYPT-002: Weak hashing replaced with bcrypt -- Still intact
- AUTH-005: JWT validation added -- Still intact
- SSRF-001: URL allowlist implemented -- Still intact
### Inconclusive
- INJ-004: Code significantly refactored. Manual review recommended.
For each REGRESSION and DEGRADED result, emit a formal finding using ../../shared/schemas/findings.md:
metadata.regression: true to indicate this is a reintroduced vulnerability.Save regression findings to .appsec/findings.json with status regression.
Findings follow ../../shared/schemas/findings.md.
Finding ID prefix: REG (e.g., REG-001).
metadata.tool: "regression"metadata.original_finding: Reference to the original finding ID.--format json), exit with a non-zero status indicator if regressions are found./appsec:verify on completed fixes.