cyberaudit-skill 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +241 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +126 -0
- package/package.json +58 -0
- package/skills/cyberaudit/AGENT-BOOT.md +122 -0
- package/skills/cyberaudit/COMMANDS.md +1125 -0
- package/skills/cyberaudit/INSTALL.md +311 -0
- package/skills/cyberaudit/MASTER.md +194 -0
- package/skills/cyberaudit/README.md +154 -0
- package/skills/cyberaudit/USAGE-GUIDE.md +107 -0
- package/skills/cyberaudit/mobile/MOBILE-CHECKLIST.md +245 -0
- package/skills/cyberaudit/mobile/MOBILE-PHILOSOPHY.md +352 -0
- package/skills/cyberaudit/mobile/MOBILE-REMEDIATION-LIBRARY.md +468 -0
- package/skills/cyberaudit/mobile/MOBILE-THREAT-MODELS.md +279 -0
- package/skills/cyberaudit/mobile/frameworks/EXPO.md +247 -0
- package/skills/cyberaudit/mobile/frameworks/FLUTTER.md +338 -0
- package/skills/cyberaudit/mobile/frameworks/IONIC.md +248 -0
- package/skills/cyberaudit/mobile/frameworks/REACT-NATIVE.md +479 -0
- package/skills/cyberaudit/mobile/vulnerabilities/AUTH-MOBILE.md +160 -0
- package/skills/cyberaudit/mobile/vulnerabilities/BINARY-ANALYSIS.md +193 -0
- package/skills/cyberaudit/mobile/vulnerabilities/CRYPTO-MOBILE.md +192 -0
- package/skills/cyberaudit/mobile/vulnerabilities/IPC-DEEPLINKS.md +231 -0
- package/skills/cyberaudit/mobile/vulnerabilities/NETWORK-MOBILE.md +165 -0
- package/skills/cyberaudit/mobile/vulnerabilities/PERMISSIONS.md +180 -0
- package/skills/cyberaudit/mobile/vulnerabilities/RUNTIME-MOBILE.md +214 -0
- package/skills/cyberaudit/mobile/vulnerabilities/STORAGE.md +197 -0
- package/skills/cyberaudit/reports/EXECUTIVE-SUMMARY-TEMPLATE.md +188 -0
- package/skills/cyberaudit/reports/REPORT-TEMPLATE-MOBILE.md +410 -0
- package/skills/cyberaudit/reports/REPORT-TEMPLATE-WEB.md +222 -0
- package/skills/cyberaudit/shared/COMPLIANCE.md +307 -0
- package/skills/cyberaudit/shared/CVSS-GUIDE.md +175 -0
- package/skills/cyberaudit/shared/OWASP-MAPPER.md +130 -0
- package/skills/cyberaudit/shared/SEVERITY-SCORING.md +102 -0
- package/skills/cyberaudit/shared/THREAT-MODELING.md +112 -0
- package/skills/cyberaudit/web/WEB-CHECKLIST.md +222 -0
- package/skills/cyberaudit/web/WEB-PHILOSOPHY.md +308 -0
- package/skills/cyberaudit/web/WEB-REMEDIATION-LIBRARY.md +665 -0
- package/skills/cyberaudit/web/WEB-THREAT-MODELS.md +460 -0
- package/skills/cyberaudit/web/frameworks/ANGULAR.md +169 -0
- package/skills/cyberaudit/web/frameworks/EXPRESS.md +185 -0
- package/skills/cyberaudit/web/frameworks/LARAVEL.md +371 -0
- package/skills/cyberaudit/web/frameworks/NESTJS.md +337 -0
- package/skills/cyberaudit/web/frameworks/NEXTJS.md +352 -0
- package/skills/cyberaudit/web/frameworks/REACT.md +346 -0
- package/skills/cyberaudit/web/frameworks/VUE.md +205 -0
- package/skills/cyberaudit/web/vulnerabilities/AUTH-AUTHZ.md +117 -0
- package/skills/cyberaudit/web/vulnerabilities/BUSINESS-LOGIC.md +603 -0
- package/skills/cyberaudit/web/vulnerabilities/CORS.md +117 -0
- package/skills/cyberaudit/web/vulnerabilities/CSRF.md +131 -0
- package/skills/cyberaudit/web/vulnerabilities/DESERIALIZATION.md +96 -0
- package/skills/cyberaudit/web/vulnerabilities/HEADERS.md +105 -0
- package/skills/cyberaudit/web/vulnerabilities/IDOR-BOLA.md +153 -0
- package/skills/cyberaudit/web/vulnerabilities/INJECTION.md +165 -0
- package/skills/cyberaudit/web/vulnerabilities/SECRETS.md +119 -0
- package/skills/cyberaudit/web/vulnerabilities/SSRF.md +124 -0
- package/skills/cyberaudit/web/vulnerabilities/SUPPLY-CHAIN.md +142 -0
- package/skills/cyberaudit/web/vulnerabilities/XSS.md +133 -0
- package/skills/cyberaudit/web/vulnerabilities/XXE.md +94 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# 🎯 SCORING GUIDE — CYBERAUDIT SKILL
|
|
2
|
+
# How to accurately assess each vulnerability
|
|
3
|
+
|
|
4
|
+
═══════════════════════════════════════════════════════════════
|
|
5
|
+
CVSS 3.1 SCORING METHOD
|
|
6
|
+
═══════════════════════════════════════════════════════════════
|
|
7
|
+
|
|
8
|
+
CVSS VECTOR : AV:[X]/AC:[X]/PR:[X]/UI:[X]/S:[X]/C:[X]/I:[X]/A:[X]
|
|
9
|
+
|
|
10
|
+
AV — ATTACK VECTOR (How does the attacker reach the target?)
|
|
11
|
+
N = Network : Via internet (worst case)
|
|
12
|
+
A = Adjacent : Same local network
|
|
13
|
+
L = Local : Local access required
|
|
14
|
+
P = Physical : Physical access required (best case)
|
|
15
|
+
|
|
16
|
+
AC — ATTACK COMPLEXITY (Difficult to exploit?)
|
|
17
|
+
L = Low : No special conditions
|
|
18
|
+
H = High : Specific conditions required (race condition, etc.)
|
|
19
|
+
|
|
20
|
+
PR — PRIVILEGES REQUIRED (Required privileges?)
|
|
21
|
+
N = None : Anonymous (worst case)
|
|
22
|
+
L = Low : Normal user
|
|
23
|
+
H = High : Admin/Root required
|
|
24
|
+
|
|
25
|
+
UI — USER INTERACTION (User interaction needed?)
|
|
26
|
+
N = None : Direct exploitation
|
|
27
|
+
R = Required : Victim must click/take an action
|
|
28
|
+
|
|
29
|
+
S — SCOPE (Impact beyond the vulnerable component?)
|
|
30
|
+
U = Unchanged : Impact limited to the component
|
|
31
|
+
C = Changed : Impact on other components (worse)
|
|
32
|
+
|
|
33
|
+
C — CONFIDENTIALITY IMPACT
|
|
34
|
+
H = High : All data exposed
|
|
35
|
+
L = Low : Partial data exposed
|
|
36
|
+
N = None : No confidentiality impact
|
|
37
|
+
|
|
38
|
+
I — INTEGRITY IMPACT
|
|
39
|
+
H = High : All data modifiable
|
|
40
|
+
L = Low : Partial modification possible
|
|
41
|
+
N = None : No integrity impact
|
|
42
|
+
|
|
43
|
+
A — AVAILABILITY IMPACT
|
|
44
|
+
H = High : Service completely unavailable
|
|
45
|
+
L = Low : Partial degradation
|
|
46
|
+
N = None : No availability impact
|
|
47
|
+
|
|
48
|
+
═══════════════════════════════════════════════════════════════
|
|
49
|
+
REAL-WORLD SCORING EXAMPLES
|
|
50
|
+
═══════════════════════════════════════════════════════════════
|
|
51
|
+
|
|
52
|
+
SQL INJECTION ON PUBLIC LOGIN
|
|
53
|
+
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
|
|
54
|
+
Score : 10.0 CRITICAL
|
|
55
|
+
Reason : Network, easy, anonymous, no interaction,
|
|
56
|
+
total impact on entire system
|
|
57
|
+
|
|
58
|
+
IDOR ON AUTHENTICATED API
|
|
59
|
+
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
|
|
60
|
+
Score : 7.1 HIGH
|
|
61
|
+
Reason : Network, easy, but auth required,
|
|
62
|
+
full read but limited modification
|
|
63
|
+
|
|
64
|
+
REFLECTED XSS WITH CSP
|
|
65
|
+
AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N
|
|
66
|
+
Score : 4.7 MEDIUM
|
|
67
|
+
Reason : CSP mitigates impact, interaction required,
|
|
68
|
+
higher complexity with partial CSP
|
|
69
|
+
|
|
70
|
+
MISSING X-CONTENT-TYPE-OPTIONS HEADER
|
|
71
|
+
AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:N/A:N
|
|
72
|
+
Score : 3.1 LOW
|
|
73
|
+
Reason : Complex exploitation, interaction required,
|
|
74
|
+
limited impact
|
|
75
|
+
|
|
76
|
+
═══════════════════════════════════════════════════════════════
|
|
77
|
+
SCORING DECISIONS FOR THE AGENT
|
|
78
|
+
═══════════════════════════════════════════════════════════════
|
|
79
|
+
|
|
80
|
+
WHEN TO RAISE ONE LEVEL:
|
|
81
|
+
→ Endpoint is accessible without authentication
|
|
82
|
+
→ PII/financial/health data is involved
|
|
83
|
+
→ Exploitation is documented with a public PoC
|
|
84
|
+
→ The vulnerability is in the critical path (auth, payment)
|
|
85
|
+
→ No other protection layers
|
|
86
|
+
|
|
87
|
+
WHEN TO LOWER ONE LEVEL:
|
|
88
|
+
→ Authentication required to exploit
|
|
89
|
+
→ Only non-sensitive data impacted
|
|
90
|
+
→ WAF or other protection in place and effective
|
|
91
|
+
→ Internal network access only
|
|
92
|
+
→ Exploitation requires very specific conditions
|
|
93
|
+
|
|
94
|
+
ABSOLUTE SCORING RULES:
|
|
95
|
+
→ Hardcoded prod secrets = CRITICAL minimum (always)
|
|
96
|
+
→ SQLi without auth on user data = CRITICAL (always)
|
|
97
|
+
→ Debug mode in production = HIGH minimum (always)
|
|
98
|
+
→ MD5/SHA1 password = CRITICAL (always)
|
|
99
|
+
→ JWT algorithm:none = CRITICAL (always)
|
|
100
|
+
→ AsyncStorage with auth token = HIGH (always)
|
|
101
|
+
→ Missing certificate pinning on financial app = CRITICAL
|
|
102
|
+
→ Missing certificate pinning on standard app = HIGH
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# 🎯 THREAT MODELING — CYBERAUDIT SKILL
|
|
2
|
+
# Threat modeling framework for agents
|
|
3
|
+
|
|
4
|
+
═══════════════════════════════════════════════════════════════
|
|
5
|
+
APPLIED STRIDE METHOD
|
|
6
|
+
═══════════════════════════════════════════════════════════════
|
|
7
|
+
|
|
8
|
+
STRIDE = 6 universal threat categories
|
|
9
|
+
|
|
10
|
+
S — SPOOFING (Identity spoofing)
|
|
11
|
+
Question : "Can an attacker pretend to be someone else?"
|
|
12
|
+
Web : Auth bypass, forged JWT, session hijacking, phishing
|
|
13
|
+
Mobile : Spoofed certificate, fake app, deeplink hijacking
|
|
14
|
+
Control : Strong authentication, certificate pinning, MFA
|
|
15
|
+
|
|
16
|
+
T — TAMPERING (Falsification)
|
|
17
|
+
Question : "Can an attacker modify data?"
|
|
18
|
+
Web : SQLi, CSRF, mass assignment, man-in-the-middle
|
|
19
|
+
Mobile : Binary tampering, traffic interception, storage modification
|
|
20
|
+
Control : Data integrity, signatures, HTTPS, validation
|
|
21
|
+
|
|
22
|
+
R — REPUDIATION (Non-repudiation)
|
|
23
|
+
Question : "Can an attacker deny their actions?"
|
|
24
|
+
Web : Insufficient logs, missing audit trail
|
|
25
|
+
Mobile : No logging of sensitive actions
|
|
26
|
+
Control : Complete logging, timestamp, action signing
|
|
27
|
+
|
|
28
|
+
I — INFORMATION DISCLOSURE (Information disclosure)
|
|
29
|
+
Question : "Can an attacker access confidential data?"
|
|
30
|
+
Web : IDOR, error messages, source maps, exposed secrets
|
|
31
|
+
Mobile : Plaintext storage, sensitive logs, binary strings
|
|
32
|
+
Control : Encryption, least privilege, output filtering
|
|
33
|
+
|
|
34
|
+
D — DENIAL OF SERVICE (Denial of service)
|
|
35
|
+
Question : "Can an attacker make the service unavailable?"
|
|
36
|
+
Web : No rate limiting, expensive requests not limited
|
|
37
|
+
Mobile : Battery drain attacks, excessive network requests
|
|
38
|
+
Control : Rate limiting, timeouts, circuit breakers
|
|
39
|
+
|
|
40
|
+
E — ELEVATION OF PRIVILEGE (Privilege escalation)
|
|
41
|
+
Question : "Can an attacker obtain more rights?"
|
|
42
|
+
Web : BFLA, mass role assignment, IDOR on admin
|
|
43
|
+
Mobile : Jailbreak bypass, root privilege abuse
|
|
44
|
+
Control : Strict RBAC, rights verification, least privilege
|
|
45
|
+
|
|
46
|
+
═══════════════════════════════════════════════════════════════
|
|
47
|
+
ATTACK TREE BY APP TYPE
|
|
48
|
+
═══════════════════════════════════════════════════════════════
|
|
49
|
+
|
|
50
|
+
E-COMMERCE (Priorities)
|
|
51
|
+
1. Payment bypass (business logic)
|
|
52
|
+
2. Credit card data theft
|
|
53
|
+
3. Account takeover → fraudulent purchase
|
|
54
|
+
4. Price manipulation
|
|
55
|
+
5. Personal data theft (GDPR)
|
|
56
|
+
|
|
57
|
+
SaaS B2B (Priorities)
|
|
58
|
+
1. Access to other tenants' data (isolation)
|
|
59
|
+
2. Admin account takeover
|
|
60
|
+
3. Mass data export
|
|
61
|
+
4. API abuse / scraping
|
|
62
|
+
5. Privilege escalation between plans
|
|
63
|
+
|
|
64
|
+
HEALTH / FINANCE APP (Priorities)
|
|
65
|
+
1. Access to others' medical/financial data
|
|
66
|
+
2. Modification of critical data
|
|
67
|
+
3. Credential compromise
|
|
68
|
+
4. Regulatory non-compliance (HIPAA, PCI-DSS)
|
|
69
|
+
5. Insufficient logging for legal audit
|
|
70
|
+
|
|
71
|
+
FINANCIAL MOBILE APP (Priorities)
|
|
72
|
+
1. Token/session theft on compromised device
|
|
73
|
+
2. Transaction interception (MitM)
|
|
74
|
+
3. Amount manipulation
|
|
75
|
+
4. Screenshot / recording of sensitive data
|
|
76
|
+
5. Root/jailbreak bypass of protections
|
|
77
|
+
|
|
78
|
+
═══════════════════════════════════════════════════════════════
|
|
79
|
+
COMMON KILL CHAINS
|
|
80
|
+
═══════════════════════════════════════════════════════════════
|
|
81
|
+
|
|
82
|
+
KILL CHAIN 1 — ACCOUNT TAKEOVER VIA RESET PASSWORD
|
|
83
|
+
1. Account enumeration via /forgot-password
|
|
84
|
+
(different message depending on whether email exists)
|
|
85
|
+
2. Predictable reset token or no expiration
|
|
86
|
+
3. Token intercepted or brute forced
|
|
87
|
+
4. Account compromised → access to all data
|
|
88
|
+
|
|
89
|
+
KILL CHAIN 2 — DATA BREACH VIA CHAINED IDOR
|
|
90
|
+
1. Discovery of an endpoint with sequential ID
|
|
91
|
+
GET /api/orders/1234
|
|
92
|
+
2. Enumeration : 1234, 1235, 1236...
|
|
93
|
+
3. Extraction of all orders/data
|
|
94
|
+
4. Personal data of all users exposed
|
|
95
|
+
|
|
96
|
+
KILL CHAIN 3 — RCE VIA FILE UPLOAD + PATH TRAVERSAL
|
|
97
|
+
1. Upload a .php file disguised as .jpg
|
|
98
|
+
(MIME type spoofed)
|
|
99
|
+
2. File stored in a web-accessible directory
|
|
100
|
+
3. Direct access to the uploaded file
|
|
101
|
+
4. PHP code execution → shell → RCE
|
|
102
|
+
|
|
103
|
+
KILL CHAIN 4 — MOBILE DATA BREACH VIA BACKUP
|
|
104
|
+
1. Android app without backup restrictions
|
|
105
|
+
android:allowBackup="true"
|
|
106
|
+
2. ADB backup extracted without root required
|
|
107
|
+
3. AsyncStorage/SharedPreferences read in plaintext
|
|
108
|
+
4. Authentication tokens extracted
|
|
109
|
+
5. Session hijacking on any device
|
|
110
|
+
|
|
111
|
+
These kill chains must be documented when the exploitation
|
|
112
|
+
conditions are met in the audited code.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# ✅ MASTER CHECKLIST WEB — CYBERAUDIT SKILL
|
|
2
|
+
# The ultimate checklist — Never skip a line
|
|
3
|
+
|
|
4
|
+
═══════════════════════════════════════════════════════════════
|
|
5
|
+
INSTRUCTIONS: Check each item. Document every ❌.
|
|
6
|
+
A ❌ = a potential finding to investigate.
|
|
7
|
+
A ⚠️ = context-dependent, investigate and justify.
|
|
8
|
+
═══════════════════════════════════════════════════════════════
|
|
9
|
+
|
|
10
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
11
|
+
SECTION 1 — SECRETS AND CONFIGURATION
|
|
12
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
13
|
+
|
|
14
|
+
□ No API key in source code
|
|
15
|
+
□ No password in source code
|
|
16
|
+
□ No private key in source code
|
|
17
|
+
□ No token in source code
|
|
18
|
+
□ No secret in comments
|
|
19
|
+
□ No secret in test files
|
|
20
|
+
□ No .env file committed in git
|
|
21
|
+
□ .env in .gitignore (check the file)
|
|
22
|
+
□ Environment variables validated at startup
|
|
23
|
+
□ Debug/development mode disabled in prod
|
|
24
|
+
□ Error handling does not reveal stack trace in prod
|
|
25
|
+
□ Headers revealing technology removed
|
|
26
|
+
(X-Powered-By, Server, X-AspNet-Version)
|
|
27
|
+
□ Version information not publicly exposed
|
|
28
|
+
□ Debug/info endpoints disabled in prod
|
|
29
|
+
(/phpinfo, /debug, /.env, /server-status, etc.)
|
|
30
|
+
|
|
31
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
32
|
+
SECTION 2 — AUTHENTICATION
|
|
33
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
34
|
+
|
|
35
|
+
□ Passwords hashed with bcrypt/argon2/scrypt
|
|
36
|
+
□ MD5, SHA1, SHA256 (without salt) never used for passwords
|
|
37
|
+
□ Unique salt per password
|
|
38
|
+
□ Strong password policy (minimum length)
|
|
39
|
+
□ Rate limiting on login attempts
|
|
40
|
+
□ Lockout after N failures (or CAPTCHA)
|
|
41
|
+
□ JWT: verify() used (not decode())
|
|
42
|
+
□ JWT: algorithm explicitly specified
|
|
43
|
+
□ JWT: algorithm "none" refused
|
|
44
|
+
□ JWT: expiration configured (access ≤ 15min)
|
|
45
|
+
□ JWT: refresh tokens with rotation
|
|
46
|
+
□ JWT: revocation possible (blacklist or rotation)
|
|
47
|
+
□ Sessions: cryptographically random ID
|
|
48
|
+
□ Sessions: regeneration after login
|
|
49
|
+
□ Sessions: invalidation on logout
|
|
50
|
+
□ Sessions: inactivity expiration configured
|
|
51
|
+
□ Reset password: random and unique token
|
|
52
|
+
□ Reset password: short expiration (15-30min)
|
|
53
|
+
□ Reset password: single-use token
|
|
54
|
+
□ Reset password: message not revealing account existence
|
|
55
|
+
□ OAuth: state parameter validated (anti-CSRF)
|
|
56
|
+
□ OAuth: redirect_uri strictly validated
|
|
57
|
+
□ MFA: available on sensitive accounts
|
|
58
|
+
□ Default credentials nonexistent
|
|
59
|
+
|
|
60
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
61
|
+
SECTION 3 — AUTHORIZATION
|
|
62
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
63
|
+
|
|
64
|
+
□ Auth verification server-side on EVERY endpoint
|
|
65
|
+
□ Public routes explicitly defined (whitelist)
|
|
66
|
+
□ RBAC implemented and verified server-side
|
|
67
|
+
□ Ownership verified for every resource access
|
|
68
|
+
(Can the user access THIS object?)
|
|
69
|
+
□ Predictable IDs avoided (UUIDs or opaque IDs)
|
|
70
|
+
□ Mass assignment: whitelist of allowed fields
|
|
71
|
+
□ Sensitive fields excluded from mass updates
|
|
72
|
+
(role, is_admin, balance, verified, etc.)
|
|
73
|
+
□ Admin function access verified, not just hidden
|
|
74
|
+
□ Privilege elevation via parameter impossible
|
|
75
|
+
□ Pagination: server-side limit enforced
|
|
76
|
+
|
|
77
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
78
|
+
SECTION 4 — INJECTION
|
|
79
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
80
|
+
|
|
81
|
+
□ SQL queries: only parameterized or ORM
|
|
82
|
+
□ No variable interpolation in SQL queries
|
|
83
|
+
□ NoSQL queries: injection operators impossible
|
|
84
|
+
□ OS commands: exec/system with user input absent
|
|
85
|
+
□ Templates: user input not injected into engines
|
|
86
|
+
□ File paths: confined to allowed directory
|
|
87
|
+
□ Uploaded filenames: regenerated randomly
|
|
88
|
+
□ XML: external entities disabled
|
|
89
|
+
□ GraphQL: introspection disabled in prod
|
|
90
|
+
□ GraphQL: query depth and complexity limited
|
|
91
|
+
□ Logs: log injection impossible (newlines filtered)
|
|
92
|
+
|
|
93
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
94
|
+
SECTION 5 — XSS AND OUTPUT
|
|
95
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
96
|
+
|
|
97
|
+
□ All HTML output encoded/escaped
|
|
98
|
+
□ Direct innerHTML absent (or sanitized)
|
|
99
|
+
□ dangerouslySetInnerHTML with DOMPurify if used
|
|
100
|
+
□ Blade {!! !!} with HTMLPurifier if used
|
|
101
|
+
□ URLs in href validated (not javascript:)
|
|
102
|
+
□ Correct Content-Type on all responses
|
|
103
|
+
□ JSON: Content-Type: application/json (not text/html)
|
|
104
|
+
□ CSP configured and restrictive
|
|
105
|
+
□ X-Content-Type-Options: nosniff present
|
|
106
|
+
|
|
107
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
108
|
+
SECTION 6 — CSRF AND CLICKJACKING
|
|
109
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
110
|
+
|
|
111
|
+
□ CSRF tokens on all POST forms
|
|
112
|
+
□ CSRF verification server-side
|
|
113
|
+
□ SameSite=Strict or Lax on session cookies
|
|
114
|
+
□ Webhooks: HMAC signature verified
|
|
115
|
+
□ X-Frame-Options or CSP frame-ancestors configured
|
|
116
|
+
□ Destructive actions require explicit confirmation
|
|
117
|
+
|
|
118
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
119
|
+
SECTION 7 — SECURITY HEADERS
|
|
120
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
121
|
+
|
|
122
|
+
□ Content-Security-Policy configured
|
|
123
|
+
□ Strict-Transport-Security configured (HSTS)
|
|
124
|
+
(max-age=31536000; includeSubDomains; preload)
|
|
125
|
+
□ X-Frame-Options: DENY or SAMEORIGIN
|
|
126
|
+
□ X-Content-Type-Options: nosniff
|
|
127
|
+
□ Referrer-Policy configured
|
|
128
|
+
□ Permissions-Policy configured
|
|
129
|
+
□ Cache-Control: no-store on sensitive data
|
|
130
|
+
□ HTTPS only (no HTTP downgrade possible)
|
|
131
|
+
|
|
132
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
133
|
+
SECTION 8 — CORS
|
|
134
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
135
|
+
|
|
136
|
+
□ Access-Control-Allow-Origin: * absent on authenticated APIs
|
|
137
|
+
□ CORS origins whitelisted explicitly
|
|
138
|
+
□ credentials: true never combined with origin: *
|
|
139
|
+
□ CORS methods limited to necessary
|
|
140
|
+
□ CORS headers limited to necessary
|
|
141
|
+
□ Preflight properly handled
|
|
142
|
+
|
|
143
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
144
|
+
SECTION 9 — FILE UPLOAD
|
|
145
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
146
|
+
|
|
147
|
+
□ MIME type verified server-side (not just extension)
|
|
148
|
+
□ Whitelist of allowed extensions
|
|
149
|
+
□ Maximum size enforced
|
|
150
|
+
□ Filename regenerated randomly
|
|
151
|
+
□ Files stored outside webroot
|
|
152
|
+
□ Code execution impossible in upload folder
|
|
153
|
+
□ Antivirus scan on uploads (if critical)
|
|
154
|
+
□ Image resize/recompress to strip metadata
|
|
155
|
+
|
|
156
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
157
|
+
SECTION 10 — DEPENDENCIES
|
|
158
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
159
|
+
|
|
160
|
+
□ npm audit / yarn audit / composer audit: clean?
|
|
161
|
+
□ No critical or high CVE unaddressed
|
|
162
|
+
□ Lock files committed (package-lock.json, yarn.lock, composer.lock)
|
|
163
|
+
□ Direct dependencies only from npm/packagist
|
|
164
|
+
□ Main framework up to date (or close)
|
|
165
|
+
□ Abandoned dependencies identified and replaced
|
|
166
|
+
|
|
167
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
168
|
+
SECTION 11 — RATE LIMITING & DOS
|
|
169
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
170
|
+
|
|
171
|
+
□ Global rate limiting configured
|
|
172
|
+
□ Specific rate limiting on: login, register, reset-password
|
|
173
|
+
□ Rate limiting on expensive endpoints (upload, export, search)
|
|
174
|
+
□ Pagination: page size limited server-side
|
|
175
|
+
□ Timeouts configured on outgoing requests
|
|
176
|
+
□ Body size limited (no infinite upload in memory)
|
|
177
|
+
|
|
178
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
179
|
+
SECTION 12 — LOGGING AND MONITORING
|
|
180
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
181
|
+
|
|
182
|
+
□ Auth events logged (login, logout, failures)
|
|
183
|
+
□ Sensitive actions logged (deletion, role modification)
|
|
184
|
+
□ Logs do not contain sensitive data
|
|
185
|
+
(no passwords, tokens, card numbers in logs)
|
|
186
|
+
□ Logs structured (JSON) and centralized
|
|
187
|
+
□ Alerts configured on suspicious events
|
|
188
|
+
□ Logs integrity-protected (append-only or SIEM)
|
|
189
|
+
|
|
190
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
191
|
+
SECTION 13 — SSRF
|
|
192
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
193
|
+
|
|
194
|
+
□ No HTTP request based on a user-provided URL
|
|
195
|
+
without strict validation
|
|
196
|
+
□ If URL fetch necessary: whitelist of allowed domains
|
|
197
|
+
□ Access to cloud metadata blocked
|
|
198
|
+
(169.254.169.254, fd00:ec2::254)
|
|
199
|
+
□ Access to internal network (10.x, 172.x, 192.168.x) blocked
|
|
200
|
+
□ Redirect following: limited and validated
|
|
201
|
+
□ DNS rebinding: protections in place
|
|
202
|
+
|
|
203
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
204
|
+
SECTION 14 — CRYPTOGRAPHY
|
|
205
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
206
|
+
|
|
207
|
+
□ Modern algorithms only:
|
|
208
|
+
Encryption : AES-256-GCM, ChaCha20-Poly1305
|
|
209
|
+
Data hashing : SHA-256 minimum
|
|
210
|
+
Password hash : bcrypt, argon2, scrypt
|
|
211
|
+
Asymmetric : RSA-2048+, ECDSA P-256+
|
|
212
|
+
□ DES, 3DES, RC4, MD5, SHA1 absent
|
|
213
|
+
□ Encryption keys stored separately from data
|
|
214
|
+
□ Unique IV/Nonce per encryption
|
|
215
|
+
□ Cryptographically secure random generation
|
|
216
|
+
(crypto.randomBytes, openssl_random_pseudo_bytes)
|
|
217
|
+
□ Sensitive data encrypted in database
|
|
218
|
+
□ Encryption keys rotated regularly
|
|
219
|
+
|
|
220
|
+
═══════════════════════════════════════════════════════════════
|
|
221
|
+
SCORE : [___ compliant items] / [___ applicable items] = ____%
|
|
222
|
+
═══════════════════════════════════════════════════════════════
|