@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,802 @@
1
+ rules:
2
+ - id: runsec.advanced-agent-cloud.aac-001
3
+ metadata:
4
+ runsec_version: v1.0
5
+ confidence: |-
6
+ 0.9
7
+ exploit_scenario: |-
8
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
9
+ fix_template: |-
10
+ ALLOWED_HOSTS = {"cdn.example.com"} u = urlparse(userInput) if u.hostname not in ALLOWED_HOSTS: raise ValueError("url not allowed") await page.goto(userInput)
11
+ pattern-either:
12
+ - pattern: |-
13
+ await page.goto(userInput)
14
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-001\\b'
15
+ message: |-
16
+ RunSec Detection [AAC-001]: CWE-918
17
+ languages:
18
+ - generic
19
+ severity: WARNING
20
+ - id: runsec.advanced-agent-cloud.aac-002
21
+ metadata:
22
+ runsec_version: v1.0
23
+ confidence: |-
24
+ 0.9
25
+ exploit_scenario: |-
26
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
27
+ fix_template: |-
28
+ await context.tracing.start(screenshots=False) или маскирование PII перед экспортом трейса
29
+ pattern-either:
30
+ - pattern: |-
31
+ await context.tracing.start(screenshots=True)
32
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-002\\b'
33
+ message: |-
34
+ RunSec Detection [AAC-002]: CWE-200
35
+ languages:
36
+ - generic
37
+ severity: WARNING
38
+ - id: runsec.advanced-agent-cloud.aac-003
39
+ metadata:
40
+ runsec_version: v1.0
41
+ confidence: |-
42
+ 0.9
43
+ exploit_scenario: |-
44
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
45
+ fix_template: |-
46
+ const key = process.env.STRIPE_SECRET_KEY (только серверные модули / Route Handlers без NEXT_PUBLIC_)
47
+ pattern-either:
48
+ - pattern: |-
49
+ const key = process.env.NEXT_PUBLIC_STRIPE_SECRET
50
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-003\\b'
51
+ message: |-
52
+ RunSec Detection [AAC-003]: CWE-20
53
+ languages:
54
+ - generic
55
+ severity: WARNING
56
+ - id: runsec.advanced-agent-cloud.aac-004
57
+ metadata:
58
+ runsec_version: v1.0
59
+ confidence: |-
60
+ 0.9
61
+ exploit_scenario: |-
62
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
63
+ fix_template: |-
64
+ json.loads(raw_job) или msgpack.loads + явная схема данных
65
+ pattern-either:
66
+ - pattern: |-
67
+ pickle.loads(raw_job)
68
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-004\\b'
69
+ message: |-
70
+ RunSec Detection [AAC-004]: CWE-502
71
+ languages:
72
+ - generic
73
+ severity: WARNING
74
+ - id: runsec.advanced-agent-cloud.aac-005
75
+ metadata:
76
+ runsec_version: v1.0
77
+ confidence: |-
78
+ 0.9
79
+ exploit_scenario: |-
80
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
81
+ fix_template: |-
82
+ expires=timedelta(seconds=45) + проверка владельца объекта и method GET-only где возможно
83
+ pattern-either:
84
+ - pattern: |-
85
+ client.presigned_put_object("b", "o", expires=timedelta(days=7))
86
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-005\\b'
87
+ message: |-
88
+ RunSec Detection [AAC-005]: CWE-639
89
+ languages:
90
+ - generic
91
+ severity: WARNING
92
+ - id: runsec.advanced-agent-cloud.aac-006
93
+ metadata:
94
+ runsec_version: v1.0
95
+ confidence: |-
96
+ 0.9
97
+ exploit_scenario: |-
98
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
99
+ fix_template: |-
100
+ claims = jwt.decode(token, key, audience=..., issuer=..., options={"verify_exp": True})
101
+ pattern-either:
102
+ - pattern: |-
103
+ if authorization:
104
+ headers = {"Authorization": authorization}
105
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-006\\b'
106
+ message: |-
107
+ RunSec Detection [AAC-006]: CWE-287
108
+ languages:
109
+ - generic
110
+ severity: WARNING
111
+ - id: runsec.advanced-agent-cloud.aac-007
112
+ metadata:
113
+ runsec_version: v1.0
114
+ confidence: |-
115
+ 0.9
116
+ exploit_scenario: |-
117
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
118
+ fix_template: |-
119
+ limit_req zone=api burst=20 nodelay; в том же location или выше по цепочке
120
+ pattern-either:
121
+ - pattern: |-
122
+ location /api/ {
123
+ proxy_pass http://backend;
124
+ }
125
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-007\\b'
126
+ message: |-
127
+ RunSec Detection [AAC-007]: CWE-770
128
+ languages:
129
+ - generic
130
+ severity: WARNING
131
+ - id: runsec.advanced-agent-cloud.aac-008
132
+ metadata:
133
+ runsec_version: v1.0
134
+ confidence: |-
135
+ 0.9
136
+ exploit_scenario: |-
137
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
138
+ fix_template: |-
139
+ HTTP_PROXY/HTTPS_PROXY заданы на уровне контейнера; Session(trust_env=True)
140
+ pattern-either:
141
+ - pattern: |-
142
+ requests.get(url, proxies={"http": None, "https": None})
143
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-008\\b'
144
+ message: |-
145
+ RunSec Detection [AAC-008]: CWE-918
146
+ languages:
147
+ - generic
148
+ severity: WARNING
149
+ - id: runsec.advanced-agent-cloud.aac-009
150
+ metadata:
151
+ runsec_version: v1.0
152
+ confidence: |-
153
+ 0.9
154
+ exploit_scenario: |-
155
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
156
+ fix_template: |-
157
+ logger.info("job=%s", sanitize(redis_raw_payload))
158
+ pattern-either:
159
+ - pattern: |-
160
+ logger.info("job=%s", redis_raw_payload)
161
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-009\\b'
162
+ message: |-
163
+ RunSec Detection [AAC-009]: CWE-117
164
+ languages:
165
+ - generic
166
+ severity: WARNING
167
+ - id: runsec.advanced-agent-cloud.aac-010
168
+ metadata:
169
+ runsec_version: v1.0
170
+ confidence: |-
171
+ 0.9
172
+ exploit_scenario: |-
173
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
174
+ fix_template: |-
175
+ state-machine: явное consentGiven === true до вызова getUserMedia
176
+ pattern-either:
177
+ - pattern: |-
178
+ navigator.mediaDevices.getUserMedia({ audio: true })
179
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-010\\b'
180
+ message: |-
181
+ RunSec Detection [AAC-010]: CWE-20
182
+ languages:
183
+ - generic
184
+ severity: WARNING
185
+ - id: runsec.advanced-agent-cloud.aac-011
186
+ metadata:
187
+ runsec_version: v1.0
188
+ confidence: |-
189
+ 0.9
190
+ exploit_scenario: |-
191
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
192
+ fix_template: |-
193
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
194
+ pattern-either:
195
+ - pattern: |-
196
+ Инструмент принимает file_path/command и выполняет без os.path.abspath() + проверки префикса рабочей директории
197
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-011\\b'
198
+ message: |-
199
+ RunSec Detection [AAC-011]: CWE Final Certification
200
+ languages:
201
+ - generic
202
+ severity: WARNING
203
+ - id: runsec.advanced-agent-cloud.aac-012
204
+ metadata:
205
+ runsec_version: v1.0
206
+ confidence: |-
207
+ 0.9
208
+ exploit_scenario: |-
209
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
210
+ fix_template: |-
211
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
212
+ pattern-either:
213
+ - pattern: |-
214
+ def tool_handler(args): без модели BaseModel/валидации типов
215
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-012\\b'
216
+ message: |-
217
+ RunSec Detection [AAC-012]: CWE Final Certification
218
+ languages:
219
+ - generic
220
+ severity: WARNING
221
+ - id: runsec.advanced-agent-cloud.aac-013
222
+ metadata:
223
+ runsec_version: v1.0
224
+ confidence: |-
225
+ 0.9
226
+ exploit_scenario: |-
227
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
228
+ fix_template: |-
229
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
230
+ pattern-either:
231
+ - pattern: |-
232
+ value = redis.get(key)
233
+ redis.set(key, int(value)+1) в конкурентном воркере
234
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-013\\b'
235
+ message: |-
236
+ RunSec Detection [AAC-013]: CWE Final Certification
237
+ languages:
238
+ - generic
239
+ severity: WARNING
240
+ - id: runsec.advanced-agent-cloud.aac-014
241
+ metadata:
242
+ runsec_version: v1.0
243
+ confidence: |-
244
+ 0.9
245
+ exploit_scenario: |-
246
+ Атакующий подделывает JSON от внешнего AI API; без схемы поля трактуются как доверенные (CWE-20/918 цепочки).
247
+ fix_template: |-
248
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
249
+ pattern-either:
250
+ - pattern: |-
251
+ data = response.json() и прямое использование data["..."] без схемы
252
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-014\\b'
253
+ message: |-
254
+ RunSec Detection [AAC-014]: CWE Final Certification
255
+ languages:
256
+ - generic
257
+ severity: WARNING
258
+ - id: runsec.advanced-agent-cloud.aac-015
259
+ metadata:
260
+ runsec_version: v1.0
261
+ confidence: |-
262
+ 0.9
263
+ exploit_scenario: |-
264
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
265
+ fix_template: |-
266
+ Логировать только redacted metadata (hash/id/length), исключать system prompts и полный контекст из telemetry/logs by default.
267
+ pattern-either:
268
+ - pattern: |-
269
+ logger.info("system_prompt=%s", system_prompt)
270
+ trace.set_attribute("llm.context", full_context)
271
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-015\\b'
272
+ message: |-
273
+ RunSec Detection [AAC-015]: CWE Final Certification
274
+ languages:
275
+ - generic
276
+ severity: WARNING
277
+ - id: runsec.advanced-agent-cloud.aac-016
278
+ metadata:
279
+ runsec_version: v1.0
280
+ confidence: |-
281
+ 0.9
282
+ exploit_scenario: |-
283
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
284
+ fix_template: |-
285
+ Перед трассировкой удалять секреты/PII из agent memory и применять denylist sensitive keys (token, secret, api_key).
286
+ pattern-either:
287
+ - pattern: |-
288
+ span.set_attribute("agent.memory", json.dumps(memory_state))
289
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-016\\b'
290
+ message: |-
291
+ RunSec Detection [AAC-016]: CWE Final Certification
292
+ languages:
293
+ - generic
294
+ severity: WARNING
295
+ - id: runsec.advanced-agent-cloud.aac-017
296
+ metadata:
297
+ runsec_version: v1.0
298
+ confidence: |-
299
+ 0.9
300
+ exploit_scenario: |-
301
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
302
+ fix_template: |-
303
+ Не логировать скрытые reasoning fields; сохранять только конечный ответ и технические метрики выполнения.
304
+ pattern-either:
305
+ - pattern: |-
306
+ logger.debug("reasoning=%s", llm_response["thinking"])
307
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-017\\b'
308
+ message: |-
309
+ RunSec Detection [AAC-017]: CWE Final Certification
310
+ languages:
311
+ - generic
312
+ severity: WARNING
313
+ - id: runsec.advanced-agent-cloud.aac-018
314
+ metadata:
315
+ runsec_version: v1.0
316
+ confidence: |-
317
+ 0.9
318
+ exploit_scenario: |-
319
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
320
+ fix_template: |-
321
+ Шифровать артефакты или отключать persistent prompt dumps в production; включать retention + secure erase policy.
322
+ pattern-either:
323
+ - pattern: |-
324
+ open("debug/prompts.json","w").write(json.dumps(history))
325
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-018\\b'
326
+ message: |-
327
+ RunSec Detection [AAC-018]: CWE Final Certification
328
+ languages:
329
+ - generic
330
+ severity: WARNING
331
+ - id: runsec.advanced-agent-cloud.aac-019
332
+ metadata:
333
+ runsec_version: v1.0
334
+ confidence: |-
335
+ 0.9
336
+ exploit_scenario: |-
337
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
338
+ fix_template: |-
339
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
340
+ pattern-either:
341
+ - pattern: |-
342
+ @tool("run_any")
343
+ subprocess.run(user_cmd, shell=True)
344
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-019\\b'
345
+ message: |-
346
+ RunSec Detection [AAC-019]: CWE Final Certification
347
+ languages:
348
+ - generic
349
+ severity: WARNING
350
+ - id: runsec.advanced-agent-cloud.aac-020
351
+ metadata:
352
+ runsec_version: v1.0
353
+ confidence: |-
354
+ 0.9
355
+ exploit_scenario: |-
356
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
357
+ fix_template: |-
358
+ Использовать server-side tenant mapping и immutable namespace binding, запретить namespace from external input.
359
+ pattern-either:
360
+ - pattern: |-
361
+ index.upsert(vectors, namespace=request.user_input)
362
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-020\\b'
363
+ message: |-
364
+ RunSec Detection [AAC-020]: CWE Final Certification
365
+ languages:
366
+ - generic
367
+ severity: WARNING
368
+ - id: runsec.advanced-agent-cloud.aac-021
369
+ metadata:
370
+ runsec_version: v1.0
371
+ confidence: |-
372
+ 0.9
373
+ exploit_scenario: |-
374
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
375
+ fix_template: |-
376
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
377
+ pattern-either:
378
+ - pattern: |-
379
+ tpl = Path(req["template"]).read_text()
380
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-021\\b'
381
+ message: |-
382
+ RunSec Detection [AAC-021]: CWE Final Certification
383
+ languages:
384
+ - generic
385
+ severity: WARNING
386
+ - id: runsec.advanced-agent-cloud.aac-022
387
+ metadata:
388
+ runsec_version: v1.0
389
+ confidence: |-
390
+ 0.9
391
+ exploit_scenario: |-
392
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
393
+ fix_template: |-
394
+ Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
395
+ pattern-either:
396
+ - pattern: |-
397
+ while True: resp = client.responses.create(...)
398
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-022\\b'
399
+ message: |-
400
+ RunSec Detection [AAC-022]: CWE Final Certification
401
+ languages:
402
+ - generic
403
+ severity: WARNING
404
+ - id: runsec.advanced-agent-cloud.aac-023
405
+ metadata:
406
+ runsec_version: v1.0
407
+ confidence: |-
408
+ 0.9
409
+ exploit_scenario: |-
410
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
411
+ fix_template: |-
412
+ Нормализовать/санитизировать tool output и разделять роли (system immutable, external data only as user/tool role).
413
+ pattern-either:
414
+ - pattern: |-
415
+ messages=[{"role":"system","content": tool_output}]
416
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-023\\b'
417
+ message: |-
418
+ RunSec Detection [AAC-023]: CWE Final Certification
419
+ languages:
420
+ - generic
421
+ severity: WARNING
422
+ - id: runsec.advanced-agent-cloud.aac-024
423
+ metadata:
424
+ runsec_version: v1.0
425
+ confidence: |-
426
+ 0.9
427
+ exploit_scenario: |-
428
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
429
+ fix_template: |-
430
+ Вводить egress allowlist + DNS/IP validation и блокировать link-local/metadata ranges перед запросом.
431
+ pattern-either:
432
+ - pattern: |-
433
+ requests.get(callback_url) где callback_url из tool output
434
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-024\\b'
435
+ message: |-
436
+ RunSec Detection [AAC-024]: CWE Final Certification
437
+ languages:
438
+ - generic
439
+ severity: WARNING
440
+ - id: runsec.advanced-agent-cloud.aac-025
441
+ metadata:
442
+ runsec_version: v1.0
443
+ confidence: |-
444
+ 0.9
445
+ exploit_scenario: |-
446
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
447
+ fix_template: |-
448
+ Включать tenant/user scope и policy version в cache key, чтобы исключить cross-tenant data leakage.
449
+ pattern-either:
450
+ - pattern: |-
451
+ cache_key = f"{prompt_hash}"
452
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-025\\b'
453
+ message: |-
454
+ RunSec Detection [AAC-025]: CWE Final Certification
455
+ languages:
456
+ - generic
457
+ severity: WARNING
458
+ - id: runsec.advanced-agent-cloud.aac-026
459
+ metadata:
460
+ runsec_version: v1.0
461
+ confidence: |-
462
+ 0.9
463
+ exploit_scenario: |-
464
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
465
+ fix_template: |-
466
+ Использовать безопасный JSON parser + strict schema validation и reject unknown fields до обработки.
467
+ pattern-either:
468
+ - pattern: |-
469
+ payload = eval(tool_result)
470
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-026\\b'
471
+ message: |-
472
+ RunSec Detection [AAC-026]: CWE Final Certification
473
+ languages:
474
+ - generic
475
+ severity: WARNING
476
+ - id: runsec.advanced-agent-cloud.aac-027
477
+ metadata:
478
+ runsec_version: v1.0
479
+ confidence: |-
480
+ 0.9
481
+ exploit_scenario: |-
482
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
483
+ fix_template: |-
484
+ Pydantic model_validate на сыром тексте ответа; для base64 — только после явного поля в схеме и max length; в TS — Zod + отказ от Buffer.from(llm, "base64") без policy.
485
+ pattern-either:
486
+ - pattern: |-
487
+ raw = base64.b64decode(llm_json["blob"]) затем json.loads(raw)
488
+ const buf = Buffer.from(assistantText, "base64")
489
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-027\\b'
490
+ message: |-
491
+ RunSec Detection [AAC-027]: CWE-1027
492
+ languages:
493
+ - generic
494
+ severity: WARNING
495
+ - id: runsec.advanced-agent-cloud.aac-028
496
+ metadata:
497
+ runsec_version: v1.0
498
+ confidence: |-
499
+ 0.9
500
+ exploit_scenario: |-
501
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
502
+ fix_template: |-
503
+ Как AAC-027: строгая схема ответа, без fromhex/hex decode на необработанной строке модели.
504
+ pattern-either:
505
+ - pattern: |-
506
+ bytes.fromhex(llm_reply.strip())
507
+ Buffer.from(modelOut, "hex")
508
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-028\\b'
509
+ message: |-
510
+ RunSec Detection [AAC-028]: CWE-1109
511
+ languages:
512
+ - generic
513
+ severity: WARNING
514
+ - id: runsec.advanced-agent-cloud.aac-029
515
+ metadata:
516
+ runsec_version: v1.0
517
+ confidence: |-
518
+ 0.9
519
+ exploit_scenario: |-
520
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
521
+ fix_template: |-
522
+ Pydantic-схема ответа без exec/system; sandbox tool API.
523
+ pattern-either:
524
+ - pattern: |-
525
+ cmd = "".join(chr(c) for c in [114,109,32,45,114,102,32,47])
526
+ os.system(cmd)
527
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-029\\b'
528
+ message: |-
529
+ RunSec Detection [AAC-029]: CWE-1027
530
+ languages:
531
+ - generic
532
+ severity: WARNING
533
+ - id: runsec.advanced-agent-cloud.aac-030
534
+ metadata:
535
+ runsec_version: v1.0
536
+ confidence: |-
537
+ 0.9
538
+ exploit_scenario: |-
539
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
540
+ fix_template: |-
541
+ Zod + deny eval/Function на данных модели.
542
+ pattern-either:
543
+ - pattern: |-
544
+ eval(atob(llmChunk))
545
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-030\\b'
546
+ message: |-
547
+ RunSec Detection [AAC-030]: CWE-1334
548
+ languages:
549
+ - generic
550
+ severity: WARNING
551
+ - id: runsec.advanced-agent-cloud.aac-031
552
+ metadata:
553
+ runsec_version: v1.0
554
+ confidence: |-
555
+ 0.9
556
+ exploit_scenario: |-
557
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
558
+ fix_template: |-
559
+ Allowlist argv; no shell metacharacters from model.
560
+ pattern-either:
561
+ - pattern: |-
562
+ subprocess.run(["powershell", "-EncodedCommand", llm_b64])
563
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-031\\b'
564
+ message: |-
565
+ RunSec Detection [AAC-031]: CWE-78
566
+ languages:
567
+ - generic
568
+ severity: WARNING
569
+ - id: runsec.advanced-agent-cloud.aac-032
570
+ metadata:
571
+ runsec_version: v1.0
572
+ confidence: |-
573
+ 0.9
574
+ exploit_scenario: |-
575
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
576
+ fix_template: |-
577
+ Парсер JSON + фиксированные команды.
578
+ pattern-either:
579
+ - pattern: |-
580
+ os.system("bash -c "$(echo " + llm_pipe + " | base64 -d)"")
581
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-032\\b'
582
+ message: |-
583
+ RunSec Detection [AAC-032]: CWE-78
584
+ languages:
585
+ - generic
586
+ severity: WARNING
587
+ - id: runsec.advanced-agent-cloud.aac-033
588
+ metadata:
589
+ runsec_version: v1.0
590
+ confidence: |-
591
+ 0.9
592
+ exploit_scenario: |-
593
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
594
+ fix_template: |-
595
+ RestrictedPython или no code execution path.
596
+ pattern-either:
597
+ - pattern: |-
598
+ exec(compile(llm_code, "<llm>", "exec"))
599
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-033\\b'
600
+ message: |-
601
+ RunSec Detection [AAC-033]: CWE-94
602
+ languages:
603
+ - generic
604
+ severity: WARNING
605
+ - id: runsec.advanced-agent-cloud.aac-034
606
+ metadata:
607
+ runsec_version: v1.0
608
+ confidence: |-
609
+ 0.9
610
+ exploit_scenario: |-
611
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
612
+ fix_template: |-
613
+ Unicode NFKC + command allowlist.
614
+ pattern-either:
615
+ - pattern: |-
616
+ cmd = llm_text.replace("а", "a") затем run(cmd)
617
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-034\\b'
618
+ message: |-
619
+ RunSec Detection [AAC-034]: CWE-1335
620
+ languages:
621
+ - generic
622
+ severity: WARNING
623
+ - id: runsec.advanced-agent-cloud.aac-035
624
+ metadata:
625
+ runsec_version: v1.0
626
+ confidence: |-
627
+ 0.9
628
+ exploit_scenario: |-
629
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
630
+ fix_template: |-
631
+ Фиксированный argv template; модель только заполняет allowlisted args.
632
+ pattern-either:
633
+ - pattern: |-
634
+ parts = json.loads(llm_json["p"]); subprocess.run(parts)
635
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-035\\b'
636
+ message: |-
637
+ RunSec Detection [AAC-035]: CWE-1027
638
+ languages:
639
+ - generic
640
+ severity: WARNING
641
+ - id: runsec.advanced-agent-cloud.aac-036
642
+ metadata:
643
+ runsec_version: v1.0
644
+ confidence: |-
645
+ 0.9
646
+ exploit_scenario: |-
647
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
648
+ fix_template: |-
649
+ Schema deny raw hex blobs.
650
+ pattern-either:
651
+ - pattern: |-
652
+ exec(bytes.fromhex(llm_hex).decode())
653
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-036\\b'
654
+ message: |-
655
+ RunSec Detection [AAC-036]: CWE-1337
656
+ languages:
657
+ - generic
658
+ severity: WARNING
659
+ - id: runsec.advanced-agent-cloud.aac-037
660
+ metadata:
661
+ runsec_version: v1.0
662
+ confidence: |-
663
+ 0.9
664
+ exploit_scenario: |-
665
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
666
+ fix_template: |-
667
+ Strict URL parser + block dangerous schemes.
668
+ pattern-either:
669
+ - pattern: |-
670
+ open_url(llm_suggested_link) где link содержит javascript:
671
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-037\\b'
672
+ message: |-
673
+ RunSec Detection [AAC-037]: CWE-1338
674
+ languages:
675
+ - generic
676
+ severity: WARNING
677
+ - id: runsec.advanced-agent-cloud.aac-038
678
+ metadata:
679
+ runsec_version: v1.0
680
+ confidence: |-
681
+ 0.9
682
+ exploit_scenario: |-
683
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
684
+ fix_template: |-
685
+ Single JSON schema; no chained decoders on model text.
686
+ pattern-either:
687
+ - pattern: |-
688
+ exec(zlib.decompress(base64.b64decode(llm_blob)))
689
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-038\\b'
690
+ message: |-
691
+ RunSec Detection [AAC-038]: CWE-1340
692
+ languages:
693
+ - generic
694
+ severity: WARNING
695
+ - id: runsec.advanced-agent-cloud.aac-039
696
+ metadata:
697
+ runsec_version: v1.0
698
+ confidence: |-
699
+ 0.9
700
+ exploit_scenario: |-
701
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
702
+ fix_template: |-
703
+ Pydantic model_validate на тексте; deny codecs.decode на LLM fields.
704
+ pattern-either:
705
+ - pattern: |-
706
+ raw = codecs.decode(llm_obj["h"], "hex"); exec(raw.decode())
707
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-039\\b'
708
+ message: |-
709
+ RunSec Detection [AAC-039]: CWE-1027
710
+ languages:
711
+ - generic
712
+ severity: WARNING
713
+ - id: runsec.advanced-agent-cloud.aac-040
714
+ metadata:
715
+ runsec_version: v1.0
716
+ confidence: |-
717
+ 0.9
718
+ exploit_scenario: |-
719
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
720
+ fix_template: |-
721
+ Zod schema; block eval/new Function on model-derived buffers.
722
+ pattern-either:
723
+ - pattern: |-
724
+ eval(Buffer.from(assistantChunk, "base64").toString("utf8"))
725
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-040\\b'
726
+ message: |-
727
+ RunSec Detection [AAC-040]: CWE-1027
728
+ languages:
729
+ - generic
730
+ severity: WARNING
731
+ - id: runsec.advanced-agent-cloud.aac-041
732
+ metadata:
733
+ runsec_version: v1.0
734
+ confidence: |-
735
+ 0.9
736
+ exploit_scenario: |-
737
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
738
+ fix_template: |-
739
+ JSON-only; no binary deserialization from assistant output.
740
+ pattern-either:
741
+ - pattern: |-
742
+ pickle.loads(binascii.a2b_hex(llm_field))
743
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-041\\b'
744
+ message: |-
745
+ RunSec Detection [AAC-041]: CWE-1109
746
+ languages:
747
+ - generic
748
+ severity: WARNING
749
+ - id: runsec.advanced-agent-cloud.aac-042
750
+ metadata:
751
+ runsec_version: v1.0
752
+ confidence: |-
753
+ 0.9
754
+ exploit_scenario: |-
755
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
756
+ fix_template: |-
757
+ Reject raw atob blobs unless schema allows with max length.
758
+ pattern-either:
759
+ - pattern: |-
760
+ new Uint8Array(Uint8Array.from(atob(modelB64), c => c.charCodeAt(0)))
761
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-042\\b'
762
+ message: |-
763
+ RunSec Detection [AAC-042]: CWE-1109
764
+ languages:
765
+ - generic
766
+ severity: WARNING
767
+ - id: runsec.advanced-agent-cloud.aac-043
768
+ metadata:
769
+ runsec_version: v1.0
770
+ confidence: |-
771
+ 0.9
772
+ exploit_scenario: |-
773
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
774
+ fix_template: |-
775
+ Короткий TTL + rotation; явные leeway/max_age в verifier.
776
+ pattern-either:
777
+ - pattern: |-
778
+ jwt.encode({"sub": svc}, key, algorithm="HS256", headers={"exp": int(time.time()) + 86400 * 7})
779
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-043\\b'
780
+ message: |-
781
+ RunSec Detection [AAC-043]: CWE-613
782
+ languages:
783
+ - generic
784
+ severity: WARNING
785
+ - id: runsec.advanced-agent-cloud.aac-044
786
+ metadata:
787
+ runsec_version: v1.0
788
+ confidence: |-
789
+ 0.9
790
+ exploit_scenario: |-
791
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
792
+ fix_template: |-
793
+ Central HTTP wrapper; no IMDS literals in agent runtime.
794
+ pattern-either:
795
+ - pattern: |-
796
+ httpx.get("http://169.254.169.254/metadata/instance", headers={"Metadata": "true"})
797
+ - pattern-regex: 'Vulnerable:\\s*AAC\\-044\\b'
798
+ message: |-
799
+ RunSec Detection [AAC-044]: CWE-918
800
+ languages:
801
+ - generic
802
+ severity: WARNING