Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add bobmatnyc/mcp-skillset --skill security-testinggit clone --depth 1 https://github.com/bobmatnyc/mcp-skillsetWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/bobmatnyc/mcp-skillset/security-testing)<a href="https://agentmods.dev/skills/bobmatnyc/mcp-skillset/security-testing"><img src="https://agentmods.dev/badge/skills/bobmatnyc/mcp-skillset/security-testing.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00056 | $0.03580 |
| Opus 5 | $0.00028 | $0.01790 |
| Sonnet 5 | $0.00011 | $0.00716 |
| Haiku 4.5 | $0.00006 | $0.00358 |
Grade A, and why
Security & Vulnerability Testing scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
parsed = urllib.parse.urlparse(url) How it starts
The opening of the file, as written. The whole thing — 521 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Security & Vulnerability Testing
Overview
Master security testing with AI-powered vulnerability detection, automated SAST/DAST scanning, and threat modeling. OpenAI's Aardvark achieves 92% vulnerability detection accuracy (2024), and multi-agent security tools find 4x more vulnerabilities than traditional scanners.
When to Use This Skill
- Performing security audits on web applications and APIs
- Identifying OWASP Top 10 vulnerabilities before production
- Implementing security gates in CI/CD pipelines
- Conducting threat modeling for new features
- Reviewing code for security anti-patterns
- Testing authentication and authorization logic
- Scanning infrastructure as code for misconfigurations
- Preparing for penetration testing or security compliance
Core Principles
1. OWASP Top 10 (2021) Coverage
# A01:2021 – Broken Access Control
# ❌ BAD: Missing authorization check
@app.get("/api/users/{user_id}/profile")
async def get_profile(user_id: int):
return await db.get(User, user_id) # Anyone can access any profile!
# ✅ GOOD: Verify user authorization
@app.get("/api/users/{user_id}/profile")
async def get_profile(user_id: int, current_user: User = Depends(get_current_user)):
if current_user.id != user_id and not current_user.is_admin:
raise HTTPException(403, "Forbidden")
return await db.get(User, user_id)
# A02:2021 – Cryptographic Failures
# ❌ BAD: Weak password hashing
import hashlib
password_hash = hashlib.md5(password.encode()).hexdigest() # NEVER USE MD5!
# ✅ GOOD: Strong password hashing with bcrypt
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
password_hash = pwd_context.hash(password)
# A03:2021 – Injection
# ❌ BAD: SQL injection vulnerability
query = f"SELECT * FROM users WHERE email = '{email}'" # NEVER!
cursor.execute(query)
# ✅ GOOD: Parameterized queries
query = "SELECT * FROM users WHERE email = %s"
cursor.execute(query, (email,))
# Or use ORM (SQLAlchemy, Django ORM)
user = await db.execute(select(User).where(User.email == email))
# A04:2021 – Insecure Design
# ✅ Implement rate limiting
from slowapi import Limiter
limiter = Limiter(key_func=get_remote_address)
@app.post("/api/login")
@limiter.limit("5/minute")
async def login(credentials: LoginRequest):
# Prevent brute force attacks
pass
# A05:2021 – Security Misconfiguration
# ❌ BAD: Debug mode in production
app = FastAPI(debug=True) # NEVER in production!
# ✅ GOOD: Environment-aware configuration
app = FastAPI(debug=settings.DEBUG)
# A06:2021 – Vulnerable and Outdated Components
# ✅ Run: pip-audit, snyk test, npm audit
# A07:2021 – Identification and Authentication Failures
# ✅ Use OAuth2 with JWT, implement MFA
# A08:2021 – Software and Data Integrity Failures
# ✅ Sign releases, verify checksums, use SRI for CDN resources
# A09:2021 – Security Logging and Monitoring Failures
# ✅ Log all authentication attempts, failed access, sensitive operations
# A10:2021 – Server-Side Request Forgery (SSRF)
# ❌ BAD: Unchecked URL fetching
url = request.json.get("url")
response = await httpx.get(url) # Can access internal services!
# ✅ GOOD: Whitelist allowed domains
ALLOWED_DOMAINS = ["api.example.com", "cdn.example.com"]
def is_safe_url(url: str) -> bool:
parsed = urllib.parse.urlparse(url)
return parsed.netloc in ALLOWED_DOMAINS
if not is_safe_url(url):
raise HTTPException(400, "Invalid URL")
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 521 lines · 56 tokens per session scan A e61f66aee8b2
Security & Vulnerability Testing is a skill published in the GitHub repository bobmatnyc/mcp-skillset (20 stars, last pushed 6mo ago), licensed MIT. It adds 56 tokens to every session and 3,580 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
implementing-devsecops-security-scanning
Integrates Static Application Security Testing (SAST), Dynamic Application Security Testing (DAST), and Software Composition Analysis (SCA) into CI/CD pipelines using open-source tools. Covers Semgrep for SAST, Trivy for SCA and container scanning, OWASP ZAP for DAST, and Gitleaks for secrets detection. Activates for…
race
Race condition / TOCTOU playbook — limit overrun (one-time codes used twice, gift cards spent twice), single-packet attack (last-byte sync) to force parallel processing, and state-confusion races (file upload + read, order before payment). Use when timing-sensitive logic could be abused — one-time codes, coupons/gift…
terraform-skill
Terraform infrastructure as code best practices.
playwright-skill
IMPORTANT - Path Resolution: This skill can be installed in different locations (plugin system, manual installation, global, or project-specific). Before executing any commands, determine the skill directory based on where you loaded this SKILL.md file, and use that path in all commands below.
testing-llm-prompt-injection-and-jailbreaks
Testing LLM-backed applications, chatbots, and AI agents for direct and indirect prompt injection, jailbreaks, system-prompt leakage, and tool/agent abuse during authorized penetration tests, using structured payload families and reliable confirmation signals.
pypict-skill
Pairwise test generation.