agent-security-scanner-mcp 1.1.1 → 1.2.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 +55 -15
- package/package.json +4 -2
- package/rules/c.security.yaml +459 -0
- package/rules/php.security.yaml +461 -0
- package/rules/ruby.security.yaml +400 -0
- package/rules/terraform.security.yaml +505 -0
package/README.md
CHANGED
|
@@ -2,13 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
A powerful MCP (Model Context Protocol) server for real-time security vulnerability scanning. Integrates with Claude Desktop, Claude Code, OpenCode.ai, Kilo Code, and any MCP-compatible client to automatically detect and fix security issues as you code.
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**275 Semgrep-aligned security rules | 105 auto-fix templates | 100% fix coverage | Package hallucination detection**
|
|
6
|
+
|
|
7
|
+
## What's New in v1.2.0
|
|
8
|
+
|
|
9
|
+
- **110 new security rules** - Now covering 10 languages and IaC
|
|
10
|
+
- **PHP support** - SQL injection, XSS, command injection, deserialization, file inclusion
|
|
11
|
+
- **Ruby/Rails support** - Mass assignment, CSRF, unsafe eval, YAML deserialization
|
|
12
|
+
- **C/C++ support** - Buffer overflow, format strings, memory safety, use-after-free
|
|
13
|
+
- **Terraform support** - AWS S3, IAM, RDS, security groups, CloudTrail
|
|
14
|
+
- **Kubernetes support** - Privileged containers, RBAC, network policies, secrets
|
|
6
15
|
|
|
7
16
|
## Features
|
|
8
17
|
|
|
9
18
|
- **Real-time scanning** - Detect vulnerabilities instantly as you write code
|
|
10
19
|
- **Auto-fix suggestions** - Get actionable fixes for every security issue
|
|
11
|
-
- **Multi-language support** - JavaScript, TypeScript, Python, Java, Go, Dockerfile
|
|
20
|
+
- **Multi-language support** - JavaScript, TypeScript, Python, Java, Go, PHP, Ruby, C/C++, Dockerfile, Terraform, Kubernetes
|
|
12
21
|
- **Semgrep-compatible** - Rules aligned with Semgrep registry format
|
|
13
22
|
- **CWE & OWASP mapped** - Every rule includes CWE and OWASP references
|
|
14
23
|
- **Hallucination detection** - Detect AI-invented package names (Dart, Perl, Raku)
|
|
@@ -313,7 +322,7 @@ Package lists are sourced from:
|
|
|
313
322
|
|
|
314
323
|
---
|
|
315
324
|
|
|
316
|
-
## Security Rules (
|
|
325
|
+
## Security Rules (275 total)
|
|
317
326
|
|
|
318
327
|
### By Language
|
|
319
328
|
|
|
@@ -323,6 +332,10 @@ Package lists are sourced from:
|
|
|
323
332
|
| Python | 36 | Injection, deserialization, crypto, XXE |
|
|
324
333
|
| Java | 27 | Injection, XXE, crypto, deserialization |
|
|
325
334
|
| Go | 22 | Injection, crypto, race conditions |
|
|
335
|
+
| **PHP** | 25 | SQL injection, XSS, command injection, deserialization |
|
|
336
|
+
| **Ruby/Rails** | 25 | Mass assignment, CSRF, eval, YAML deserialization |
|
|
337
|
+
| **C/C++** | 25 | Buffer overflow, format string, memory safety |
|
|
338
|
+
| **Terraform/K8s** | 35 | AWS misconfig, IAM, privileged containers, RBAC |
|
|
326
339
|
| Dockerfile | 18 | Secrets, permissions, best practices |
|
|
327
340
|
| Generic (Secrets) | 31 | API keys, tokens, passwords |
|
|
328
341
|
|
|
@@ -330,18 +343,18 @@ Package lists are sourced from:
|
|
|
330
343
|
|
|
331
344
|
| Category | Rules | Auto-Fix |
|
|
332
345
|
|----------|-------|----------|
|
|
333
|
-
| **Injection (SQL, Command, XSS)** |
|
|
334
|
-
| **Hardcoded Secrets** |
|
|
335
|
-
| **Weak Cryptography** |
|
|
336
|
-
| **Insecure Deserialization** |
|
|
337
|
-
| **
|
|
338
|
-
| **
|
|
339
|
-
| **
|
|
340
|
-
| **
|
|
341
|
-
| **
|
|
342
|
-
| **
|
|
343
|
-
| **
|
|
344
|
-
| **Other** |
|
|
346
|
+
| **Injection (SQL, Command, XSS)** | 55 | Yes |
|
|
347
|
+
| **Hardcoded Secrets** | 50 | Yes |
|
|
348
|
+
| **Weak Cryptography** | 25 | Yes |
|
|
349
|
+
| **Insecure Deserialization** | 18 | Yes |
|
|
350
|
+
| **Memory Safety (C/C++)** | 20 | Yes |
|
|
351
|
+
| **Infrastructure as Code** | 35 | Yes |
|
|
352
|
+
| **Path Traversal** | 10 | Yes |
|
|
353
|
+
| **SSRF** | 8 | Yes |
|
|
354
|
+
| **XXE** | 8 | Yes |
|
|
355
|
+
| **SSL/TLS Issues** | 12 | Yes |
|
|
356
|
+
| **CSRF** | 6 | Yes |
|
|
357
|
+
| **Other** | 28 | Yes |
|
|
345
358
|
|
|
346
359
|
## Auto-Fix Templates (105 total)
|
|
347
360
|
|
|
@@ -425,6 +438,30 @@ Claude will use `fix_security` to:
|
|
|
425
438
|
- Open Redirects
|
|
426
439
|
- CORS Misconfiguration
|
|
427
440
|
|
|
441
|
+
### Memory Safety (C/C++)
|
|
442
|
+
- Buffer Overflow (strcpy, strcat, sprintf, gets)
|
|
443
|
+
- Format String Vulnerabilities
|
|
444
|
+
- Use-After-Free
|
|
445
|
+
- Double-Free
|
|
446
|
+
- Integer Overflow in malloc
|
|
447
|
+
- Insecure memset (optimized away)
|
|
448
|
+
- Unsafe temp files (mktemp, tmpnam)
|
|
449
|
+
|
|
450
|
+
### Infrastructure as Code
|
|
451
|
+
- AWS S3 Public Access
|
|
452
|
+
- Security Groups Open to World (SSH, RDP)
|
|
453
|
+
- IAM Admin Policies (Action:*, Resource:*)
|
|
454
|
+
- RDS Public Access / Unencrypted
|
|
455
|
+
- CloudTrail Disabled
|
|
456
|
+
- KMS Key Rotation Disabled
|
|
457
|
+
- EBS Unencrypted
|
|
458
|
+
- EC2 IMDSv1 Enabled
|
|
459
|
+
- Kubernetes Privileged Containers
|
|
460
|
+
- K8s Run as Root
|
|
461
|
+
- K8s Host Network/PID
|
|
462
|
+
- RBAC Wildcard Permissions
|
|
463
|
+
- Cluster Admin Bindings
|
|
464
|
+
|
|
428
465
|
### Other
|
|
429
466
|
- Path Traversal
|
|
430
467
|
- XXE (XML External Entities)
|
|
@@ -433,6 +470,9 @@ Claude will use `fix_security` to:
|
|
|
433
470
|
- Prototype Pollution
|
|
434
471
|
- ReDoS (Regex DoS)
|
|
435
472
|
- Race Conditions
|
|
473
|
+
- Open Redirects
|
|
474
|
+
- Mass Assignment (Rails)
|
|
475
|
+
- Unsafe Eval/Constantize
|
|
436
476
|
|
|
437
477
|
## Contributing
|
|
438
478
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-security-scanner-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "MCP server for security scanning & package hallucination detection
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "MCP server for security scanning & package hallucination detection. Works with Claude Desktop, Claude Code, OpenCode, Kilo Code. Detects SQL injection, XSS, secrets, and AI-invented packages.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
"mcp",
|
|
15
15
|
"model-context-protocol",
|
|
16
16
|
"claude",
|
|
17
|
+
"opencode",
|
|
18
|
+
"kilocode",
|
|
17
19
|
"security",
|
|
18
20
|
"scanner",
|
|
19
21
|
"vulnerability",
|
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# C/C++ SECURITY RULES - Buffer Overflow (Dangerous Functions)
|
|
4
|
+
# =============================================================================
|
|
5
|
+
|
|
6
|
+
- id: c.lang.security.audit.strcpy-usage
|
|
7
|
+
languages: [c, cpp]
|
|
8
|
+
severity: ERROR
|
|
9
|
+
message: "strcpy is unsafe and can cause buffer overflow. Use strncpy or strlcpy with bounds checking."
|
|
10
|
+
patterns:
|
|
11
|
+
- "\\bstrcpy\\s*\\("
|
|
12
|
+
metadata:
|
|
13
|
+
cwe: "CWE-120"
|
|
14
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
15
|
+
confidence: HIGH
|
|
16
|
+
references:
|
|
17
|
+
- https://semgrep.dev/r/c.lang.security.insecure-use-strcpy
|
|
18
|
+
- https://cwe.mitre.org/data/definitions/120.html
|
|
19
|
+
|
|
20
|
+
- id: c.lang.security.audit.strcat-usage
|
|
21
|
+
languages: [c, cpp]
|
|
22
|
+
severity: ERROR
|
|
23
|
+
message: "strcat is unsafe and can cause buffer overflow. Use strncat or strlcat with bounds checking."
|
|
24
|
+
patterns:
|
|
25
|
+
- "\\bstrcat\\s*\\("
|
|
26
|
+
metadata:
|
|
27
|
+
cwe: "CWE-120"
|
|
28
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
29
|
+
confidence: HIGH
|
|
30
|
+
references:
|
|
31
|
+
- https://cwe.mitre.org/data/definitions/120.html
|
|
32
|
+
|
|
33
|
+
- id: c.lang.security.audit.gets-usage
|
|
34
|
+
languages: [c, cpp]
|
|
35
|
+
severity: ERROR
|
|
36
|
+
message: "gets() is extremely dangerous and removed in C11. Use fgets() with buffer size."
|
|
37
|
+
patterns:
|
|
38
|
+
- "\\bgets\\s*\\("
|
|
39
|
+
metadata:
|
|
40
|
+
cwe: "CWE-242"
|
|
41
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
42
|
+
confidence: HIGH
|
|
43
|
+
references:
|
|
44
|
+
- https://semgrep.dev/r/c.lang.security.insecure-use-gets
|
|
45
|
+
- https://cwe.mitre.org/data/definitions/242.html
|
|
46
|
+
|
|
47
|
+
- id: c.lang.security.audit.sprintf-usage
|
|
48
|
+
languages: [c, cpp]
|
|
49
|
+
severity: ERROR
|
|
50
|
+
message: "sprintf can cause buffer overflow. Use snprintf with buffer size limit."
|
|
51
|
+
patterns:
|
|
52
|
+
- "\\bsprintf\\s*\\("
|
|
53
|
+
metadata:
|
|
54
|
+
cwe: "CWE-120"
|
|
55
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
56
|
+
confidence: HIGH
|
|
57
|
+
references:
|
|
58
|
+
- https://semgrep.dev/r/c.lang.security.insecure-use-sprintf
|
|
59
|
+
- https://cwe.mitre.org/data/definitions/120.html
|
|
60
|
+
|
|
61
|
+
- id: c.lang.security.audit.vsprintf-usage
|
|
62
|
+
languages: [c, cpp]
|
|
63
|
+
severity: ERROR
|
|
64
|
+
message: "vsprintf can cause buffer overflow. Use vsnprintf with buffer size limit."
|
|
65
|
+
patterns:
|
|
66
|
+
- "\\bvsprintf\\s*\\("
|
|
67
|
+
metadata:
|
|
68
|
+
cwe: "CWE-120"
|
|
69
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
70
|
+
confidence: HIGH
|
|
71
|
+
references:
|
|
72
|
+
- https://cwe.mitre.org/data/definitions/120.html
|
|
73
|
+
|
|
74
|
+
# =============================================================================
|
|
75
|
+
# C/C++ SECURITY RULES - Format String Vulnerabilities
|
|
76
|
+
# =============================================================================
|
|
77
|
+
|
|
78
|
+
- id: c.lang.security.audit.format-string-printf
|
|
79
|
+
languages: [c, cpp]
|
|
80
|
+
severity: ERROR
|
|
81
|
+
message: "Format string vulnerability. User input as format string can lead to crashes or code execution. Use printf(\"%s\", str)."
|
|
82
|
+
patterns:
|
|
83
|
+
- "printf\\s*\\(\\s*[a-zA-Z_][a-zA-Z0-9_]*\\s*\\)"
|
|
84
|
+
- "fprintf\\s*\\([^,]*,\\s*[a-zA-Z_][a-zA-Z0-9_]*\\s*\\)"
|
|
85
|
+
- "sprintf\\s*\\([^,]*,\\s*[a-zA-Z_][a-zA-Z0-9_]*\\s*\\)"
|
|
86
|
+
metadata:
|
|
87
|
+
cwe: "CWE-134"
|
|
88
|
+
owasp: "A03:2021 - Injection"
|
|
89
|
+
confidence: MEDIUM
|
|
90
|
+
references:
|
|
91
|
+
- https://semgrep.dev/r/c.lang.security.format-string
|
|
92
|
+
- https://cwe.mitre.org/data/definitions/134.html
|
|
93
|
+
|
|
94
|
+
- id: c.lang.security.audit.format-string-syslog
|
|
95
|
+
languages: [c, cpp]
|
|
96
|
+
severity: ERROR
|
|
97
|
+
message: "Format string vulnerability in syslog. Use syslog(LOG_INFO, \"%s\", str)."
|
|
98
|
+
patterns:
|
|
99
|
+
- "syslog\\s*\\([^,]*,\\s*[a-zA-Z_][a-zA-Z0-9_]*\\s*\\)"
|
|
100
|
+
metadata:
|
|
101
|
+
cwe: "CWE-134"
|
|
102
|
+
owasp: "A03:2021 - Injection"
|
|
103
|
+
confidence: HIGH
|
|
104
|
+
references:
|
|
105
|
+
- https://cwe.mitre.org/data/definitions/134.html
|
|
106
|
+
|
|
107
|
+
# =============================================================================
|
|
108
|
+
# C/C++ SECURITY RULES - Memory Management
|
|
109
|
+
# =============================================================================
|
|
110
|
+
|
|
111
|
+
- id: c.lang.security.audit.use-after-free
|
|
112
|
+
languages: [c, cpp]
|
|
113
|
+
severity: ERROR
|
|
114
|
+
message: "Potential use-after-free. Set pointer to NULL after free() to prevent accidental reuse."
|
|
115
|
+
patterns:
|
|
116
|
+
- "free\\s*\\([^)]+\\)\\s*;(?!\\s*\\w+\\s*=\\s*NULL)"
|
|
117
|
+
metadata:
|
|
118
|
+
cwe: "CWE-416"
|
|
119
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
120
|
+
confidence: MEDIUM
|
|
121
|
+
references:
|
|
122
|
+
- https://semgrep.dev/r/c.lang.security.use-after-free
|
|
123
|
+
- https://cwe.mitre.org/data/definitions/416.html
|
|
124
|
+
|
|
125
|
+
- id: c.lang.security.audit.double-free
|
|
126
|
+
languages: [c, cpp]
|
|
127
|
+
severity: ERROR
|
|
128
|
+
message: "Potential double-free vulnerability. Track free() calls and set pointers to NULL."
|
|
129
|
+
patterns:
|
|
130
|
+
- "free\\s*\\(\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\)[^}]*free\\s*\\(\\s*\\1\\s*\\)"
|
|
131
|
+
metadata:
|
|
132
|
+
cwe: "CWE-415"
|
|
133
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
134
|
+
confidence: MEDIUM
|
|
135
|
+
references:
|
|
136
|
+
- https://semgrep.dev/r/c.lang.security.double-free
|
|
137
|
+
- https://cwe.mitre.org/data/definitions/415.html
|
|
138
|
+
|
|
139
|
+
- id: c.lang.security.audit.null-dereference
|
|
140
|
+
languages: [c, cpp]
|
|
141
|
+
severity: WARNING
|
|
142
|
+
message: "Potential null pointer dereference. Check pointer before dereferencing."
|
|
143
|
+
patterns:
|
|
144
|
+
- "\\*\\s*\\([^)]*malloc\\s*\\("
|
|
145
|
+
- "malloc\\s*\\([^)]*\\)\\s*;[^}]*\\*"
|
|
146
|
+
metadata:
|
|
147
|
+
cwe: "CWE-476"
|
|
148
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
149
|
+
confidence: LOW
|
|
150
|
+
references:
|
|
151
|
+
- https://cwe.mitre.org/data/definitions/476.html
|
|
152
|
+
|
|
153
|
+
# =============================================================================
|
|
154
|
+
# C/C++ SECURITY RULES - Integer Overflow
|
|
155
|
+
# =============================================================================
|
|
156
|
+
|
|
157
|
+
- id: c.lang.security.audit.integer-overflow-malloc
|
|
158
|
+
languages: [c, cpp]
|
|
159
|
+
severity: ERROR
|
|
160
|
+
message: "Potential integer overflow in malloc size calculation. Check for overflow before allocation."
|
|
161
|
+
patterns:
|
|
162
|
+
- "malloc\\s*\\([^)]*\\*[^)]*\\)"
|
|
163
|
+
- "calloc\\s*\\([^)]*\\*[^)]*\\)"
|
|
164
|
+
- "realloc\\s*\\([^,]*,[^)]*\\*[^)]*\\)"
|
|
165
|
+
metadata:
|
|
166
|
+
cwe: "CWE-190"
|
|
167
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
168
|
+
confidence: MEDIUM
|
|
169
|
+
references:
|
|
170
|
+
- https://cwe.mitre.org/data/definitions/190.html
|
|
171
|
+
|
|
172
|
+
# =============================================================================
|
|
173
|
+
# C/C++ SECURITY RULES - Unsafe Functions
|
|
174
|
+
# =============================================================================
|
|
175
|
+
|
|
176
|
+
- id: c.lang.security.audit.scanf-usage
|
|
177
|
+
languages: [c, cpp]
|
|
178
|
+
severity: WARNING
|
|
179
|
+
message: "scanf without width limit can overflow buffer. Use scanf(\"%99s\", buf) with width specifier."
|
|
180
|
+
patterns:
|
|
181
|
+
- "scanf\\s*\\([^)]*%s"
|
|
182
|
+
- "fscanf\\s*\\([^)]*%s"
|
|
183
|
+
- "sscanf\\s*\\([^)]*%s"
|
|
184
|
+
metadata:
|
|
185
|
+
cwe: "CWE-120"
|
|
186
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
187
|
+
confidence: MEDIUM
|
|
188
|
+
references:
|
|
189
|
+
- https://semgrep.dev/r/c.lang.security.insecure-use-scanf
|
|
190
|
+
- https://cwe.mitre.org/data/definitions/120.html
|
|
191
|
+
|
|
192
|
+
- id: c.lang.security.audit.strtok-usage
|
|
193
|
+
languages: [c, cpp]
|
|
194
|
+
severity: WARNING
|
|
195
|
+
message: "strtok is not thread-safe and modifies input. Use strtok_r for thread safety."
|
|
196
|
+
patterns:
|
|
197
|
+
- "\\bstrtok\\s*\\("
|
|
198
|
+
metadata:
|
|
199
|
+
cwe: "CWE-362"
|
|
200
|
+
owasp: "A04:2021 - Insecure Design"
|
|
201
|
+
confidence: MEDIUM
|
|
202
|
+
references:
|
|
203
|
+
- https://semgrep.dev/r/c.lang.security.strtok-use
|
|
204
|
+
- https://man7.org/linux/man-pages/man3/strtok.3.html
|
|
205
|
+
|
|
206
|
+
# =============================================================================
|
|
207
|
+
# C/C++ SECURITY RULES - Command Injection
|
|
208
|
+
# =============================================================================
|
|
209
|
+
|
|
210
|
+
- id: c.lang.security.audit.system-usage
|
|
211
|
+
languages: [c, cpp]
|
|
212
|
+
severity: ERROR
|
|
213
|
+
message: "system() executes shell commands. Avoid with user input or use exec family with arguments."
|
|
214
|
+
patterns:
|
|
215
|
+
- "\\bsystem\\s*\\("
|
|
216
|
+
metadata:
|
|
217
|
+
cwe: "CWE-78"
|
|
218
|
+
owasp: "A03:2021 - Injection"
|
|
219
|
+
confidence: HIGH
|
|
220
|
+
references:
|
|
221
|
+
- https://cwe.mitre.org/data/definitions/78.html
|
|
222
|
+
|
|
223
|
+
- id: c.lang.security.audit.popen-usage
|
|
224
|
+
languages: [c, cpp]
|
|
225
|
+
severity: WARNING
|
|
226
|
+
message: "popen() can be vulnerable to command injection. Validate and sanitize input."
|
|
227
|
+
patterns:
|
|
228
|
+
- "\\bpopen\\s*\\("
|
|
229
|
+
metadata:
|
|
230
|
+
cwe: "CWE-78"
|
|
231
|
+
owasp: "A03:2021 - Injection"
|
|
232
|
+
confidence: MEDIUM
|
|
233
|
+
references:
|
|
234
|
+
- https://cwe.mitre.org/data/definitions/78.html
|
|
235
|
+
|
|
236
|
+
# =============================================================================
|
|
237
|
+
# C/C++ SECURITY RULES - Cryptography
|
|
238
|
+
# =============================================================================
|
|
239
|
+
|
|
240
|
+
- id: c.lang.security.audit.weak-random
|
|
241
|
+
languages: [c, cpp]
|
|
242
|
+
severity: WARNING
|
|
243
|
+
message: "rand() is not cryptographically secure. Use /dev/urandom or platform secure random for security."
|
|
244
|
+
patterns:
|
|
245
|
+
- "\\brand\\s*\\("
|
|
246
|
+
- "\\bsrand\\s*\\("
|
|
247
|
+
metadata:
|
|
248
|
+
cwe: "CWE-330"
|
|
249
|
+
owasp: "A02:2021 - Cryptographic Failures"
|
|
250
|
+
confidence: MEDIUM
|
|
251
|
+
references:
|
|
252
|
+
- https://cwe.mitre.org/data/definitions/330.html
|
|
253
|
+
|
|
254
|
+
- id: c.lang.security.audit.weak-hash-md5
|
|
255
|
+
languages: [c, cpp]
|
|
256
|
+
severity: WARNING
|
|
257
|
+
message: "MD5 is cryptographically broken. Use SHA-256 or stronger for security-sensitive hashing."
|
|
258
|
+
patterns:
|
|
259
|
+
- "MD5_Init\\s*\\("
|
|
260
|
+
- "MD5_Update\\s*\\("
|
|
261
|
+
- "MD5_Final\\s*\\("
|
|
262
|
+
- "MD5\\s*\\("
|
|
263
|
+
metadata:
|
|
264
|
+
cwe: "CWE-328"
|
|
265
|
+
owasp: "A02:2021 - Cryptographic Failures"
|
|
266
|
+
confidence: HIGH
|
|
267
|
+
references:
|
|
268
|
+
- https://cwe.mitre.org/data/definitions/328.html
|
|
269
|
+
|
|
270
|
+
- id: c.lang.security.audit.weak-hash-sha1
|
|
271
|
+
languages: [c, cpp]
|
|
272
|
+
severity: WARNING
|
|
273
|
+
message: "SHA1 is deprecated for security use. Use SHA-256 or stronger."
|
|
274
|
+
patterns:
|
|
275
|
+
- "SHA1_Init\\s*\\("
|
|
276
|
+
- "SHA1_Update\\s*\\("
|
|
277
|
+
- "SHA1_Final\\s*\\("
|
|
278
|
+
- "SHA1\\s*\\("
|
|
279
|
+
metadata:
|
|
280
|
+
cwe: "CWE-328"
|
|
281
|
+
owasp: "A02:2021 - Cryptographic Failures"
|
|
282
|
+
confidence: HIGH
|
|
283
|
+
references:
|
|
284
|
+
- https://cwe.mitre.org/data/definitions/328.html
|
|
285
|
+
|
|
286
|
+
- id: c.lang.security.audit.weak-cipher-des
|
|
287
|
+
languages: [c, cpp]
|
|
288
|
+
severity: ERROR
|
|
289
|
+
message: "DES is a weak cipher. Use AES-256 for encryption."
|
|
290
|
+
patterns:
|
|
291
|
+
- "DES_set_key\\s*\\("
|
|
292
|
+
- "DES_ecb_encrypt\\s*\\("
|
|
293
|
+
- "DES_cbc_encrypt\\s*\\("
|
|
294
|
+
- "EVP_des_"
|
|
295
|
+
metadata:
|
|
296
|
+
cwe: "CWE-327"
|
|
297
|
+
owasp: "A02:2021 - Cryptographic Failures"
|
|
298
|
+
confidence: HIGH
|
|
299
|
+
references:
|
|
300
|
+
- https://cwe.mitre.org/data/definitions/327.html
|
|
301
|
+
|
|
302
|
+
- id: c.lang.security.audit.ecb-mode
|
|
303
|
+
languages: [c, cpp]
|
|
304
|
+
severity: ERROR
|
|
305
|
+
message: "ECB mode is insecure. Use CBC, GCM, or other authenticated modes."
|
|
306
|
+
patterns:
|
|
307
|
+
- "EVP_aes_.*_ecb\\s*\\("
|
|
308
|
+
- "AES_ecb_encrypt\\s*\\("
|
|
309
|
+
- "_ecb\\s*\\("
|
|
310
|
+
metadata:
|
|
311
|
+
cwe: "CWE-327"
|
|
312
|
+
owasp: "A02:2021 - Cryptographic Failures"
|
|
313
|
+
confidence: HIGH
|
|
314
|
+
references:
|
|
315
|
+
- https://cwe.mitre.org/data/definitions/327.html
|
|
316
|
+
|
|
317
|
+
# =============================================================================
|
|
318
|
+
# C/C++ SECURITY RULES - Insecure memset
|
|
319
|
+
# =============================================================================
|
|
320
|
+
|
|
321
|
+
- id: c.lang.security.audit.insecure-memset
|
|
322
|
+
languages: [c, cpp]
|
|
323
|
+
severity: WARNING
|
|
324
|
+
message: "memset may be optimized away by compiler when clearing sensitive data. Use explicit_bzero or volatile."
|
|
325
|
+
patterns:
|
|
326
|
+
- "memset\\s*\\([^,]*password"
|
|
327
|
+
- "memset\\s*\\([^,]*secret"
|
|
328
|
+
- "memset\\s*\\([^,]*key"
|
|
329
|
+
metadata:
|
|
330
|
+
cwe: "CWE-14"
|
|
331
|
+
owasp: "A02:2021 - Cryptographic Failures"
|
|
332
|
+
confidence: MEDIUM
|
|
333
|
+
references:
|
|
334
|
+
- https://semgrep.dev/r/c.lang.security.insecure-use-memset
|
|
335
|
+
- https://cwe.mitre.org/data/definitions/14.html
|
|
336
|
+
|
|
337
|
+
# =============================================================================
|
|
338
|
+
# C/C++ SECURITY RULES - File Descriptor Leaks
|
|
339
|
+
# =============================================================================
|
|
340
|
+
|
|
341
|
+
- id: c.lang.security.audit.fd-leak
|
|
342
|
+
languages: [c, cpp]
|
|
343
|
+
severity: WARNING
|
|
344
|
+
message: "Potential file descriptor leak. Ensure fopen/open calls have matching fclose/close."
|
|
345
|
+
patterns:
|
|
346
|
+
- "fopen\\s*\\([^)]+\\)\\s*;(?![^}]*fclose)"
|
|
347
|
+
- "open\\s*\\([^)]+\\)\\s*;(?![^}]*close)"
|
|
348
|
+
metadata:
|
|
349
|
+
cwe: "CWE-775"
|
|
350
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
351
|
+
confidence: LOW
|
|
352
|
+
references:
|
|
353
|
+
- https://semgrep.dev/r/c.lang.security.fd-leak
|
|
354
|
+
- https://cwe.mitre.org/data/definitions/775.html
|
|
355
|
+
|
|
356
|
+
# =============================================================================
|
|
357
|
+
# C/C++ SECURITY RULES - Hardcoded Credentials
|
|
358
|
+
# =============================================================================
|
|
359
|
+
|
|
360
|
+
- id: c.lang.security.audit.hardcoded-password
|
|
361
|
+
languages: [c, cpp]
|
|
362
|
+
severity: ERROR
|
|
363
|
+
message: "Hardcoded password detected. Use environment variables or secure configuration."
|
|
364
|
+
patterns:
|
|
365
|
+
- "password\\s*=\\s*\"[^\"]{4,}\""
|
|
366
|
+
- "passwd\\s*=\\s*\"[^\"]{4,}\""
|
|
367
|
+
- "secret\\s*=\\s*\"[^\"]{4,}\""
|
|
368
|
+
- "api_key\\s*=\\s*\"[^\"]{20,}\""
|
|
369
|
+
metadata:
|
|
370
|
+
cwe: "CWE-798"
|
|
371
|
+
owasp: "A07:2021 - Identification and Authentication Failures"
|
|
372
|
+
confidence: HIGH
|
|
373
|
+
references:
|
|
374
|
+
- https://cwe.mitre.org/data/definitions/798.html
|
|
375
|
+
|
|
376
|
+
# =============================================================================
|
|
377
|
+
# C++ SPECIFIC SECURITY RULES
|
|
378
|
+
# =============================================================================
|
|
379
|
+
|
|
380
|
+
- id: cpp.lang.security.audit.new-delete-mismatch
|
|
381
|
+
languages: [cpp]
|
|
382
|
+
severity: ERROR
|
|
383
|
+
message: "new/delete mismatch. Use delete[] for arrays allocated with new[]."
|
|
384
|
+
patterns:
|
|
385
|
+
- "new\\s+[a-zA-Z_][a-zA-Z0-9_]*\\s*\\[[^\\]]+\\][^}]*delete\\s+[^\\[]"
|
|
386
|
+
metadata:
|
|
387
|
+
cwe: "CWE-762"
|
|
388
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
389
|
+
confidence: MEDIUM
|
|
390
|
+
references:
|
|
391
|
+
- https://semgrep.dev/r/cpp.lang.security.new-delete-mismatch
|
|
392
|
+
- https://cwe.mitre.org/data/definitions/762.html
|
|
393
|
+
|
|
394
|
+
- id: cpp.lang.security.audit.unsafe-reinterpret-cast
|
|
395
|
+
languages: [cpp]
|
|
396
|
+
severity: WARNING
|
|
397
|
+
message: "reinterpret_cast can lead to undefined behavior. Use safer alternatives when possible."
|
|
398
|
+
patterns:
|
|
399
|
+
- "reinterpret_cast\\s*<"
|
|
400
|
+
metadata:
|
|
401
|
+
cwe: "CWE-704"
|
|
402
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
403
|
+
confidence: LOW
|
|
404
|
+
references:
|
|
405
|
+
- https://isocpp.org/wiki/faq/casts
|
|
406
|
+
|
|
407
|
+
- id: cpp.lang.security.audit.unchecked-return
|
|
408
|
+
languages: [c, cpp]
|
|
409
|
+
severity: WARNING
|
|
410
|
+
message: "Return value not checked. Security-sensitive functions should have return values validated."
|
|
411
|
+
patterns:
|
|
412
|
+
- "\\bfread\\s*\\([^)]+\\)\\s*;"
|
|
413
|
+
- "\\bfwrite\\s*\\([^)]+\\)\\s*;"
|
|
414
|
+
- "\\bread\\s*\\([^)]+\\)\\s*;"
|
|
415
|
+
- "\\bwrite\\s*\\([^)]+\\)\\s*;"
|
|
416
|
+
metadata:
|
|
417
|
+
cwe: "CWE-252"
|
|
418
|
+
owasp: "A06:2021 - Vulnerable and Outdated Components"
|
|
419
|
+
confidence: LOW
|
|
420
|
+
references:
|
|
421
|
+
- https://semgrep.dev/r/c.lang.security.unchecked-return-value
|
|
422
|
+
- https://cwe.mitre.org/data/definitions/252.html
|
|
423
|
+
|
|
424
|
+
# =============================================================================
|
|
425
|
+
# C/C++ SECURITY RULES - Path Traversal
|
|
426
|
+
# =============================================================================
|
|
427
|
+
|
|
428
|
+
- id: c.lang.security.audit.path-traversal
|
|
429
|
+
languages: [c, cpp]
|
|
430
|
+
severity: ERROR
|
|
431
|
+
message: "Potential path traversal. Validate file paths and use realpath() to resolve canonical paths."
|
|
432
|
+
patterns:
|
|
433
|
+
- "fopen\\s*\\([^)]*\\.\\."
|
|
434
|
+
- "open\\s*\\([^)]*\\.\\."
|
|
435
|
+
metadata:
|
|
436
|
+
cwe: "CWE-22"
|
|
437
|
+
owasp: "A01:2021 - Broken Access Control"
|
|
438
|
+
confidence: HIGH
|
|
439
|
+
references:
|
|
440
|
+
- https://cwe.mitre.org/data/definitions/22.html
|
|
441
|
+
|
|
442
|
+
# =============================================================================
|
|
443
|
+
# C/C++ SECURITY RULES - Temporary Files
|
|
444
|
+
# =============================================================================
|
|
445
|
+
|
|
446
|
+
- id: c.lang.security.audit.insecure-tempfile
|
|
447
|
+
languages: [c, cpp]
|
|
448
|
+
severity: WARNING
|
|
449
|
+
message: "mktemp is insecure due to race conditions. Use mkstemp() instead."
|
|
450
|
+
patterns:
|
|
451
|
+
- "\\bmktemp\\s*\\("
|
|
452
|
+
- "\\btmpnam\\s*\\("
|
|
453
|
+
- "\\btempnam\\s*\\("
|
|
454
|
+
metadata:
|
|
455
|
+
cwe: "CWE-377"
|
|
456
|
+
owasp: "A01:2021 - Broken Access Control"
|
|
457
|
+
confidence: HIGH
|
|
458
|
+
references:
|
|
459
|
+
- https://cwe.mitre.org/data/definitions/377.html
|