@runsec/mcp 1.0.1

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.
Files changed (40) hide show
  1. package/dist/index.js +578 -0
  2. package/package.json +43 -0
  3. package/src/rules/data/rule-compliance-map.json +43563 -0
  4. package/src/rules/data/semgrep-rules/README-taint-overlays.md +21 -0
  5. package/src/rules/data/semgrep-rules/advanced-agent-cloud.yaml +802 -0
  6. package/src/rules/data/semgrep-rules/app-logic.yaml +445 -0
  7. package/src/rules/data/semgrep-rules/auth-keycloak.yaml +831 -0
  8. package/src/rules/data/semgrep-rules/browser-agent.yaml +260 -0
  9. package/src/rules/data/semgrep-rules/cloud-secrets.yaml +316 -0
  10. package/src/rules/data/semgrep-rules/csharp-dotnet.yaml +4864 -0
  11. package/src/rules/data/semgrep-rules/desktop-electron-pro.yaml +30 -0
  12. package/src/rules/data/semgrep-rules/desktop-vsto-suite.yaml +2759 -0
  13. package/src/rules/data/semgrep-rules/devops-security.yaml +393 -0
  14. package/src/rules/data/semgrep-rules/domain-access-management.yaml +1023 -0
  15. package/src/rules/data/semgrep-rules/domain-data-privacy.yaml +852 -0
  16. package/src/rules/data/semgrep-rules/domain-input-validation.yaml +2894 -0
  17. package/src/rules/data/semgrep-rules/domain-platform-hardening.yaml +1715 -0
  18. package/src/rules/data/semgrep-rules/ds-ml-security.yaml +2431 -0
  19. package/src/rules/data/semgrep-rules/fastapi-async.yaml +5953 -0
  20. package/src/rules/data/semgrep-rules/frontend-react.yaml +4035 -0
  21. package/src/rules/data/semgrep-rules/frontend-security.yaml +200 -0
  22. package/src/rules/data/semgrep-rules/go-core.yaml +4959 -0
  23. package/src/rules/data/semgrep-rules/hft-cpp-security.yaml +631 -0
  24. package/src/rules/data/semgrep-rules/infra-k8s-helm.yaml +4968 -0
  25. package/src/rules/data/semgrep-rules/integration-security.yaml +2362 -0
  26. package/src/rules/data/semgrep-rules/java-enterprise.yaml +14756 -0
  27. package/src/rules/data/semgrep-rules/java-spring.yaml +397 -0
  28. package/src/rules/data/semgrep-rules/license-compliance.yaml +186 -0
  29. package/src/rules/data/semgrep-rules/mobile-flutter.yaml +37 -0
  30. package/src/rules/data/semgrep-rules/mobile-security.yaml +721 -0
  31. package/src/rules/data/semgrep-rules/nodejs-nestjs.yaml +5164 -0
  32. package/src/rules/data/semgrep-rules/nodejs-security.yaml +326 -0
  33. package/src/rules/data/semgrep-rules/observability.yaml +381 -0
  34. package/src/rules/data/semgrep-rules/php-security.yaml +3601 -0
  35. package/src/rules/data/semgrep-rules/python-backend-pro.yaml +30 -0
  36. package/src/rules/data/semgrep-rules/python-django.yaml +181 -0
  37. package/src/rules/data/semgrep-rules/python-security.yaml +284 -0
  38. package/src/rules/data/semgrep-rules/ru-regulatory.yaml +496 -0
  39. package/src/rules/data/semgrep-rules/ruby-rails.yaml +3078 -0
  40. package/src/rules/data/semgrep-rules/rust-security.yaml +2701 -0
