Umfangreiche Erweiterung der Skill-Bibliothek: Neue Skills für Humanisierung (Englisch/PT-BR), Design-Validierung, AI-SEO und Coolify-Deployment inkl. Regelwerke, Presets, Pattern-Referenzen, Testfälle und Automatisierungsskripte. Zusätzliche Skills für Revenue-Centric Design, Pier Cloud, OKF, Lebenslauf- und LinkedIn-Optimierung sowie zahlreiche Referenzdateien, Checklisten und YAML/JSON/Markdown-Templates. Einführung einer vollständigen OpenWiki-Dokumentation mit Architektur-, Domain- und Workflow-Beschreibungen, zentralem Index und automatisierten Updates. Modularer Aufbau, restriktive Lizenzen und umfassende Qualitäts- und Evaluationsmechanismen für alle neuen Inhalte.
163 lines
8.3 KiB
Markdown
163 lines
8.3 KiB
Markdown
# Severity Policy
|
|
|
|
Practical decision criteria for assigning severity to security findings. Apply this policy consistently — do not assign severity based on gut feeling.
|
|
|
|
---
|
|
|
|
## Severity Levels
|
|
|
|
### Critical
|
|
|
|
The vulnerability allows an attacker to fully compromise the system, its data, or its users with minimal effort and no special access.
|
|
|
|
**Assign critical when:**
|
|
- Remote code execution (RCE) is achievable
|
|
- Authentication can be bypassed entirely, granting full access
|
|
- PII, credentials, or payment data is directly exposed or exfiltrable
|
|
- Supply chain compromise: malicious dependency, tampered build artifact, or poisoned CI pipeline
|
|
- Pre-authentication exploitation — no account or privileges required
|
|
|
|
**Examples:**
|
|
- Unauthenticated endpoint that returns all user records with passwords
|
|
- Deserialization vulnerability allowing arbitrary command execution
|
|
- Hardcoded production credentials (database, payment processor, admin tokens)
|
|
- Dependency with an actively exploited RCE CVE
|
|
|
|
---
|
|
|
|
### High
|
|
|
|
The vulnerability enables significant damage but requires slightly more effort or minimal access (low-privilege account).
|
|
|
|
**Assign high when:**
|
|
- SQL injection or XSS that enables session hijacking or credential theft
|
|
- Privilege escalation from normal user to admin
|
|
- SSRF that reaches internal services, metadata endpoints, or private networks
|
|
- Significant data exposure (not full breach, but sensitive records accessible)
|
|
- Authentication flaws that weaken but don't fully bypass access control
|
|
- File upload allowing server-side execution
|
|
|
|
**Examples:**
|
|
- Stored XSS in a comment field that steals admin session cookies
|
|
- IDOR allowing any authenticated user to read other users' private data
|
|
- SSRF reaching cloud metadata endpoint (`169.254.169.254`)
|
|
- JWT signature not verified, allowing role escalation
|
|
|
|
---
|
|
|
|
### Medium
|
|
|
|
The vulnerability has real security impact but is limited in scope, requires chaining, or affects non-critical paths.
|
|
|
|
**Assign medium when:**
|
|
- Stored XSS that cannot access session tokens (HttpOnly cookies in place)
|
|
- Information disclosure: stack traces, internal file paths, software versions
|
|
- Missing security headers (CSP, X-Frame-Options) on sensitive pages
|
|
- Weak cryptography in non-critical paths (e.g., MD5 for non-password hashing)
|
|
- CSRF on state-changing but non-critical actions
|
|
- Open redirect usable for phishing
|
|
|
|
**Examples:**
|
|
- Error page leaks full stack trace including internal IP addresses
|
|
- No CSP header on pages that render user-generated content
|
|
- Password reset token generated with insufficient entropy (but short-lived)
|
|
- CSRF on profile display name change (not on password/email change)
|
|
|
|
---
|
|
|
|
### Low
|
|
|
|
The issue has minimal direct security impact but represents a gap in defense-in-depth or hygiene.
|
|
|
|
**Assign low when:**
|
|
- Verbose error messages revealing framework version or minor internals
|
|
- Missing rate limiting on non-critical endpoints
|
|
- Minor misconfigurations with no direct exploit path
|
|
- Dependencies with CVEs that have no practical exploit in this context
|
|
- Cookie without `Secure` flag in a development-only path
|
|
- Directory listing enabled but exposing only public assets
|
|
|
|
**Examples:**
|
|
- Server responds with `X-Powered-By: Express` header
|
|
- No rate limit on the "forgot password" endpoint (but tokens are single-use and short-lived)
|
|
- Dependency has a CVE for a function the project never calls
|
|
- CORS allows `*` on a public read-only API with no auth
|
|
|
|
---
|
|
|
|
### Info
|
|
|
|
Not a vulnerability. An observation, best-practice recommendation, or note for future hardening.
|
|
|
|
**Assign info when:**
|
|
- Best practice not followed but no exploitable condition exists
|
|
- Code quality issue with security implications (e.g., error handling inconsistency)
|
|
- Suggestion for future improvement (e.g., "consider adding Subresource Integrity")
|
|
- Informational notes about architecture or trust boundaries
|
|
|
|
**Examples:**
|
|
- Recommend enabling HSTS preload (HSTS is already present, just not preloaded)
|
|
- Suggest adding `integrity` attributes to CDN script tags
|
|
- Note that logging does not capture failed authentication attempts
|
|
|
|
---
|
|
|
|
## Dynamic Baseline
|
|
|
|
Severity não é absoluta — é relativa ao que a aplicação é e ao que comparáveis aceitam.
|
|
|
|
### Como Calibrar
|
|
|
|
1. **Identifique o comparável** em Phase 1 (CMS → outros CMSes, API gateway → outros API gateways, novel app → sem comparável)
|
|
2. **Verifique se o pattern existe no comparável** — se sim e foi explorado, é finding MAIS FORTE. Se nunca explorado em anos de produção, entenda por quê.
|
|
3. **Ajuste severity pela distância do padrão aceito** — se TODO app nessa categoria tem o mesmo pattern e ninguém considera vulnerability, não reporte como HIGH.
|
|
4. **Não use baseline para DESCARTAR** — use para calibrar. Um pattern perigoso é perigoso mesmo se o comparável também o tem.
|
|
|
|
### Distinction: HIGH vs MEDIUM para Business Logic
|
|
|
|
- **HIGH**: O finding derrota um security boundary explícito. User performa ação que o sistema explicitamente gate atrás de higher role, e a ação tem consequências reais.
|
|
- **MEDIUM**: Bypass com consequências reais mas limitadas. Requer auth, impacto confinado a dados do atacante, ou conditions uncommon.
|
|
|
|
---
|
|
|
|
## Don't Overcall
|
|
|
|
Common mistakes that inflate severity beyond what the evidence supports:
|
|
|
|
| Mistake | Why it's wrong | Correct severity |
|
|
|---------|---------------|-----------------|
|
|
| Reflected XSS behind authentication marked as critical | Requires social engineering of an already-authenticated user; session cookies are HttpOnly | Medium (or High if cookies are accessible) |
|
|
| Missing HSTS marked as critical | HSTS absence alone doesn't enable exploitation; it's defense-in-depth | Low (or Medium if the site handles sensitive auth flows over HTTP) |
|
|
| Dependency CVE with no reachable code path marked as high | If the vulnerable function is never called, there's no exploit | Low or Info |
|
|
| Missing rate limiting on login marked as high | Only matters if there's no account lockout, no CAPTCHA, and passwords are weak | Low (escalate to Medium if no compensating controls exist) |
|
|
| Information disclosure of software version marked as high | Version numbers alone don't enable attack; they help an attacker enumerate but require a corresponding vulnerability | Low |
|
|
| Self-XSS (user can only attack themselves) marked as medium | No impact on other users; no realistic attack scenario | Info |
|
|
| CORS misconfiguration on a public API with no auth | If the API is intentionally public and has no user context, CORS is irrelevant | Info |
|
|
| **Multiple dependency CVEs listed at face value without project context** | If 9 CVEs are listed but only 1 is exploitable due to missing preconditions, reporting "9 CRITICAL CVEs" is misleading and erodes trust | Analyze each individually, assign per-CVE real severity |
|
|
|
|
**The rule:** Severity reflects *demonstrated impact*, not *theoretical worst case*. If you can't articulate the realistic attack scenario and its consequences in 2 sentences, you're probably overcalling.
|
|
|
|
### CVE Cross-Reference Protocol (Mandatory)
|
|
|
|
Before assigning severity to any dependency CVE:
|
|
|
|
1. **Read the advisory** — identify the exact precondition (which function, which feature, which config)
|
|
2. **Grep the codebase** — does the project use that function/feature? Cite the evidence (file:line or "0 results")
|
|
3. **Check the environment** — does prod have the infrastructure the CVE requires? (CDN, multi-user, Windows, etc.)
|
|
4. **DAST validate** — did the probe confirm exploitability in localhost? In production?
|
|
5. **Assign real severity** — based on what you proved, not what the advisory says generically
|
|
|
|
A bulk "upgrade all deps" recommendation is fine. But the *severity* must reflect this project, not all projects.
|
|
|
|
---
|
|
|
|
## Severity Decision Flowchart
|
|
|
|
1. **Can an unauthenticated attacker achieve RCE, full data breach, or complete auth bypass?** → Critical
|
|
2. **Can a low-privilege attacker steal sessions, escalate privileges, or access significant sensitive data?** → High
|
|
3. **Is there real but limited impact (scoped data leak, partial XSS, missing hardening on sensitive pages)?** → Medium
|
|
4. **Is it a hygiene gap with no direct exploit path in this context?** → Low
|
|
5. **Is it purely advisory with no current exploitability?** → Info
|
|
|
|
When in doubt between two levels, ask: "Can I demonstrate concrete harm to a user or the system?" If yes, go with the higher level. If not, go lower.
|