mcpField
S
security-hardening

security-hardening

github.com/mn-youssefSecurity49105 installsUpdated 20w ago
Repository

About security-hardening

A security-hardening skill for developers who need to turn audit or penetration-test findings into verified fixes. It emphasizes correcting root causes, adding independent safeguards, and retesting the original proof of concept.

Key features

  1. 01Root-cause remediation
  2. 02Secure-pattern guidance
  3. 03Defense-in-depth controls
  4. 04Proof-of-concept retesting
  5. 05Regression-test checklist

Use cases

  1. 01Remediating a reported injection or XSS flaw
  2. 02Checking authorization and authentication fixes
  3. 03Adding regression tests for security findings

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/mn-youssef/security-skills --skill security-hardening

After installing, type/security-hardeningin Claude Code to confirm it loaded.

Details

From the project README

Security Hardening (FIX phase)

Overview

Turn findings into correct, verified fixes. Fix the root cause at the right layer, add defense in depth, then re-test to prove the hole is closed.

Core principle: A fix you didn't re-test is a hope, not a fix. Reproduce the original exploit and confirm it now fails.

Process per finding

  1. Root cause — why is untrusted data reaching the sink? Fix there, not by blocklisting symptoms.
  2. Apply the secure pattern — see table below.
  3. Defense in depth — add a second independent control (validation + parameterization, etc.).
  4. Re-test — rerun the exact PoC from active-pentest/the audit; confirm it fails now.
  5. Regression — add a test so it can't silently come back.

Secure-pattern quick reference

VulnerabilityRoot-cause fixDefense in depth
SQL/NoSQL injectionParameterized queries / ORM bindings; allowlist dynamic identifiersLeast-privilege DB user; input validation
Command injectionAvoid shell; use exec arrays / safe APIs; no shell interpolationAllowlist args; drop privileges
XSSContext-aware output encoding; framework auto-escape; textContentCSP; sanitize HTML (DOMPurify); HttpOnly cookies
Broken access control / IDOREnforce authz server-side on every action; scope queries to the userDeny-by-default; centralized policy checks
Mass assignmentExplicit allowlist of bindable fields (DTO/schema)Separate read/write models
Broken authbcrypt/argon2; CSPRNG tokens; rotate session on loginMFA; rate limit; short token TTL + revocation
Crypto failuresVetted libs; AES-GCM; TLS everywhere; no homemade cryptoKey management/rotation; HSTS
SSRFAllowlist destinations; resolve+validate; block metadata/internal IPsEgress firewall; no raw URL fetch
Insecure deserializationSafe formats (JSON); yaml.safe_load; signed payloadsType allowlists; isolation
Secrets in codeMove to env/secret manager; rotate the exposed secretSecret scanning in CI; short-lived tokens
Security misconfigDisable debug; least-priv CORS; remove default credsHardened baseline; config review in CI
Mobile insecure storageKeychain/Keystore + encryptionPinning; no secrets in binary

Validation rules of thumb

  • Validate on the server — client validation is UX, not security.
  • Allowlist > blocklist — define what's permitted, reject the rest.
  • Encode for the sink, not the source — same data needs different encoding per context.
  • Fail closed — deny by default; an error should not grant access.

Re-test gate (don't skip)

[ ] Re-ran the original PoC → it now fails / is blocked
[ ] Added an automated regression test
[ ] Checked the fix didn't just move the sink elsewhere
[ ] Verified no similar instances exist (grep the pattern across the codebase)

Output

For each finding: root cause · the fix (diff/pattern) · re-test result (PoC now fails) · regression test added. Update the findings register status → Closed.

Common mistakes

  • Patching the one reported line while identical sinks remain elsewhere — grep for siblings.
  • Blocklist filters (e.g. stripping <script>) that attackers trivially bypass.
  • Client-side-only fixes for server-side problems.
  • Marking "fixed" without rerunning the exploit.

Comments

Markdown supported