@@ -0,0 +1,852 @@
1
+ rules:
2
+ - id: runsec.domain-data-privacy.fts-002
3
+ metadata:
4
+ runsec_version: v1.0
5
+ confidence: |-
6
+ 0.9
7
+ exploit_scenario: |-
8
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
9
+ fix_template: |-
10
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
11
+ pattern-either:
12
+ - pattern: |-
13
+ localStorage.setItem("jwt", token)
14
+ - pattern-regex: 'Vulnerable:\\s*FTS\\-002\\b'
15
+ message: |-
16
+ RunSec Detection [FTS-002]: Privacy Controls
17
+ languages:
18
+ - generic
19
+ severity: WARNING
20
+ - id: runsec.domain-data-privacy.fts-003
21
+ metadata:
22
+ runsec_version: v1.0
23
+ confidence: |-
24
+ 0.9
25
+ exploit_scenario: |-
26
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
27
+ fix_template: |-
28
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
29
+ pattern-either:
30
+ - pattern: |-
31
+ console.log("token", token)
32
+ - pattern-regex: 'Vulnerable:\\s*FTS\\-003\\b'
33
+ message: |-
34
+ RunSec Detection [FTS-003]: Privacy Controls
35
+ languages:
36
+ - generic
37
+ severity: WARNING
38
+ - id: runsec.domain-data-privacy.fts-008
39
+ metadata:
40
+ runsec_version: v1.0
41
+ confidence: |-
42
+ 0.9
43
+ exploit_scenario: |-
44
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
45
+ fix_template: |-
46
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
47
+ pattern-either:
48
+ - pattern: |-
49
+ Публичные .map файлы в production
50
+ - pattern-regex: 'Vulnerable:\\s*FTS\\-008\\b'
51
+ message: |-
52
+ RunSec Detection [FTS-008]: Privacy Controls
53
+ languages:
54
+ - generic
55
+ severity: WARNING
56
+ - id: runsec.domain-data-privacy.py-002
57
+ metadata:
58
+ runsec_version: v1.0
59
+ confidence: |-
60
+ 0.9
61
+ exploit_scenario: |-
62
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
63
+ fix_template: |-
64
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
65
+ pattern-either:
66
+ - pattern: |-
67
+ except Exception as e:
68
+ return {"error": str(e)}
69
+ - pattern-regex: 'Vulnerable:\\s*PY\\-002\\b'
70
+ message: |-
71
+ RunSec Detection [PY-002]: Privacy Controls
72
+ languages:
73
+ - generic
74
+ severity: WARNING
75
+ - id: runsec.domain-data-privacy.py-009
76
+ metadata:
77
+ runsec_version: v1.0
78
+ confidence: |-
79
+ 0.9
80
+ exploit_scenario: |-
81
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
82
+ fix_template: |-
83
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
84
+ pattern-either:
85
+ - pattern: |-
86
+ SECRET_KEY = "dev-secret"
87
+ - pattern-regex: 'Vulnerable:\\s*PY\\-009\\b'
88
+ message: |-
89
+ RunSec Detection [PY-009]: Privacy Controls
90
+ languages:
91
+ - generic
92
+ severity: WARNING
93
+ - id: runsec.domain-data-privacy.py-026
94
+ metadata:
95
+ runsec_version: v1.0
96
+ confidence: |-
97
+ 0.9
98
+ exploit_scenario: |-
99
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
100
+ fix_template: |-
101
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
102
+ pattern-either:
103
+ - pattern: |-
104
+ logger.info("token=%s", token)
105
+ - pattern-regex: 'Vulnerable:\\s*PY\\-026\\b'
106
+ message: |-
107
+ RunSec Detection [PY-026]: Privacy Controls
108
+ languages:
109
+ - generic
110
+ severity: WARNING
111
+ - id: runsec.domain-data-privacy.njs-010
112
+ metadata:
113
+ runsec_version: v1.0
114
+ confidence: |-
115
+ 0.9
116
+ exploit_scenario: |-
117
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
118
+ fix_template: |-
119
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
120
+ pattern-either:
121
+ - pattern: |-
122
+ res.json({error: err.stack})
123
+ - pattern-regex: 'Vulnerable:\\s*NJS\\-010\\b'
124
+ message: |-
125
+ RunSec Detection [NJS-010]: Privacy Controls
126
+ languages:
127
+ - generic
128
+ severity: WARNING
129
+ - id: runsec.domain-data-privacy.njs-035
130
+ metadata:
131
+ runsec_version: v1.0
132
+ confidence: |-
133
+ 0.9
134
+ exploit_scenario: |-
135
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
136
+ fix_template: |-
137
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
138
+ pattern-either:
139
+ - pattern: |-
140
+ Долгоживущие plaintext значения
141
+ - pattern-regex: 'Vulnerable:\\s*NJS\\-035\\b'
142
+ message: |-
143
+ RunSec Detection [NJS-035]: Privacy Controls
144
+ languages:
145
+ - generic
146
+ severity: WARNING
147
+ - id: runsec.domain-data-privacy.rrc-001
148
+ metadata:
149
+ runsec_version: v1.0
150
+ confidence: |-
151
+ 0.9
152
+ exploit_scenario: |-
153
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
154
+ fix_template: |-
155
+ Маскирование ПДн и policy-based log redaction.
156
+ pattern-either:
157
+ - pattern: |-
158
+ Логирование ФИО/СНИЛС/email в stdout
159
+ - pattern-regex: 'Vulnerable:\\s*RRC\\-001\\b'
160
+ message: |-
161
+ RunSec Detection [RRC-001]: 152-FZ
162
+ languages:
163
+ - generic
164
+ severity: WARNING
165
+ - id: runsec.domain-data-privacy.log-012
166
+ metadata:
167
+ runsec_version: v1.0
168
+ confidence: |-
169
+ 0.9
170
+ exploit_scenario: |-
171
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
172
+ fix_template: |-
173
+ Sanitization pipeline до отправки в telemetry backend.
174
+ pattern-either:
175
+ - pattern: |-
176
+ Full payload logging in traces
177
+ - pattern-regex: 'Vulnerable:\\s*LOG\\-012\\b'
178
+ message: |-
179
+ RunSec Detection [LOG-012]: Observability Security
180
+ languages:
181
+ - generic
182
+ severity: WARNING
183
+ - id: runsec.domain-data-privacy.dja-008
184
+ metadata:
185
+ runsec_version: v1.0
186
+ confidence: |-
187
+ 0.9
188
+ exploit_scenario: |-
189
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
190
+ fix_template: |-
191
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
192
+ pattern-either:
193
+ - pattern: |-
194
+ SECRET_KEY = "django-insecure-hardcoded-secret"
195
+ - pattern-regex: 'Vulnerable:\\s*DJA\\-008\\b'
196
+ message: |-
197
+ RunSec Detection [DJA-008]: CWE-798
198
+ languages:
199
+ - generic
200
+ severity: WARNING
201
+ - id: runsec.domain-data-privacy.dja-010
202
+ metadata:
203
+ runsec_version: v1.0
204
+ confidence: |-
205
+ 0.9
206
+ exploit_scenario: |-
207
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
208
+ fix_template: |-
209
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
210
+ pattern-either:
211
+ - pattern: |-
212
+ try:
213
+ ...
214
+ except Exception as e:
215
+ return JsonResponse({"error": str(e)}, status=500)
216
+ - pattern-regex: 'Vulnerable:\\s*DJA\\-010\\b'
217
+ message: |-
218
+ RunSec Detection [DJA-010]: CWE-209
219
+ languages:
220
+ - generic
221
+ severity: WARNING
222
+ - id: runsec.domain-data-privacy.dja-015
223
+ metadata:
224
+ runsec_version: v1.0
225
+ confidence: |-
226
+ 0.9
227
+ exploit_scenario: |-
228
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
229
+ fix_template: |-
230
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
231
+ pattern-either:
232
+ - pattern: |-
233
+ LOGOUT_REDIRECT_URL = request.GET.get("next")
234
+ - pattern-regex: 'Vulnerable:\\s*DJA\\-015\\b'
235
+ message: |-
236
+ RunSec Detection [DJA-015]: CWE-601
237
+ languages:
238
+ - generic
239
+ severity: WARNING
240
+ - id: runsec.domain-data-privacy.dja-018
241
+ metadata:
242
+ runsec_version: v1.0
243
+ confidence: |-
244
+ 0.9
245
+ exploit_scenario: |-
246
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
247
+ fix_template: |-
248
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
249
+ pattern-either:
250
+ - pattern: |-
251
+ class PaymentsView(View):
252
+ def dispatch(self, request, *args, **kwargs):
253
+ ...
254
+ - pattern-regex: 'Vulnerable:\\s*DJA\\-018\\b'
255
+ message: |-
256
+ RunSec Detection [DJA-018]: CWE-20
257
+ languages:
258
+ - generic
259
+ severity: WARNING
260
+ - id: runsec.domain-data-privacy.mob-021
261
+ metadata:
262
+ runsec_version: v1.0
263
+ confidence: |-
264
+ 0.9
265
+ exploit_scenario: |-
266
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
267
+ fix_template: |-
268
+ Включить window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE) для защиты экрана от скриншотов и записи.
269
+ pattern-either:
270
+ - pattern: |-
271
+ class MainActivity: FlutterActivity() {
272
+ override fun onCreate(...) {
273
+ super.onCreate(...)
274
+ }
275
+ }
276
+ - pattern-regex: 'Vulnerable:\\s*MOB\\-021\\b'
277
+ message: |-
278
+ RunSec Detection [MOB-021]: Silk Mobile SAR
279
+ languages:
280
+ - generic
281
+ severity: WARNING
282
+ - id: runsec.domain-data-privacy.njs-005
283
+ metadata:
284
+ runsec_version: v1.0
285
+ confidence: |-
286
+ 0.9
287
+ exploit_scenario: |-
288
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
289
+ fix_template: |-
290
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
291
+ pattern-either:
292
+ - pattern: |-
293
+ # no process.on("uncaughtException")
294
+ # no process.on("unhandledRejection")
295
+ - pattern-regex: 'Vulnerable:\\s*NJS\\-005\\b'
296
+ message: |-
297
+ RunSec Detection [NJS-005]: Node.js Production Hardening
298
+ languages:
299
+ - generic
300
+ severity: WARNING
301
+ - id: runsec.domain-data-privacy.njs-019
302
+ metadata:
303
+ runsec_version: v1.0
304
+ confidence: |-
305
+ 0.9
306
+ exploit_scenario: |-
307
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
308
+ fix_template: |-
309
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
310
+ pattern-either:
311
+ - pattern: |-
312
+ if (process.env.VIP_MODE === "1") approveTransfer()
313
+ - pattern-regex: 'Vulnerable:\\s*NJS\\-019\\b'
314
+ message: |-
315
+ RunSec Detection [NJS-019]: Twelve-Factor + Secure Config
316
+ languages:
317
+ - generic
318
+ severity: WARNING
319
+ - id: runsec.domain-data-privacy.njs-034
320
+ metadata:
321
+ runsec_version: v1.0
322
+ confidence: |-
323
+ 0.9
324
+ exploit_scenario: |-
325
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
326
+ fix_template: |-
327
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
328
+ pattern-either:
329
+ - pattern: |-
330
+ readable.pipe(writable) (без .on("error"))
331
+ - pattern-regex: 'Vulnerable:\\s*NJS\\-034\\b'
332
+ message: |-
333
+ RunSec Detection [NJS-034]: Node.js Streams Security
334
+ languages:
335
+ - generic
336
+ severity: WARNING
337
+ - id: runsec.domain-data-privacy.fts-017
338
+ metadata:
339
+ runsec_version: v1.0
340
+ confidence: |-
341
+ 0.9
342
+ exploit_scenario: |-
343
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
344
+ fix_template: |-
345
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
346
+ pattern-either:
347
+ - pattern: |-
348
+ window.addEventListener("message", (e) => JSON.parse(e.data))
349
+ - pattern-regex: 'Vulnerable:\\s*FTS\\-017\\b'
350
+ message: |-
351
+ RunSec Detection [FTS-017]: OWASP HTML5 Messaging Security
352
+ languages:
353
+ - generic
354
+ severity: WARNING
355
+ - id: runsec.domain-data-privacy.fts-020
356
+ metadata:
357
+ runsec_version: v1.0
358
+ confidence: |-
359
+ 0.9
360
+ exploit_scenario: |-
361
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
362
+ fix_template: |-
363
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
364
+ pattern-either:
365
+ - pattern: |-
366
+ doCritical().then(saveAudit)
367
+ async function run(){ await step(); } (без try/catch)
368
+ - pattern-regex: 'Vulnerable:\\s*FTS\\-020\\b'
369
+ message: |-
370
+ RunSec Detection [FTS-020]: Async Error Handling Best Practices
371
+ languages:
372
+ - generic
373
+ severity: WARNING
374
+ - id: runsec.domain-data-privacy.cwe-327-py
375
+ metadata:
376
+ runsec_version: v1.0
377
+ confidence: |-
378
+ 0.9
379
+ exploit_scenario: |-
380
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
381
+ fix_template: |-
382
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
383
+ pattern-either:
384
+ - pattern: |-
385
+ hashlib.md5(data).hexdigest()
386
+ hashlib.sha1(data).digest()
387
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-327\\-PY\\b'
388
+ message: |-
389
+ RunSec Detection [CWE-327-PY]: CWE Compliance
390
+ languages:
391
+ - generic
392
+ severity: WARNING
393
+ - id: runsec.domain-data-privacy.cwe-328-py
394
+ metadata:
395
+ runsec_version: v1.0
396
+ confidence: |-
397
+ 0.9
398
+ exploit_scenario: |-
399
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
400
+ fix_template: |-
401
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
402
+ pattern-either:
403
+ - pattern: |-
404
+ Cipher(algorithms.AES(key), modes.ECB())
405
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-328\\-PY\\b'
406
+ message: |-
407
+ RunSec Detection [CWE-328-PY]: CWE Compliance
408
+ languages:
409
+ - generic
410
+ severity: WARNING
411
+ - id: runsec.domain-data-privacy.cwe-338-py
412
+ metadata:
413
+ runsec_version: v1.0
414
+ confidence: |-
415
+ 0.9
416
+ exploit_scenario: |-
417
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
418
+ fix_template: |-
419
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
420
+ pattern-either:
421
+ - pattern: |-
422
+ token = str(random.random())
423
+ pwd = str(random.randint(100000, 999999))
424
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-338\\-PY\\b'
425
+ message: |-
426
+ RunSec Detection [CWE-338-PY]: CWE Compliance
427
+ languages:
428
+ - generic
429
+ severity: WARNING
430
+ - id: runsec.domain-data-privacy.cwe-327-js
431
+ metadata:
432
+ runsec_version: v1.0
433
+ confidence: |-
434
+ 0.9
435
+ exploit_scenario: |-
436
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
437
+ fix_template: |-
438
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
439
+ pattern-either:
440
+ - pattern: |-
441
+ crypto.createHash("md5").update(data).digest("hex")
442
+ crypto.createCipher("des", key)
443
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-327\\-JS\\b'
444
+ message: |-
445
+ RunSec Detection [CWE-327-JS]: CWE Compliance
446
+ languages:
447
+ - generic
448
+ severity: WARNING
449
+ - id: runsec.domain-data-privacy.cwe-338-js
450
+ metadata:
451
+ runsec_version: v1.0
452
+ confidence: |-
453
+ 0.9
454
+ exploit_scenario: |-
455
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
456
+ fix_template: |-
457
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
458
+ pattern-either:
459
+ - pattern: |-
460
+ const sid = Math.random().toString(36).slice(2)
461
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-338\\-JS\\b'
462
+ message: |-
463
+ RunSec Detection [CWE-338-JS]: CWE Compliance
464
+ languages:
465
+ - generic
466
+ severity: WARNING
467
+ - id: runsec.domain-data-privacy.cwe-200-py
468
+ metadata:
469
+ runsec_version: v1.0
470
+ confidence: |-
471
+ 0.9
472
+ exploit_scenario: |-
473
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
474
+ fix_template: |-
475
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
476
+ pattern-either:
477
+ - pattern: |-
478
+ INTERNAL_API = "http://10.0.0.5:8080/admin"
479
+ SHEET_URL = "https://docs.google.com/spreadsheets/d/..."
480
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-200\\-PY\\b'
481
+ message: |-
482
+ RunSec Detection [CWE-200-PY]: CWE Compliance
483
+ languages:
484
+ - generic
485
+ severity: WARNING
486
+ - id: runsec.domain-data-privacy.cwe-200-js
487
+ metadata:
488
+ runsec_version: v1.0
489
+ confidence: |-
490
+ 0.9
491
+ exploit_scenario: |-
492
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
493
+ fix_template: |-
494
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
495
+ pattern-either:
496
+ - pattern: |-
497
+ toString(){ return "User(token="+this.token+",password="+this.password+")"; }
498
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-200\\-JS\\b'
499
+ message: |-
500
+ RunSec Detection [CWE-200-JS]: CWE Compliance
501
+ languages:
502
+ - generic
503
+ severity: WARNING
504
+ - id: runsec.domain-data-privacy.cwe-117-py
505
+ metadata:
506
+ runsec_version: v1.0
507
+ confidence: |-
508
+ 0.9
509
+ exploit_scenario: |-
510
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
511
+ fix_template: |-
512
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
513
+ pattern-either:
514
+ - pattern: |-
515
+ logging.info("user=%s", user_input) (где user_input содержит \n/\r)
516
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-117\\-PY\\b'
517
+ message: |-
518
+ RunSec Detection [CWE-117-PY]: CWE Compliance - Logic/Resources
519
+ languages:
520
+ - generic
521
+ severity: WARNING
522
+ - id: runsec.domain-data-privacy.cwe-117-js
523
+ metadata:
524
+ runsec_version: v1.0
525
+ confidence: |-
526
+ 0.9
527
+ exploit_scenario: |-
528
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
529
+ fix_template: |-
530
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
531
+ pattern-either:
532
+ - pattern: |-
533
+ console.log(req.body)
534
+ winston.info(req.body.message) без sanitize
535
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-117\\-JS\\b'
536
+ message: |-
537
+ RunSec Detection [CWE-117-JS]: CWE Compliance - Logic/Resources
538
+ languages:
539
+ - generic
540
+ severity: WARNING
541
+ - id: runsec.domain-data-privacy.cwe-404-js
542
+ metadata:
543
+ runsec_version: v1.0
544
+ confidence: |-
545
+ 0.9
546
+ exploit_scenario: |-
547
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
548
+ fix_template: |-
549
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
550
+ pattern-either:
551
+ - pattern: |-
552
+ const rs = fs.createReadStream(path) без обработки error/close
553
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-404\\-JS\\b'
554
+ message: |-
555
+ RunSec Detection [CWE-404-JS]: CWE Compliance - Logic/Resources
556
+ languages:
557
+ - generic
558
+ severity: WARNING
559
+ - id: runsec.domain-data-privacy.cwe-312-js
560
+ metadata:
561
+ runsec_version: v1.0
562
+ confidence: |-
563
+ 0.9
564
+ exploit_scenario: |-
565
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
566
+ fix_template: |-
567
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
568
+ pattern-either:
569
+ - pattern: |-
570
+ localStorage.setItem("token", accessToken)
571
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-312\\-JS\\b'
572
+ message: |-
573
+ RunSec Detection [CWE-312-JS]: CWE Compliance Final
574
+ languages:
575
+ - generic
576
+ severity: WARNING
577
+ - id: runsec.domain-data-privacy.cwe-312-py
578
+ metadata:
579
+ runsec_version: v1.0
580
+ confidence: |-
581
+ 0.9
582
+ exploit_scenario: |-
583
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
584
+ fix_template: |-
585
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
586
+ pattern-either:
587
+ - pattern: |-
588
+ DB_PASSWORD = "supersecret" в settings.py
589
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-312\\-PY\\b'
590
+ message: |-
591
+ RunSec Detection [CWE-312-PY]: CWE Compliance Final
592
+ languages:
593
+ - generic
594
+ severity: WARNING
595
+ - id: runsec.domain-data-privacy.cwe-532-py
596
+ metadata:
597
+ runsec_version: v1.0
598
+ confidence: |-
599
+ 0.9
600
+ exploit_scenario: |-
601
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
602
+ fix_template: |-
603
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
604
+ pattern-either:
605
+ - pattern: |-
606
+ logger.info("password=%s", password)
607
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-532\\-PY\\b'
608
+ message: |-
609
+ RunSec Detection [CWE-532-PY]: CWE Compliance Final
610
+ languages:
611
+ - generic
612
+ severity: WARNING
613
+ - id: runsec.domain-data-privacy.cwe-312-env
614
+ metadata:
615
+ runsec_version: v1.0
616
+ confidence: |-
617
+ 0.9
618
+ exploit_scenario: |-
619
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
620
+ fix_template: |-
621
+ Передавать секреты через Secret Manager/ESO/Vault, исключать plaintext ENV в Docker/K8s manifests.
622
+ pattern-either:
623
+ - pattern: |-
624
+ ENV DB_PASSWORD=secret
625
+ export API_TOKEN=plain
626
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-312\\-ENV\\b'
627
+ message: |-
628
+ RunSec Detection [CWE-312-ENV]: CWE Final Certification
629
+ languages:
630
+ - generic
631
+ severity: WARNING
632
+ - id: runsec.domain-data-privacy.cwe-532-py-decorator
633
+ metadata:
634
+ runsec_version: v1.0
635
+ confidence: |-
636
+ 0.9
637
+ exploit_scenario: |-
638
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
639
+ fix_template: |-
640
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
641
+ pattern-either:
642
+ - pattern: |-
643
+ @log_request декоратор пишет полный payload с PII
644
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-532\\-PY\\-DECORATOR\\b'
645
+ message: |-
646
+ RunSec Detection [CWE-532-PY-DECORATOR]: CWE Final Certification
647
+ languages:
648
+ - generic
649
+ severity: WARNING
650
+ - id: runsec.domain-data-privacy.cwe-117-universal-crlf
651
+ metadata:
652
+ runsec_version: v1.0
653
+ confidence: |-
654
+ 0.9
655
+ exploit_scenario: |-
656
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
657
+ fix_template: |-
658
+ Перед логированием принудительно заменять/экранировать \r и \n (например, \\r/\\n), применять centralized log sanitizer.
659
+ pattern-either:
660
+ - pattern: |-
661
+ logger.info("msg=%s", user_input) где user_input содержит \r\n
662
+ console.log(req.body.message) без sanitize
663
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-117\\-UNIVERSAL\\-CRLF\\b'
664
+ message: |-
665
+ RunSec Detection [CWE-117-UNIVERSAL-CRLF]: CWE Final Certification
666
+ languages:
667
+ - generic
668
+ severity: WARNING
669
+ - id: runsec.domain-data-privacy.cwe-74-py-ldap
670
+ metadata:
671
+ runsec_version: v1.0
672
+ confidence: |-
673
+ 0.9
674
+ exploit_scenario: |-
675
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
676
+ fix_template: |-
677
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
678
+ pattern-either:
679
+ - pattern: |-
680
+ conn.search(base_dn, "(uid=" + username + ")")
681
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-74\\-PY\\-LDAP\\b'
682
+ message: |-
683
+ RunSec Detection [CWE-74-PY-LDAP]: CWE Final Certification
684
+ languages:
685
+ - generic
686
+ severity: WARNING
687
+ - id: runsec.domain-data-privacy.cwe-74-js-ldap
688
+ metadata:
689
+ runsec_version: v1.0
690
+ confidence: |-
691
+ 0.9
692
+ exploit_scenario: |-
693
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
694
+ fix_template: |-
695
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
696
+ pattern-either:
697
+ - pattern: |-
698
+ const filter = "(uid=" + req.query.user + ")"
699
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-74\\-JS\\-LDAP\\b'
700
+ message: |-
701
+ RunSec Detection [CWE-74-JS-LDAP]: CWE Final Certification
702
+ languages:
703
+ - generic
704
+ severity: WARNING
705
+ - id: runsec.domain-data-privacy.cwe-359-axios-params-leak
706
+ metadata:
707
+ runsec_version: v1.0
708
+ confidence: |-
709
+ 0.9
710
+ exploit_scenario: |-
711
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
712
+ fix_template: |-
713
+ Не передавать секреты в query string; использовать Authorization header/body и redaction policy для логов/телеметрии.
714
+ pattern-either:
715
+ - pattern: |-
716
+ axios.get(url, { params: { token, password, secret } })
717
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-359\\-AXIOS\\-PARAMS\\-LEAK\\b'
718
+ message: |-
719
+ RunSec Detection [CWE-359-AXIOS-PARAMS-LEAK]: CWE Final Certification
720
+ languages:
721
+ - generic
722
+ severity: WARNING
723
+ - id: runsec.domain-data-privacy.cwe-524-axios-cache-auth
724
+ metadata:
725
+ runsec_version: v1.0
726
+ confidence: |-
727
+ 0.9
728
+ exploit_scenario: |-
729
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
730
+ fix_template: |-
731
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
732
+ pattern-either:
733
+ - pattern: |-
734
+ axios.get("/api/user/profile") без cache headers
735
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-524\\-AXIOS\\-CACHE\\-AUTH\\b'
736
+ message: |-
737
+ RunSec Detection [CWE-524-AXIOS-CACHE-AUTH]: CWE Final Certification
738
+ languages:
739
+ - generic
740
+ severity: WARNING
741
+ - id: runsec.domain-data-privacy.cwe-200-nextjs-client-env
742
+ metadata:
743
+ runsec_version: v1.0
744
+ confidence: |-
745
+ 0.9
746
+ exploit_scenario: |-
747
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
748
+ fix_template: |-
749
+ Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
750
+ pattern-either:
751
+ - pattern: |-
752
+ "use client" + process.env.DB_PASSWORD/process.env.API_SECRET
753
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-200\\-NEXTJS\\-CLIENT\\-ENV\\b'
754
+ message: |-
755
+ RunSec Detection [CWE-200-NEXTJS-CLIENT-ENV]: CWE Final Certification
756
+ languages:
757
+ - generic
758
+ severity: WARNING
759
+ - id: runsec.domain-data-privacy.cwe-200-openrouter-apikey-leak
760
+ metadata:
761
+ runsec_version: v1.0
762
+ confidence: |-
763
+ 0.9
764
+ exploit_scenario: |-
765
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
766
+ fix_template: |-
767
+ Хранить ключи только во внешнем secret manager/env, маскировать в логах и исключать из репозитория/trace output.
768
+ pattern-either:
769
+ - pattern: |-
770
+ OPENROUTER_API_KEY = "sk-..."
771
+ logger.info(api_key)
772
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-200\\-OPENROUTER\\-APIKEY\\-LEAK\\b'
773
+ message: |-
774
+ RunSec Detection [CWE-200-OPENROUTER-APIKEY-LEAK]: CWE Final Certification
775
+ languages:
776
+ - generic
777
+ severity: WARNING
778
+ - id: runsec.domain-data-privacy.cwe-922-fastapi-header-log
779
+ metadata:
780
+ runsec_version: v1.0
781
+ confidence: |-
782
+ 0.9
783
+ exploit_scenario: |-
784
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
785
+ fix_template: |-
786
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
787
+ pattern-either:
788
+ - pattern: |-
789
+ logger.info("headers=%s", dict(request.headers))
790
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-922\\-FASTAPI\\-HEADER\\-LOG\\b'
791
+ message: |-
792
+ RunSec Detection [CWE-922-FASTAPI-HEADER-LOG]: CWE Final Certification
793
+ languages:
794
+ - generic
795
+ severity: WARNING
796
+ - id: runsec.domain-data-privacy.cwe-798-csh-config-secrets
797
+ metadata:
798
+ runsec_version: v1.0
799
+ confidence: |-
800
+ 0.9
801
+ exploit_scenario: |-
802
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
803
+ fix_template: |-
804
+ Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input.
805
+ pattern-either:
806
+ - pattern: |-
807
+ <add key="ApiKey" value="secret-123"/>
808
+ <Setting Name="Password" ...>
809
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-798\\-CSH\\-CONFIG\\-SECRETS\\b'
810
+ message: |-
811
+ RunSec Detection [CWE-798-CSH-CONFIG-SECRETS]: CWE Final Certification
812
+ languages:
813
+ - generic
814
+ severity: WARNING
815
+ - id: runsec.domain-data-privacy.cwe-384-csh-static-token-context
816
+ metadata:
817
+ runsec_version: v1.0
818
+ confidence: |-
819
+ 0.9
820
+ exploit_scenario: |-
821
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
822
+ fix_template: |-
823
+ Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input.
824
+ pattern-either:
825
+ - pattern: |-
826
+ public static string AccessToken;
827
+ public static UserContext CurrentUser;
828
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-384\\-CSH\\-STATIC\\-TOKEN\\-CONTEXT\\b'
829
+ message: |-
830
+ RunSec Detection [CWE-384-CSH-STATIC-TOKEN-CONTEXT]: CWE Final Certification
831
+ languages:
832
+ - generic
833
+ severity: WARNING
834
+ - id: runsec.domain-data-privacy.cwe-532-csh-office-pii-log
835
+ metadata:
836
+ runsec_version: v1.0
837
+ confidence: |-
838
+ 0.9
839
+ exploit_scenario: |-
840
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
841
+ fix_template: |-
842
+ Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input.
843
+ pattern-either:
844
+ - pattern: |-
845
+ logger.Info(mail.SenderEmailAddress)
846
+ File.AppendAllText(log, doc.FullName)
847
+ - pattern-regex: 'Vulnerable:\\s*CWE\\-532\\-CSH\\-OFFICE\\-PII\\-LOG\\b'
848
+ message: |-
849
+ RunSec Detection [CWE-532-CSH-OFFICE-PII-LOG]: CWE Final Certification
850
+ languages:
851
+ - generic
852
+ severity: WARNING