@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.
- package/dist/index.js +578 -0
- package/package.json +43 -0
- package/src/rules/data/rule-compliance-map.json +43563 -0
- package/src/rules/data/semgrep-rules/README-taint-overlays.md +21 -0
- package/src/rules/data/semgrep-rules/advanced-agent-cloud.yaml +802 -0
- package/src/rules/data/semgrep-rules/app-logic.yaml +445 -0
- package/src/rules/data/semgrep-rules/auth-keycloak.yaml +831 -0
- package/src/rules/data/semgrep-rules/browser-agent.yaml +260 -0
- package/src/rules/data/semgrep-rules/cloud-secrets.yaml +316 -0
- package/src/rules/data/semgrep-rules/csharp-dotnet.yaml +4864 -0
- package/src/rules/data/semgrep-rules/desktop-electron-pro.yaml +30 -0
- package/src/rules/data/semgrep-rules/desktop-vsto-suite.yaml +2759 -0
- package/src/rules/data/semgrep-rules/devops-security.yaml +393 -0
- package/src/rules/data/semgrep-rules/domain-access-management.yaml +1023 -0
- package/src/rules/data/semgrep-rules/domain-data-privacy.yaml +852 -0
- package/src/rules/data/semgrep-rules/domain-input-validation.yaml +2894 -0
- package/src/rules/data/semgrep-rules/domain-platform-hardening.yaml +1715 -0
- package/src/rules/data/semgrep-rules/ds-ml-security.yaml +2431 -0
- package/src/rules/data/semgrep-rules/fastapi-async.yaml +5953 -0
- package/src/rules/data/semgrep-rules/frontend-react.yaml +4035 -0
- package/src/rules/data/semgrep-rules/frontend-security.yaml +200 -0
- package/src/rules/data/semgrep-rules/go-core.yaml +4959 -0
- package/src/rules/data/semgrep-rules/hft-cpp-security.yaml +631 -0
- package/src/rules/data/semgrep-rules/infra-k8s-helm.yaml +4968 -0
- package/src/rules/data/semgrep-rules/integration-security.yaml +2362 -0
- package/src/rules/data/semgrep-rules/java-enterprise.yaml +14756 -0
- package/src/rules/data/semgrep-rules/java-spring.yaml +397 -0
- package/src/rules/data/semgrep-rules/license-compliance.yaml +186 -0
- package/src/rules/data/semgrep-rules/mobile-flutter.yaml +37 -0
- package/src/rules/data/semgrep-rules/mobile-security.yaml +721 -0
- package/src/rules/data/semgrep-rules/nodejs-nestjs.yaml +5164 -0
- package/src/rules/data/semgrep-rules/nodejs-security.yaml +326 -0
- package/src/rules/data/semgrep-rules/observability.yaml +381 -0
- package/src/rules/data/semgrep-rules/php-security.yaml +3601 -0
- package/src/rules/data/semgrep-rules/python-backend-pro.yaml +30 -0
- package/src/rules/data/semgrep-rules/python-django.yaml +181 -0
- package/src/rules/data/semgrep-rules/python-security.yaml +284 -0
- package/src/rules/data/semgrep-rules/ru-regulatory.yaml +496 -0
- package/src/rules/data/semgrep-rules/ruby-rails.yaml +3078 -0
- package/src/rules/data/semgrep-rules/rust-security.yaml +2701 -0
|
@@ -0,0 +1,1023 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
- id: runsec.domain-access-management.py-100
|
|
3
|
+
metadata:
|
|
4
|
+
runsec_version: v1.0
|
|
5
|
+
confidence: |-
|
|
6
|
+
0.9
|
|
7
|
+
exploit_scenario: |-
|
|
8
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
9
|
+
fix_template: |-
|
|
10
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
11
|
+
pattern-either:
|
|
12
|
+
- pattern: |-
|
|
13
|
+
if token == os.getenv("CHAT_TOKEN")
|
|
14
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-100\\b'
|
|
15
|
+
message: |-
|
|
16
|
+
RunSec Detection [PY-100]: Access Control SAR
|
|
17
|
+
languages:
|
|
18
|
+
- generic
|
|
19
|
+
severity: WARNING
|
|
20
|
+
- id: runsec.domain-access-management.py-105
|
|
21
|
+
metadata:
|
|
22
|
+
runsec_version: v1.0
|
|
23
|
+
confidence: |-
|
|
24
|
+
0.9
|
|
25
|
+
exploit_scenario: |-
|
|
26
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
27
|
+
fix_template: |-
|
|
28
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
29
|
+
pattern-either:
|
|
30
|
+
- pattern: |-
|
|
31
|
+
return Message.objects.all()
|
|
32
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-105\\b'
|
|
33
|
+
message: |-
|
|
34
|
+
RunSec Detection [PY-105]: Access Control SAR
|
|
35
|
+
languages:
|
|
36
|
+
- generic
|
|
37
|
+
severity: WARNING
|
|
38
|
+
- id: runsec.domain-access-management.njs-009
|
|
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
|
+
jwt.verify(token, secret)
|
|
50
|
+
- pattern-regex: 'Vulnerable:\\s*NJS\\-009\\b'
|
|
51
|
+
message: |-
|
|
52
|
+
RunSec Detection [NJS-009]: JWT Governance
|
|
53
|
+
languages:
|
|
54
|
+
- generic
|
|
55
|
+
severity: WARNING
|
|
56
|
+
- id: runsec.domain-access-management.njs-016
|
|
57
|
+
metadata:
|
|
58
|
+
runsec_version: v1.0
|
|
59
|
+
confidence: |-
|
|
60
|
+
0.9
|
|
61
|
+
exploit_scenario: |-
|
|
62
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
63
|
+
fix_template: |-
|
|
64
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
65
|
+
pattern-either:
|
|
66
|
+
- pattern: |-
|
|
67
|
+
repo.findById(req.params.id)
|
|
68
|
+
- pattern-regex: 'Vulnerable:\\s*NJS\\-016\\b'
|
|
69
|
+
message: |-
|
|
70
|
+
RunSec Detection [NJS-016]: OWASP API1
|
|
71
|
+
languages:
|
|
72
|
+
- generic
|
|
73
|
+
severity: WARNING
|
|
74
|
+
- id: runsec.domain-access-management.njs-024
|
|
75
|
+
metadata:
|
|
76
|
+
runsec_version: v1.0
|
|
77
|
+
confidence: |-
|
|
78
|
+
0.9
|
|
79
|
+
exploit_scenario: |-
|
|
80
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
81
|
+
fix_template: |-
|
|
82
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
83
|
+
pattern-either:
|
|
84
|
+
- pattern: |-
|
|
85
|
+
res.cookie("sid", sid)
|
|
86
|
+
- pattern-regex: 'Vulnerable:\\s*NJS\\-024\\b'
|
|
87
|
+
message: |-
|
|
88
|
+
RunSec Detection [NJS-024]: Session Hardening
|
|
89
|
+
languages:
|
|
90
|
+
- generic
|
|
91
|
+
severity: WARNING
|
|
92
|
+
- id: runsec.domain-access-management.njs-026
|
|
93
|
+
metadata:
|
|
94
|
+
runsec_version: v1.0
|
|
95
|
+
confidence: |-
|
|
96
|
+
0.9
|
|
97
|
+
exploit_scenario: |-
|
|
98
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
99
|
+
fix_template: |-
|
|
100
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
101
|
+
pattern-either:
|
|
102
|
+
- pattern: |-
|
|
103
|
+
User.create(req.body)
|
|
104
|
+
- pattern-regex: 'Vulnerable:\\s*NJS\\-026\\b'
|
|
105
|
+
message: |-
|
|
106
|
+
RunSec Detection [NJS-026]: OWASP Mass Assignment
|
|
107
|
+
languages:
|
|
108
|
+
- generic
|
|
109
|
+
severity: WARNING
|
|
110
|
+
- id: runsec.domain-access-management.py-011
|
|
111
|
+
metadata:
|
|
112
|
+
runsec_version: v1.0
|
|
113
|
+
confidence: |-
|
|
114
|
+
0.9
|
|
115
|
+
exploit_scenario: |-
|
|
116
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
117
|
+
fix_template: |-
|
|
118
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
119
|
+
pattern-either:
|
|
120
|
+
- pattern: |-
|
|
121
|
+
decode(token, key) without allowlist
|
|
122
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-011\\b'
|
|
123
|
+
message: |-
|
|
124
|
+
RunSec Detection [PY-011]: Auth Baseline
|
|
125
|
+
languages:
|
|
126
|
+
- generic
|
|
127
|
+
severity: WARNING
|
|
128
|
+
- id: runsec.domain-access-management.py-013
|
|
129
|
+
metadata:
|
|
130
|
+
runsec_version: v1.0
|
|
131
|
+
confidence: |-
|
|
132
|
+
0.9
|
|
133
|
+
exploit_scenario: |-
|
|
134
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
135
|
+
fix_template: |-
|
|
136
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
137
|
+
pattern-either:
|
|
138
|
+
- pattern: |-
|
|
139
|
+
Model(**request.json())
|
|
140
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-013\\b'
|
|
141
|
+
message: |-
|
|
142
|
+
RunSec Detection [PY-013]: AuthZ Baseline
|
|
143
|
+
languages:
|
|
144
|
+
- generic
|
|
145
|
+
severity: WARNING
|
|
146
|
+
- id: runsec.domain-access-management.fts-018
|
|
147
|
+
metadata:
|
|
148
|
+
runsec_version: v1.0
|
|
149
|
+
confidence: |-
|
|
150
|
+
0.9
|
|
151
|
+
exploit_scenario: |-
|
|
152
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
153
|
+
fix_template: |-
|
|
154
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
155
|
+
pattern-either:
|
|
156
|
+
- pattern: |-
|
|
157
|
+
display:none вместо server-side ACL
|
|
158
|
+
- pattern-regex: 'Vulnerable:\\s*FTS\\-018\\b'
|
|
159
|
+
message: |-
|
|
160
|
+
RunSec Detection [FTS-018]: Client Auth Safety
|
|
161
|
+
languages:
|
|
162
|
+
- generic
|
|
163
|
+
severity: WARNING
|
|
164
|
+
- id: runsec.domain-access-management.fts-019
|
|
165
|
+
metadata:
|
|
166
|
+
runsec_version: v1.0
|
|
167
|
+
confidence: |-
|
|
168
|
+
0.9
|
|
169
|
+
exploit_scenario: |-
|
|
170
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
171
|
+
fix_template: |-
|
|
172
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
173
|
+
pattern-either:
|
|
174
|
+
- pattern: |-
|
|
175
|
+
role == "admin"
|
|
176
|
+
- pattern-regex: 'Vulnerable:\\s*FTS\\-019\\b'
|
|
177
|
+
message: |-
|
|
178
|
+
RunSec Detection [FTS-019]: JS Auth Safety
|
|
179
|
+
languages:
|
|
180
|
+
- generic
|
|
181
|
+
severity: WARNING
|
|
182
|
+
- id: runsec.domain-access-management.app-100
|
|
183
|
+
metadata:
|
|
184
|
+
runsec_version: v1.0
|
|
185
|
+
confidence: |-
|
|
186
|
+
0.9
|
|
187
|
+
exploit_scenario: |-
|
|
188
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
189
|
+
fix_template: |-
|
|
190
|
+
Вводить idempotency-key и single-flight для token issue.
|
|
191
|
+
pattern-either:
|
|
192
|
+
- pattern: |-
|
|
193
|
+
Повторная выдача токена на один challenge
|
|
194
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-100\\b'
|
|
195
|
+
message: |-
|
|
196
|
+
RunSec Detection [APP-100]: Architecture Risks
|
|
197
|
+
languages:
|
|
198
|
+
- generic
|
|
199
|
+
severity: WARNING
|
|
200
|
+
- id: runsec.domain-access-management.app-101
|
|
201
|
+
metadata:
|
|
202
|
+
runsec_version: v1.0
|
|
203
|
+
confidence: |-
|
|
204
|
+
0.9
|
|
205
|
+
exploit_scenario: |-
|
|
206
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
207
|
+
fix_template: |-
|
|
208
|
+
Обязательный timeout + retry budget + circuit breaker.
|
|
209
|
+
pattern-either:
|
|
210
|
+
- pattern: |-
|
|
211
|
+
HTTP-клиент без timeout
|
|
212
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-101\\b'
|
|
213
|
+
message: |-
|
|
214
|
+
RunSec Detection [APP-101]: Architecture Risks
|
|
215
|
+
languages:
|
|
216
|
+
- generic
|
|
217
|
+
severity: WARNING
|
|
218
|
+
- id: runsec.domain-access-management.app-102
|
|
219
|
+
metadata:
|
|
220
|
+
runsec_version: v1.0
|
|
221
|
+
confidence: |-
|
|
222
|
+
0.9
|
|
223
|
+
exploit_scenario: |-
|
|
224
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
225
|
+
fix_template: |-
|
|
226
|
+
Fail-closed при ошибке внешнего IdP.
|
|
227
|
+
pattern-either:
|
|
228
|
+
- pattern: |-
|
|
229
|
+
except: allow()
|
|
230
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-102\\b'
|
|
231
|
+
message: |-
|
|
232
|
+
RunSec Detection [APP-102]: Architecture Risks
|
|
233
|
+
languages:
|
|
234
|
+
- generic
|
|
235
|
+
severity: WARNING
|
|
236
|
+
- id: runsec.domain-access-management.app-103
|
|
237
|
+
metadata:
|
|
238
|
+
runsec_version: v1.0
|
|
239
|
+
confidence: |-
|
|
240
|
+
0.9
|
|
241
|
+
exploit_scenario: |-
|
|
242
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
243
|
+
fix_template: |-
|
|
244
|
+
Привязка токена к nonce/device/session fingerprint.
|
|
245
|
+
pattern-either:
|
|
246
|
+
- pattern: |-
|
|
247
|
+
Токен не связан с устройством/контекстом
|
|
248
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-103\\b'
|
|
249
|
+
message: |-
|
|
250
|
+
RunSec Detection [APP-103]: Architecture Risks
|
|
251
|
+
languages:
|
|
252
|
+
- generic
|
|
253
|
+
severity: WARNING
|
|
254
|
+
- id: runsec.domain-access-management.app-104
|
|
255
|
+
metadata:
|
|
256
|
+
runsec_version: v1.0
|
|
257
|
+
confidence: |-
|
|
258
|
+
0.9
|
|
259
|
+
exploit_scenario: |-
|
|
260
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
261
|
+
fix_template: |-
|
|
262
|
+
Обязательный MFA gate для high-risk операций.
|
|
263
|
+
pattern-either:
|
|
264
|
+
- pattern: |-
|
|
265
|
+
Step-up не проверяется
|
|
266
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-104\\b'
|
|
267
|
+
message: |-
|
|
268
|
+
RunSec Detection [APP-104]: Architecture Risks
|
|
269
|
+
languages:
|
|
270
|
+
- generic
|
|
271
|
+
severity: WARNING
|
|
272
|
+
- id: runsec.domain-access-management.app-105
|
|
273
|
+
metadata:
|
|
274
|
+
runsec_version: v1.0
|
|
275
|
+
confidence: |-
|
|
276
|
+
0.9
|
|
277
|
+
exploit_scenario: |-
|
|
278
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
279
|
+
fix_template: |-
|
|
280
|
+
Re-auth/step-up перед привилегированными операциями.
|
|
281
|
+
pattern-either:
|
|
282
|
+
- pattern: |-
|
|
283
|
+
Долгая сессия без повторной верификации
|
|
284
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-105\\b'
|
|
285
|
+
message: |-
|
|
286
|
+
RunSec Detection [APP-105]: Architecture Risks
|
|
287
|
+
languages:
|
|
288
|
+
- generic
|
|
289
|
+
severity: WARNING
|
|
290
|
+
- id: runsec.domain-access-management.app-106
|
|
291
|
+
metadata:
|
|
292
|
+
runsec_version: v1.0
|
|
293
|
+
confidence: |-
|
|
294
|
+
0.9
|
|
295
|
+
exploit_scenario: |-
|
|
296
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
297
|
+
fix_template: |-
|
|
298
|
+
Явный least-privilege allowlist ролей.
|
|
299
|
+
pattern-either:
|
|
300
|
+
- pattern: |-
|
|
301
|
+
role in ["*"]
|
|
302
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-106\\b'
|
|
303
|
+
message: |-
|
|
304
|
+
RunSec Detection [APP-106]: Architecture Risks
|
|
305
|
+
languages:
|
|
306
|
+
- generic
|
|
307
|
+
severity: WARNING
|
|
308
|
+
- id: runsec.domain-access-management.app-107
|
|
309
|
+
metadata:
|
|
310
|
+
runsec_version: v1.0
|
|
311
|
+
confidence: |-
|
|
312
|
+
0.9
|
|
313
|
+
exploit_scenario: |-
|
|
314
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
315
|
+
fix_template: |-
|
|
316
|
+
Scope-bound short-lived tokens per service.
|
|
317
|
+
pattern-either:
|
|
318
|
+
- pattern: |-
|
|
319
|
+
Один service-token для разных сервисов
|
|
320
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-107\\b'
|
|
321
|
+
message: |-
|
|
322
|
+
RunSec Detection [APP-107]: Architecture Risks
|
|
323
|
+
languages:
|
|
324
|
+
- generic
|
|
325
|
+
severity: WARNING
|
|
326
|
+
- id: runsec.domain-access-management.app-108
|
|
327
|
+
metadata:
|
|
328
|
+
runsec_version: v1.0
|
|
329
|
+
confidence: |-
|
|
330
|
+
0.9
|
|
331
|
+
exploit_scenario: |-
|
|
332
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
333
|
+
fix_template: |-
|
|
334
|
+
Central revocation + backchannel logout.
|
|
335
|
+
pattern-either:
|
|
336
|
+
- pattern: |-
|
|
337
|
+
Logout не инвалидирует downstream-сессии
|
|
338
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-108\\b'
|
|
339
|
+
message: |-
|
|
340
|
+
RunSec Detection [APP-108]: Architecture Risks
|
|
341
|
+
languages:
|
|
342
|
+
- generic
|
|
343
|
+
severity: WARNING
|
|
344
|
+
- id: runsec.domain-access-management.app-109
|
|
345
|
+
metadata:
|
|
346
|
+
runsec_version: v1.0
|
|
347
|
+
confidence: |-
|
|
348
|
+
0.9
|
|
349
|
+
exploit_scenario: |-
|
|
350
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
351
|
+
fix_template: |-
|
|
352
|
+
Использовать POST/PUT/PATCH + CSRF guards.
|
|
353
|
+
pattern-either:
|
|
354
|
+
- pattern: |-
|
|
355
|
+
Изменение состояния через GET endpoint
|
|
356
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-109\\b'
|
|
357
|
+
message: |-
|
|
358
|
+
RunSec Detection [APP-109]: Architecture Risks
|
|
359
|
+
languages:
|
|
360
|
+
- generic
|
|
361
|
+
severity: WARNING
|
|
362
|
+
- id: runsec.domain-access-management.app-110
|
|
363
|
+
metadata:
|
|
364
|
+
runsec_version: v1.0
|
|
365
|
+
confidence: |-
|
|
366
|
+
0.9
|
|
367
|
+
exploit_scenario: |-
|
|
368
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
369
|
+
fix_template: |-
|
|
370
|
+
Проверять subject/scope до исполнения job.
|
|
371
|
+
pattern-either:
|
|
372
|
+
- pattern: |-
|
|
373
|
+
Worker выполняет команду без ACL
|
|
374
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-110\\b'
|
|
375
|
+
message: |-
|
|
376
|
+
RunSec Detection [APP-110]: Architecture Risks
|
|
377
|
+
languages:
|
|
378
|
+
- generic
|
|
379
|
+
severity: WARNING
|
|
380
|
+
- id: runsec.domain-access-management.app-111
|
|
381
|
+
metadata:
|
|
382
|
+
runsec_version: v1.0
|
|
383
|
+
confidence: |-
|
|
384
|
+
0.9
|
|
385
|
+
exploit_scenario: |-
|
|
386
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
387
|
+
fix_template: |-
|
|
388
|
+
Ротация по SLA + автоотзыв компрометированных ключей.
|
|
389
|
+
pattern-either:
|
|
390
|
+
- pattern: |-
|
|
391
|
+
Неограниченный lifetime ключей
|
|
392
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-111\\b'
|
|
393
|
+
message: |-
|
|
394
|
+
RunSec Detection [APP-111]: Architecture Risks
|
|
395
|
+
languages:
|
|
396
|
+
- generic
|
|
397
|
+
severity: WARNING
|
|
398
|
+
- id: runsec.domain-access-management.app-112
|
|
399
|
+
metadata:
|
|
400
|
+
runsec_version: v1.0
|
|
401
|
+
confidence: |-
|
|
402
|
+
0.9
|
|
403
|
+
exploit_scenario: |-
|
|
404
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
405
|
+
fix_template: |-
|
|
406
|
+
Rate-limit + progressive delay + lockout.
|
|
407
|
+
pattern-either:
|
|
408
|
+
- pattern: |-
|
|
409
|
+
Бесконечные попытки входа
|
|
410
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-112\\b'
|
|
411
|
+
message: |-
|
|
412
|
+
RunSec Detection [APP-112]: Architecture Risks
|
|
413
|
+
languages:
|
|
414
|
+
- generic
|
|
415
|
+
severity: WARNING
|
|
416
|
+
- id: runsec.domain-access-management.app-113
|
|
417
|
+
metadata:
|
|
418
|
+
runsec_version: v1.0
|
|
419
|
+
confidence: |-
|
|
420
|
+
0.9
|
|
421
|
+
exploit_scenario: |-
|
|
422
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
423
|
+
fix_template: |-
|
|
424
|
+
Включать tenant claim + enforce в policy layer.
|
|
425
|
+
pattern-either:
|
|
426
|
+
- pattern: |-
|
|
427
|
+
token не содержит tenant context
|
|
428
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-113\\b'
|
|
429
|
+
message: |-
|
|
430
|
+
RunSec Detection [APP-113]: Architecture Risks
|
|
431
|
+
languages:
|
|
432
|
+
- generic
|
|
433
|
+
severity: WARNING
|
|
434
|
+
- id: runsec.domain-access-management.app-114
|
|
435
|
+
metadata:
|
|
436
|
+
runsec_version: v1.0
|
|
437
|
+
confidence: |-
|
|
438
|
+
0.9
|
|
439
|
+
exploit_scenario: |-
|
|
440
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
441
|
+
fix_template: |-
|
|
442
|
+
Централизованный security audit log.
|
|
443
|
+
pattern-either:
|
|
444
|
+
- pattern: |-
|
|
445
|
+
Нет событий login/privilege escalation
|
|
446
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-114\\b'
|
|
447
|
+
message: |-
|
|
448
|
+
RunSec Detection [APP-114]: Architecture Risks
|
|
449
|
+
languages:
|
|
450
|
+
- generic
|
|
451
|
+
severity: WARNING
|
|
452
|
+
- id: runsec.domain-access-management.app-115
|
|
453
|
+
metadata:
|
|
454
|
+
runsec_version: v1.0
|
|
455
|
+
confidence: |-
|
|
456
|
+
0.9
|
|
457
|
+
exploit_scenario: |-
|
|
458
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
459
|
+
fix_template: |-
|
|
460
|
+
Signed delegation token + bounded TTL + audit.
|
|
461
|
+
pattern-either:
|
|
462
|
+
- pattern: |-
|
|
463
|
+
Админ-имперсонация без traceability
|
|
464
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-115\\b'
|
|
465
|
+
message: |-
|
|
466
|
+
RunSec Detection [APP-115]: Architecture Risks
|
|
467
|
+
languages:
|
|
468
|
+
- generic
|
|
469
|
+
severity: WARNING
|
|
470
|
+
- id: runsec.domain-access-management.app-116
|
|
471
|
+
metadata:
|
|
472
|
+
runsec_version: v1.0
|
|
473
|
+
confidence: |-
|
|
474
|
+
0.9
|
|
475
|
+
exploit_scenario: |-
|
|
476
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
477
|
+
fix_template: |-
|
|
478
|
+
Явная обработка ошибок + forced re-auth.
|
|
479
|
+
pattern-either:
|
|
480
|
+
- pattern: |-
|
|
481
|
+
Ошибки refresh маскируются
|
|
482
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-116\\b'
|
|
483
|
+
message: |-
|
|
484
|
+
RunSec Detection [APP-116]: Architecture Risks
|
|
485
|
+
languages:
|
|
486
|
+
- generic
|
|
487
|
+
severity: WARNING
|
|
488
|
+
- id: runsec.domain-access-management.app-117
|
|
489
|
+
metadata:
|
|
490
|
+
runsec_version: v1.0
|
|
491
|
+
confidence: |-
|
|
492
|
+
0.9
|
|
493
|
+
exploit_scenario: |-
|
|
494
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
495
|
+
fix_template: |-
|
|
496
|
+
Risk-based controls, captcha/behavioral checks.
|
|
497
|
+
pattern-either:
|
|
498
|
+
- pattern: |-
|
|
499
|
+
Нет device/risk checks
|
|
500
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-117\\b'
|
|
501
|
+
message: |-
|
|
502
|
+
RunSec Detection [APP-117]: Architecture Risks
|
|
503
|
+
languages:
|
|
504
|
+
- generic
|
|
505
|
+
severity: WARNING
|
|
506
|
+
- id: runsec.domain-access-management.app-118
|
|
507
|
+
metadata:
|
|
508
|
+
runsec_version: v1.0
|
|
509
|
+
confidence: |-
|
|
510
|
+
0.9
|
|
511
|
+
exploit_scenario: |-
|
|
512
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
513
|
+
fix_template: |-
|
|
514
|
+
Явный consent prompt + least-scope default.
|
|
515
|
+
pattern-either:
|
|
516
|
+
- pattern: |-
|
|
517
|
+
Делегированные scope без подтверждения
|
|
518
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-118\\b'
|
|
519
|
+
message: |-
|
|
520
|
+
RunSec Detection [APP-118]: Architecture Risks
|
|
521
|
+
languages:
|
|
522
|
+
- generic
|
|
523
|
+
severity: WARNING
|
|
524
|
+
- id: runsec.domain-access-management.app-119
|
|
525
|
+
metadata:
|
|
526
|
+
runsec_version: v1.0
|
|
527
|
+
confidence: |-
|
|
528
|
+
0.9
|
|
529
|
+
exploit_scenario: |-
|
|
530
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
531
|
+
fix_template: |-
|
|
532
|
+
Cache key по subject+scope+tenant+ttl.
|
|
533
|
+
pattern-either:
|
|
534
|
+
- pattern: |-
|
|
535
|
+
Кэш auth-решений без key scoping
|
|
536
|
+
- pattern-regex: 'Vulnerable:\\s*APP\\-119\\b'
|
|
537
|
+
message: |-
|
|
538
|
+
RunSec Detection [APP-119]: Architecture Risks
|
|
539
|
+
languages:
|
|
540
|
+
- generic
|
|
541
|
+
severity: WARNING
|
|
542
|
+
- id: runsec.domain-access-management.py-010
|
|
543
|
+
metadata:
|
|
544
|
+
runsec_version: v1.0
|
|
545
|
+
confidence: |-
|
|
546
|
+
0.9
|
|
547
|
+
exploit_scenario: |-
|
|
548
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
549
|
+
fix_template: |-
|
|
550
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
551
|
+
pattern-either:
|
|
552
|
+
- pattern: |-
|
|
553
|
+
random.random() for token
|
|
554
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-010\\b'
|
|
555
|
+
message: |-
|
|
556
|
+
RunSec Detection [PY-010]: Python secrets guidance
|
|
557
|
+
languages:
|
|
558
|
+
- generic
|
|
559
|
+
severity: WARNING
|
|
560
|
+
- id: runsec.domain-access-management.py-012
|
|
561
|
+
metadata:
|
|
562
|
+
runsec_version: v1.0
|
|
563
|
+
confidence: |-
|
|
564
|
+
0.9
|
|
565
|
+
exploit_scenario: |-
|
|
566
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
567
|
+
fix_template: |-
|
|
568
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
569
|
+
pattern-either:
|
|
570
|
+
- pattern: |-
|
|
571
|
+
session.execute(f"SELECT * FROM t WHERE id={id}")
|
|
572
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-012\\b'
|
|
573
|
+
message: |-
|
|
574
|
+
RunSec Detection [PY-012]: CWE-89
|
|
575
|
+
languages:
|
|
576
|
+
- generic
|
|
577
|
+
severity: WARNING
|
|
578
|
+
- id: runsec.domain-access-management.py-017
|
|
579
|
+
metadata:
|
|
580
|
+
runsec_version: v1.0
|
|
581
|
+
confidence: |-
|
|
582
|
+
0.9
|
|
583
|
+
exploit_scenario: |-
|
|
584
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
585
|
+
fix_template: |-
|
|
586
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
587
|
+
pattern-either:
|
|
588
|
+
- pattern: |-
|
|
589
|
+
@app.post("/login") without limiter
|
|
590
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-017\\b'
|
|
591
|
+
message: |-
|
|
592
|
+
RunSec Detection [PY-017]: OWASP API4
|
|
593
|
+
languages:
|
|
594
|
+
- generic
|
|
595
|
+
severity: WARNING
|
|
596
|
+
- id: runsec.domain-access-management.py-023
|
|
597
|
+
metadata:
|
|
598
|
+
runsec_version: v1.0
|
|
599
|
+
confidence: |-
|
|
600
|
+
0.9
|
|
601
|
+
exploit_scenario: |-
|
|
602
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
603
|
+
fix_template: |-
|
|
604
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
605
|
+
pattern-either:
|
|
606
|
+
- pattern: |-
|
|
607
|
+
browser.new_page() reused globally
|
|
608
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-023\\b'
|
|
609
|
+
message: |-
|
|
610
|
+
RunSec Detection [PY-023]: Playwright isolation
|
|
611
|
+
languages:
|
|
612
|
+
- generic
|
|
613
|
+
severity: WARNING
|
|
614
|
+
- id: runsec.domain-access-management.py-026
|
|
615
|
+
metadata:
|
|
616
|
+
runsec_version: v1.0
|
|
617
|
+
confidence: |-
|
|
618
|
+
0.9
|
|
619
|
+
exploit_scenario: |-
|
|
620
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
621
|
+
fix_template: |-
|
|
622
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
623
|
+
pattern-either:
|
|
624
|
+
- pattern: |-
|
|
625
|
+
logger.info("token=%s", token)
|
|
626
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-026\\b'
|
|
627
|
+
message: |-
|
|
628
|
+
RunSec Detection [PY-026]: OWASP Logging
|
|
629
|
+
languages:
|
|
630
|
+
- generic
|
|
631
|
+
severity: WARNING
|
|
632
|
+
- id: runsec.domain-access-management.py-028
|
|
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
|
+
state change endpoint without CSRF check
|
|
644
|
+
- pattern-regex: 'Vulnerable:\\s*PY\\-028\\b'
|
|
645
|
+
message: |-
|
|
646
|
+
RunSec Detection [PY-028]: OWASP CSRF
|
|
647
|
+
languages:
|
|
648
|
+
- generic
|
|
649
|
+
severity: WARNING
|
|
650
|
+
- id: runsec.domain-access-management.dja-007
|
|
651
|
+
metadata:
|
|
652
|
+
runsec_version: v1.0
|
|
653
|
+
confidence: |-
|
|
654
|
+
0.9
|
|
655
|
+
exploit_scenario: |-
|
|
656
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
657
|
+
fix_template: |-
|
|
658
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
659
|
+
pattern-either:
|
|
660
|
+
- pattern: |-
|
|
661
|
+
SESSION_COOKIE_SECURE = False
|
|
662
|
+
CSRF_COOKIE_SECURE = False
|
|
663
|
+
- pattern-regex: 'Vulnerable:\\s*DJA\\-007\\b'
|
|
664
|
+
message: |-
|
|
665
|
+
RunSec Detection [DJA-007]: CWE-614
|
|
666
|
+
languages:
|
|
667
|
+
- generic
|
|
668
|
+
severity: WARNING
|
|
669
|
+
- id: runsec.domain-access-management.dja-012
|
|
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
|
+
SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer"
|
|
681
|
+
- pattern-regex: 'Vulnerable:\\s*DJA\\-012\\b'
|
|
682
|
+
message: |-
|
|
683
|
+
RunSec Detection [DJA-012]: CWE-502
|
|
684
|
+
languages:
|
|
685
|
+
- generic
|
|
686
|
+
severity: WARNING
|
|
687
|
+
- id: runsec.domain-access-management.dja-014
|
|
688
|
+
metadata:
|
|
689
|
+
runsec_version: v1.0
|
|
690
|
+
confidence: |-
|
|
691
|
+
0.9
|
|
692
|
+
exploit_scenario: |-
|
|
693
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
694
|
+
fix_template: |-
|
|
695
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
696
|
+
pattern-either:
|
|
697
|
+
- pattern: |-
|
|
698
|
+
PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"]
|
|
699
|
+
- pattern-regex: 'Vulnerable:\\s*DJA\\-014\\b'
|
|
700
|
+
message: |-
|
|
701
|
+
RunSec Detection [DJA-014]: CWE-330
|
|
702
|
+
languages:
|
|
703
|
+
- generic
|
|
704
|
+
severity: WARNING
|
|
705
|
+
- id: runsec.domain-access-management.mob-010
|
|
706
|
+
metadata:
|
|
707
|
+
runsec_version: v1.0
|
|
708
|
+
confidence: |-
|
|
709
|
+
0.9
|
|
710
|
+
exploit_scenario: |-
|
|
711
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
712
|
+
fix_template: |-
|
|
713
|
+
Исключить вывод токенов даже в debug-режиме, применять редактирование/маскирование чувствительных данных в логах.
|
|
714
|
+
pattern-either:
|
|
715
|
+
- pattern: |-
|
|
716
|
+
if (kDebugMode) {
|
|
717
|
+
print('token - $token');
|
|
718
|
+
}
|
|
719
|
+
- pattern-regex: 'Vulnerable:\\s*MOB\\-010\\b'
|
|
720
|
+
message: |-
|
|
721
|
+
RunSec Detection [MOB-010]: Silk Mobile SAR
|
|
722
|
+
languages:
|
|
723
|
+
- generic
|
|
724
|
+
severity: WARNING
|
|
725
|
+
- id: runsec.domain-access-management.dsk-105
|
|
726
|
+
metadata:
|
|
727
|
+
runsec_version: v1.0
|
|
728
|
+
confidence: |-
|
|
729
|
+
0.9
|
|
730
|
+
exploit_scenario: |-
|
|
731
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
732
|
+
fix_template: |-
|
|
733
|
+
Для чувствительных операций использовать ipcMain.handle + строгую валидацию payload и проверку источника/role.
|
|
734
|
+
pattern-either:
|
|
735
|
+
- pattern: |-
|
|
736
|
+
ipcMain.on("export-secrets", (event, payload) => { ... })
|
|
737
|
+
- pattern-regex: 'Vulnerable:\\s*DSK\\-105\\b'
|
|
738
|
+
message: |-
|
|
739
|
+
RunSec Detection [DSK-105]: Insight SAR
|
|
740
|
+
languages:
|
|
741
|
+
- generic
|
|
742
|
+
severity: WARNING
|
|
743
|
+
- id: runsec.domain-access-management.njs-032
|
|
744
|
+
metadata:
|
|
745
|
+
runsec_version: v1.0
|
|
746
|
+
confidence: |-
|
|
747
|
+
0.9
|
|
748
|
+
exploit_scenario: |-
|
|
749
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
750
|
+
fix_template: |-
|
|
751
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
752
|
+
pattern-either:
|
|
753
|
+
- pattern: |-
|
|
754
|
+
const secret = process.env.JWT_SECRET
|
|
755
|
+
- pattern-regex: 'Vulnerable:\\s*NJS\\-032\\b'
|
|
756
|
+
message: |-
|
|
757
|
+
RunSec Detection [NJS-032]: JWT Secret Management
|
|
758
|
+
languages:
|
|
759
|
+
- generic
|
|
760
|
+
severity: WARNING
|
|
761
|
+
- id: runsec.domain-access-management.njs-033
|
|
762
|
+
metadata:
|
|
763
|
+
runsec_version: v1.0
|
|
764
|
+
confidence: |-
|
|
765
|
+
0.9
|
|
766
|
+
exploit_scenario: |-
|
|
767
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
768
|
+
fix_template: |-
|
|
769
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
770
|
+
pattern-either:
|
|
771
|
+
- pattern: |-
|
|
772
|
+
https.request({ rejectUnauthorized: false })
|
|
773
|
+
- pattern-regex: 'Vulnerable:\\s*NJS\\-033\\b'
|
|
774
|
+
message: |-
|
|
775
|
+
RunSec Detection [NJS-033]: TLS/mTLS Hardening
|
|
776
|
+
languages:
|
|
777
|
+
- generic
|
|
778
|
+
severity: WARNING
|
|
779
|
+
- id: runsec.domain-access-management.fts-002
|
|
780
|
+
metadata:
|
|
781
|
+
runsec_version: v1.0
|
|
782
|
+
confidence: |-
|
|
783
|
+
0.9
|
|
784
|
+
exploit_scenario: |-
|
|
785
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
786
|
+
fix_template: |-
|
|
787
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
788
|
+
pattern-either:
|
|
789
|
+
- pattern: |-
|
|
790
|
+
localStorage.setItem("jwt", token)
|
|
791
|
+
sessionStorage.setItem("snils", value)
|
|
792
|
+
- pattern-regex: 'Vulnerable:\\s*FTS\\-002\\b'
|
|
793
|
+
message: |-
|
|
794
|
+
RunSec Detection [FTS-002]: OWASP ASVS Session Management
|
|
795
|
+
languages:
|
|
796
|
+
- generic
|
|
797
|
+
severity: WARNING
|
|
798
|
+
- id: runsec.domain-access-management.fts-003
|
|
799
|
+
metadata:
|
|
800
|
+
runsec_version: v1.0
|
|
801
|
+
confidence: |-
|
|
802
|
+
0.9
|
|
803
|
+
exploit_scenario: |-
|
|
804
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
805
|
+
fix_template: |-
|
|
806
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
807
|
+
pattern-either:
|
|
808
|
+
- pattern: |-
|
|
809
|
+
console.log("token", token)
|
|
810
|
+
console.error("user profile", profile)
|
|
811
|
+
- pattern-regex: 'Vulnerable:\\s*FTS\\-003\\b'
|
|
812
|
+
message: |-
|
|
813
|
+
RunSec Detection [FTS-003]: OWASP Logging Cheat Sheet
|
|
814
|
+
languages:
|
|
815
|
+
- generic
|
|
816
|
+
severity: WARNING
|
|
817
|
+
- id: runsec.domain-access-management.fts-005
|
|
818
|
+
metadata:
|
|
819
|
+
runsec_version: v1.0
|
|
820
|
+
confidence: |-
|
|
821
|
+
0.9
|
|
822
|
+
exploit_scenario: |-
|
|
823
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
824
|
+
fix_template: |-
|
|
825
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
826
|
+
pattern-either:
|
|
827
|
+
- pattern: |-
|
|
828
|
+
if (user.role === "admin") price = 0
|
|
829
|
+
if (clientAmount < limit) approve()
|
|
830
|
+
- pattern-regex: 'Vulnerable:\\s*FTS\\-005\\b'
|
|
831
|
+
message: |-
|
|
832
|
+
RunSec Detection [FTS-005]: OWASP Top 10 A04 Insecure Design
|
|
833
|
+
languages:
|
|
834
|
+
- generic
|
|
835
|
+
severity: WARNING
|
|
836
|
+
- id: runsec.domain-access-management.fts-014
|
|
837
|
+
metadata:
|
|
838
|
+
runsec_version: v1.0
|
|
839
|
+
confidence: |-
|
|
840
|
+
0.9
|
|
841
|
+
exploit_scenario: |-
|
|
842
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
843
|
+
fix_template: |-
|
|
844
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
845
|
+
pattern-either:
|
|
846
|
+
- pattern: |-
|
|
847
|
+
const token = Math.random().toString(36)
|
|
848
|
+
- pattern-regex: 'Vulnerable:\\s*FTS\\-014\\b'
|
|
849
|
+
message: |-
|
|
850
|
+
RunSec Detection [FTS-014]: Web Crypto API Guidance
|
|
851
|
+
languages:
|
|
852
|
+
- generic
|
|
853
|
+
severity: WARNING
|
|
854
|
+
- id: runsec.domain-access-management.cwe-755-py
|
|
855
|
+
metadata:
|
|
856
|
+
runsec_version: v1.0
|
|
857
|
+
confidence: |-
|
|
858
|
+
0.9
|
|
859
|
+
exploit_scenario: |-
|
|
860
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
861
|
+
fix_template: |-
|
|
862
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
863
|
+
pattern-either:
|
|
864
|
+
- pattern: |-
|
|
865
|
+
def verify_token(token):
|
|
866
|
+
try:
|
|
867
|
+
return decode_token(token)
|
|
868
|
+
except Exception:
|
|
869
|
+
logger.error("auth failed")
|
|
870
|
+
return True
|
|
871
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-755\\-PY\\b'
|
|
872
|
+
message: |-
|
|
873
|
+
RunSec Detection [CWE-755-PY]: CWE Compliance
|
|
874
|
+
languages:
|
|
875
|
+
- generic
|
|
876
|
+
severity: WARNING
|
|
877
|
+
- id: runsec.domain-access-management.cwe-384-py
|
|
878
|
+
metadata:
|
|
879
|
+
runsec_version: v1.0
|
|
880
|
+
confidence: |-
|
|
881
|
+
0.9
|
|
882
|
+
exploit_scenario: |-
|
|
883
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
884
|
+
fix_template: |-
|
|
885
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
886
|
+
pattern-either:
|
|
887
|
+
- pattern: |-
|
|
888
|
+
login(request, user) без request.session.cycle_key()
|
|
889
|
+
# no rotate_token(request)
|
|
890
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-384\\-PY\\b'
|
|
891
|
+
message: |-
|
|
892
|
+
RunSec Detection [CWE-384-PY]: CWE Compliance - Logic/Resources
|
|
893
|
+
languages:
|
|
894
|
+
- generic
|
|
895
|
+
severity: WARNING
|
|
896
|
+
- id: runsec.domain-access-management.cwe-613-py
|
|
897
|
+
metadata:
|
|
898
|
+
runsec_version: v1.0
|
|
899
|
+
confidence: |-
|
|
900
|
+
0.9
|
|
901
|
+
exploit_scenario: |-
|
|
902
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
903
|
+
fix_template: |-
|
|
904
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
905
|
+
pattern-either:
|
|
906
|
+
- pattern: |-
|
|
907
|
+
SESSION_COOKIE_AGE = 60*60*24*30
|
|
908
|
+
# no idle timeout / absolute timeout
|
|
909
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-613\\-PY\\b'
|
|
910
|
+
message: |-
|
|
911
|
+
RunSec Detection [CWE-613-PY]: CWE Final Certification
|
|
912
|
+
languages:
|
|
913
|
+
- generic
|
|
914
|
+
severity: WARNING
|
|
915
|
+
- id: runsec.domain-access-management.cwe-770-py
|
|
916
|
+
metadata:
|
|
917
|
+
runsec_version: v1.0
|
|
918
|
+
confidence: |-
|
|
919
|
+
0.9
|
|
920
|
+
exploit_scenario: |-
|
|
921
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
922
|
+
fix_template: |-
|
|
923
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
924
|
+
pattern-either:
|
|
925
|
+
- pattern: |-
|
|
926
|
+
@app.post("/login") без limiter/throttle
|
|
927
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-770\\-PY\\b'
|
|
928
|
+
message: |-
|
|
929
|
+
RunSec Detection [CWE-770-PY]: CWE Final Certification
|
|
930
|
+
languages:
|
|
931
|
+
- generic
|
|
932
|
+
severity: WARNING
|
|
933
|
+
- id: runsec.domain-access-management.cwe-770-js
|
|
934
|
+
metadata:
|
|
935
|
+
runsec_version: v1.0
|
|
936
|
+
confidence: |-
|
|
937
|
+
0.9
|
|
938
|
+
exploit_scenario: |-
|
|
939
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
940
|
+
fix_template: |-
|
|
941
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
942
|
+
pattern-either:
|
|
943
|
+
- pattern: |-
|
|
944
|
+
app.post("/login", handler) без limiter middleware
|
|
945
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-770\\-JS\\b'
|
|
946
|
+
message: |-
|
|
947
|
+
RunSec Detection [CWE-770-JS]: CWE Final Certification
|
|
948
|
+
languages:
|
|
949
|
+
- generic
|
|
950
|
+
severity: WARNING
|
|
951
|
+
- id: runsec.domain-access-management.cwe-20-orm-mass-assign
|
|
952
|
+
metadata:
|
|
953
|
+
runsec_version: v1.0
|
|
954
|
+
confidence: |-
|
|
955
|
+
0.9
|
|
956
|
+
exploit_scenario: |-
|
|
957
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
958
|
+
fix_template: |-
|
|
959
|
+
Для create/update использовать явный whitelist полей (DTO/pick), блокировать системные/привилегированные атрибуты и валидировать типы.
|
|
960
|
+
pattern-either:
|
|
961
|
+
- pattern: |-
|
|
962
|
+
Model(**request.json)
|
|
963
|
+
Model.create(req.body)
|
|
964
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-20\\-ORM\\-MASS\\-ASSIGN\\b'
|
|
965
|
+
message: |-
|
|
966
|
+
RunSec Detection [CWE-20-ORM-MASS-ASSIGN]: CWE Final Certification
|
|
967
|
+
languages:
|
|
968
|
+
- generic
|
|
969
|
+
severity: WARNING
|
|
970
|
+
- id: runsec.domain-access-management.cwe-287-keycloak-jwt-aud-iss
|
|
971
|
+
metadata:
|
|
972
|
+
runsec_version: v1.0
|
|
973
|
+
confidence: |-
|
|
974
|
+
0.9
|
|
975
|
+
exploit_scenario: |-
|
|
976
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
977
|
+
fix_template: |-
|
|
978
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
979
|
+
pattern-either:
|
|
980
|
+
- pattern: |-
|
|
981
|
+
jwt.decode(token, key, algorithms=["RS256"]) без audience/issuer
|
|
982
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-287\\-KEYCLOAK\\-JWT\\-AUD\\-ISS\\b'
|
|
983
|
+
message: |-
|
|
984
|
+
RunSec Detection [CWE-287-KEYCLOAK-JWT-AUD-ISS]: CWE Final Certification
|
|
985
|
+
languages:
|
|
986
|
+
- generic
|
|
987
|
+
severity: WARNING
|
|
988
|
+
- id: runsec.domain-access-management.cwe-613-keycloak-session-checks
|
|
989
|
+
metadata:
|
|
990
|
+
runsec_version: v1.0
|
|
991
|
+
confidence: |-
|
|
992
|
+
0.9
|
|
993
|
+
exploit_scenario: |-
|
|
994
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
995
|
+
fix_template: |-
|
|
996
|
+
Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.
|
|
997
|
+
pattern-either:
|
|
998
|
+
- pattern: |-
|
|
999
|
+
Проверка JWT без контроля exp/nbf и политики сессии realm/client
|
|
1000
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-613\\-KEYCLOAK\\-SESSION\\-CHECKS\\b'
|
|
1001
|
+
message: |-
|
|
1002
|
+
RunSec Detection [CWE-613-KEYCLOAK-SESSION-CHECKS]: CWE Final Certification
|
|
1003
|
+
languages:
|
|
1004
|
+
- generic
|
|
1005
|
+
severity: WARNING
|
|
1006
|
+
- id: runsec.domain-access-management.cwe-862-nextjs-server-action
|
|
1007
|
+
metadata:
|
|
1008
|
+
runsec_version: v1.0
|
|
1009
|
+
confidence: |-
|
|
1010
|
+
0.9
|
|
1011
|
+
exploit_scenario: |-
|
|
1012
|
+
Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
|
|
1013
|
+
fix_template: |-
|
|
1014
|
+
Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.
|
|
1015
|
+
pattern-either:
|
|
1016
|
+
- pattern: |-
|
|
1017
|
+
"use server" функция без getServerSession(...)/auth() в начале
|
|
1018
|
+
- pattern-regex: 'Vulnerable:\\s*CWE\\-862\\-NEXTJS\\-SERVER\\-ACTION\\b'
|
|
1019
|
+
message: |-
|
|
1020
|
+
RunSec Detection [CWE-862-NEXTJS-SERVER-ACTION]: CWE Final Certification
|
|
1021
|
+
languages:
|
|
1022
|
+
- generic
|
|
1023
|
+
severity: WARNING
|