agent-security-scanner-mcp 1.1.2 → 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 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
- **165 Semgrep-aligned security rules | 105 auto-fix templates | 100% fix coverage | Package hallucination detection**
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 (165 total)
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)** | 35 | Yes |
334
- | **Hardcoded Secrets** | 45 | Yes |
335
- | **Weak Cryptography** | 18 | Yes |
336
- | **Insecure Deserialization** | 12 | Yes |
337
- | **Path Traversal** | 6 | Yes |
338
- | **SSRF** | 6 | Yes |
339
- | **XXE** | 6 | Yes |
340
- | **SSL/TLS Issues** | 8 | Yes |
341
- | **CSRF** | 4 | Yes |
342
- | **JWT Vulnerabilities** | 6 | Yes |
343
- | **Dockerfile Security** | 18 | Yes |
344
- | **Other** | 11 | Yes |
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,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-security-scanner-mcp",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
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",
@@ -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