Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Security audit workflow - OWASP Top 10, input validation, auth, secret detection, vulnerability scan
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-23 | ✗→✗ | = Same ✗ | — | — |
| # | Vulnerability | Prevention | |---|--------------|------------| | A01 | Broken Access Control | RBAC, resource-level auth, CORS | | A02 | Cryptographic Failures | Encrypt at rest/transit, no PII in logs | | A03 | Injection (SQL/NoSQL/XSS/OS) | Parameterized queries, output encoding, CSP | | A04 | Insecure Design | Threat modeling, secure design patterns | | A05 | Security Misconfiguration | Hardened defaults, no debug in prod | | A06 | Vulnerable Components | npm audit, dependency scan, CVE tracking | | A07 | Auth Failures | Rate limiting, MFA, secure session | | A08 | Data Integrity Failures | Input validation, signed updates, CI/CD security | | A09 | Logging & Monitoring Failures | Audit log, alert on anomaly | | A10 | SSRF | URL allowlist, network segmentation |
typescriptimport { z } from 'zod'; const UserInput = z.object({ email: z.string().email().max(255), name: z.string().min(1).max(100).regex(/^[\w\s-]+$/), age: z.number().int().min(0).max(150), }); // Parameterized query (SQL injection prevention) const user = await db.query('SELECT * FROM users WHERE id = $1', [userId]);
typescript// Password hashing import bcrypt from 'bcryptjs'; const hash = await bcrypt.hash(password, 12); const valid = await bcrypt.compare(password, hash); // JWT with expiry const token = jwt.sign({ userId: user.id, role: user.role }, secret, { expiresIn: '24h' }); // Rate limiting on auth endpoints const authLimiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 5 }); app.use('/api/auth', authLimiter);
bash# Git hooks ile secret engelleme grep -rn "sk-\|pk_\|ghp_\|xoxb-\|AKIA" --include="*.ts" --include="*.js" src/ grep -rn "password\s*=\s*['\"]" --include="*.ts" src/
typescriptimport helmet from 'helmet'; app.use(helmet()); // Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, etc.
| Anti-Pattern | Cozum | |-------------|-------| | Hardcoded secrets | Environment variables | | SQL string concat | Parameterized queries | | No CORS config | Whitelist origins | | Debug mode in prod | NODE_ENV check | | No rate limiting | express-rate-limit |
Detayli rehber icin: pentest-methodology skill
5-faz pipeline: Recon > Vuln Analysis > Exploitation > Verification > Report
| Level | Tanim | |-------|-------| | L1 - Theoretical | Potansiyel risk, exploit edilmemis | | L2 - Demonstrated | Bypass/leak gosterildi | | L3 - Exploited | Tam exploit, veri erisimi | | L4 - Chained | Birden fazla vuln zincirlendi |
Kullanici input'unun (source) tehlikeli fonksiyona (sink) ulasip ulasamadigini kontrol et:
Source: req.body, req.query, req.params, req.headers, cookies
Sink: db.query(), eval(), exec(), res.redirect(), innerHTML
Kontrol: Source ile Sink arasinda sanitizasyon/validasyon var mi?Bu yaklasimi her code review'da auth/data islerinde kullan.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-24 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +17 percentage points is the difference between those two pass rates over the 24 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.