@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,397 @@
1
+ rules:
2
+ - id: runsec.java-spring.java-001
3
+ metadata:
4
+ runsec_version: v1.0
5
+ confidence: |-
6
+ 0.9
7
+ exploit_scenario: |-
8
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
9
+ fix_template: |-
10
+ String expr = request.getParameter("expr"); if (!expr.matches("^[0-9+\\-*/(). ]{1,64}$")) throw new IllegalArgumentException(); ... Object result = safeMathEval(expr);
11
+ pattern-either:
12
+ - pattern: |-
13
+ String expr = request.getParameter("expr");
14
+ ...
15
+ Object result = engine.eval(expr);
16
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-001\\b'
17
+ message: |-
18
+ RunSec Detection [JAVA-001]: CWE-94
19
+ languages:
20
+ - java
21
+ severity: WARNING
22
+ - id: runsec.java-spring.java-002
23
+ metadata:
24
+ runsec_version: v1.0
25
+ confidence: |-
26
+ 0.9
27
+ exploit_scenario: |-
28
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
29
+ fix_template: |-
30
+ String host = req.getParameter("host"); if (!host.matches("^[a-zA-Z0-9.-]{1,255}$")) throw new IllegalArgumentException(); ... new ProcessBuilder("ping","-c","1",host).start();
31
+ pattern-either:
32
+ - pattern: |-
33
+ String host = req.getParameter("host");
34
+ ...
35
+ Runtime.getRuntime().exec("ping -c 1 " + host);
36
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-002\\b'
37
+ message: |-
38
+ RunSec Detection [JAVA-002]: CWE-78
39
+ languages:
40
+ - java
41
+ severity: WARNING
42
+ - id: runsec.java-spring.java-003
43
+ metadata:
44
+ runsec_version: v1.0
45
+ confidence: |-
46
+ 0.9
47
+ exploit_scenario: |-
48
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
49
+ fix_template: |-
50
+ String action = req.getParameter("action"); Map<String,List<String>> allowed = Map.of("uptime", List.of("uptime")); ... new ProcessBuilder(allowed.get(action)).start();
51
+ pattern-either:
52
+ - pattern: |-
53
+ String cmd = req.getParameter("cmd");
54
+ ...
55
+ new ProcessBuilder("sh","-c", cmd).start();
56
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-003\\b'
57
+ message: |-
58
+ RunSec Detection [JAVA-003]: CWE-77
59
+ languages:
60
+ - java
61
+ severity: WARNING
62
+ - id: runsec.java-spring.java-004
63
+ metadata:
64
+ runsec_version: v1.0
65
+ confidence: |-
66
+ 0.9
67
+ exploit_scenario: |-
68
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
69
+ fix_template: |-
70
+ String key = req.getParameter("handler"); Map<String,Class<?>> allow = Map.of("health", HealthHandler.class); ... Class<?> c = allow.get(key);
71
+ pattern-either:
72
+ - pattern: |-
73
+ String className = req.getParameter("class");
74
+ ...
75
+ Class<?> c = Class.forName(className);
76
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-004\\b'
77
+ message: |-
78
+ RunSec Detection [JAVA-004]: CWE-470
79
+ languages:
80
+ - java
81
+ severity: WARNING
82
+ - id: runsec.java-spring.java-005
83
+ metadata:
84
+ runsec_version: v1.0
85
+ confidence: |-
86
+ 0.9
87
+ exploit_scenario: |-
88
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
89
+ fix_template: |-
90
+ String method = req.getParameter("method"); Set<String> allow = Set.of("health","status"); if (!allow.contains(method)) throw new SecurityException(); ... target.getClass().getMethod(method).invoke(target);
91
+ pattern-either:
92
+ - pattern: |-
93
+ String method = req.getParameter("method");
94
+ ...
95
+ target.getClass().getMethod(method).invoke(target);
96
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-005\\b'
97
+ message: |-
98
+ RunSec Detection [JAVA-005]: CWE-74
99
+ languages:
100
+ - java
101
+ severity: WARNING
102
+ - id: runsec.java-spring.java-006
103
+ metadata:
104
+ runsec_version: v1.0
105
+ confidence: |-
106
+ 0.9
107
+ exploit_scenario: |-
108
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
109
+ fix_template: |-
110
+ String order = req.getParameter("order"); if (!Set.of("name","created_at").contains(order)) order = "name"; ... String q = "SELECT * FROM users ORDER BY " + order;
111
+ pattern-either:
112
+ - pattern: |-
113
+ String order = req.getParameter("order");
114
+ ...
115
+ String q = "SELECT * FROM users ORDER BY " + order;
116
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-006\\b'
117
+ message: |-
118
+ RunSec Detection [JAVA-006]: CWE-74
119
+ languages:
120
+ - java
121
+ severity: WARNING
122
+ - id: runsec.java-spring.java-007
123
+ metadata:
124
+ runsec_version: v1.0
125
+ confidence: |-
126
+ 0.9
127
+ exploit_scenario: |-
128
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
129
+ fix_template: |-
130
+ String key = req.getParameter("key"); Map<String,String> allow = Map.of("env","prod"); ... return allow.getOrDefault(key, "n/a");
131
+ pattern-either:
132
+ - pattern: |-
133
+ String exp = req.getParameter("exp");
134
+ ...
135
+ parser.parseExpression(exp).getValue(ctx);
136
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-007\\b'
137
+ message: |-
138
+ RunSec Detection [JAVA-007]: CWE-94
139
+ languages:
140
+ - java
141
+ severity: WARNING
142
+ - id: runsec.java-spring.java-008
143
+ metadata:
144
+ runsec_version: v1.0
145
+ confidence: |-
146
+ 0.9
147
+ exploit_scenario: |-
148
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
149
+ fix_template: |-
150
+ String cmd = req.getParameter("cmd"); if (!Set.of("normalize").contains(cmd)) throw new SecurityException(); ... runFixedJsFunction(cmd);
151
+ pattern-either:
152
+ - pattern: |-
153
+ String js = req.getParameter("script");
154
+ ...
155
+ engine.eval(js);
156
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-008\\b'
157
+ message: |-
158
+ RunSec Detection [JAVA-008]: CWE-95
159
+ languages:
160
+ - java
161
+ severity: WARNING
162
+ - id: runsec.java-spring.java-009
163
+ metadata:
164
+ runsec_version: v1.0
165
+ confidence: |-
166
+ 0.9
167
+ exploit_scenario: |-
168
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
169
+ fix_template: |-
170
+ String key = request.getParameter("key"); Map<String,Object> allowed = Map.of("health", true); ... return allowed.getOrDefault(key, false);
171
+ pattern-either:
172
+ - pattern: |-
173
+ String expr = request.getParameter("expr");
174
+ ...
175
+ spelParser.parseExpression(expr).getValue(context);
176
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-009\\b'
177
+ message: |-
178
+ RunSec Detection [JAVA-009]: CWE-917
179
+ languages:
180
+ - java
181
+ severity: WARNING
182
+ - id: runsec.java-spring.java-010
183
+ metadata:
184
+ runsec_version: v1.0
185
+ confidence: |-
186
+ 0.9
187
+ exploit_scenario: |-
188
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
189
+ fix_template: |-
190
+ ObjectMapper mapper = new ObjectMapper(); ... mapper.disableDefaultTyping(); UserDTO obj = mapper.readValue(body, UserDTO.class);
191
+ pattern-either:
192
+ - pattern: |-
193
+ ObjectMapper mapper = new ObjectMapper();
194
+ ...
195
+ mapper.enableDefaultTyping();
196
+ Object obj = mapper.readValue(body, Object.class);
197
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-010\\b'
198
+ message: |-
199
+ RunSec Detection [JAVA-010]: CWE-502
200
+ languages:
201
+ - java
202
+ severity: WARNING
203
+ - id: runsec.java-spring.java-011
204
+ metadata:
205
+ runsec_version: v1.0
206
+ confidence: |-
207
+ 0.9
208
+ exploit_scenario: |-
209
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
210
+ fix_template: |-
211
+ String msg = request.getParameter("msg"); String safe = msg.replace("${", "\\${"); ... logger.error("msg={}", safe);
212
+ pattern-either:
213
+ - pattern: |-
214
+ String msg = request.getParameter("msg");
215
+ ...
216
+ logger.error(msg);
217
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-011\\b'
218
+ message: |-
219
+ RunSec Detection [JAVA-011]: CWE-502
220
+ languages:
221
+ - java
222
+ severity: WARNING
223
+ - id: runsec.java-spring.java-012
224
+ metadata:
225
+ runsec_version: v1.0
226
+ confidence: |-
227
+ 0.9
228
+ exploit_scenario: |-
229
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
230
+ fix_template: |-
231
+ DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); f.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); f.setFeature("http://xml.org/sax/features/external-general-entities", false); f.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
232
+ pattern-either:
233
+ - pattern: |-
234
+ DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
235
+ ...
236
+ DocumentBuilder b = f.newDocumentBuilder();
237
+ Document d = b.parse(input);
238
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-012\\b'
239
+ message: |-
240
+ RunSec Detection [JAVA-012]: CWE-611
241
+ languages:
242
+ - java
243
+ severity: WARNING
244
+ - id: runsec.java-spring.java-013
245
+ metadata:
246
+ runsec_version: v1.0
247
+ confidence: |-
248
+ 0.9
249
+ exploit_scenario: |-
250
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
251
+ fix_template: |-
252
+ http.authorizeHttpRequests(auth -> auth .requestMatchers("/admin/**").hasRole("ADMIN") );
253
+ pattern-either:
254
+ - pattern: |-
255
+ http.authorizeHttpRequests(auth -> auth
256
+ .requestMatchers("/admin/**").permitAll()
257
+ );
258
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-013\\b'
259
+ message: |-
260
+ RunSec Detection [JAVA-013]: CWE-306
261
+ languages:
262
+ - java
263
+ severity: WARNING
264
+ - id: runsec.java-spring.java-014
265
+ metadata:
266
+ runsec_version: v1.0
267
+ confidence: |-
268
+ 0.9
269
+ exploit_scenario: |-
270
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
271
+ fix_template: |-
272
+ http.csrf(csrf -> csrf .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) );
273
+ pattern-either:
274
+ - pattern: |-
275
+ http.csrf(csrf -> csrf.disable());
276
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-014\\b'
277
+ message: |-
278
+ RunSec Detection [JAVA-014]: CWE-352
279
+ languages:
280
+ - java
281
+ severity: WARNING
282
+ - id: runsec.java-spring.java-015
283
+ metadata:
284
+ runsec_version: v1.0
285
+ confidence: |-
286
+ 0.9
287
+ exploit_scenario: |-
288
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
289
+ fix_template: |-
290
+ String next = request.getParameter("next"); if (!next.startsWith("/")) next = "/"; ... return "redirect:" + next;
291
+ pattern-either:
292
+ - pattern: |-
293
+ String next = request.getParameter("next");
294
+ ...
295
+ return "redirect:" + next;
296
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-015\\b'
297
+ message: |-
298
+ RunSec Detection [JAVA-015]: CWE-601
299
+ languages:
300
+ - java
301
+ severity: WARNING
302
+ - id: runsec.java-spring.java-016
303
+ metadata:
304
+ runsec_version: v1.0
305
+ confidence: |-
306
+ 0.9
307
+ exploit_scenario: |-
308
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
309
+ fix_template: |-
310
+ JwsHeader<?> h = Jwts.parserBuilder().build().parseClaimsJws(token).getHeader(); if (!"HS256".equals(h.getAlgorithm())) throw new SecurityException(); Claims c = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
311
+ pattern-either:
312
+ - pattern: |-
313
+ Claims c = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
314
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-016\\b'
315
+ message: |-
316
+ RunSec Detection [JAVA-016]: CWE-347
317
+ languages:
318
+ - java
319
+ severity: WARNING
320
+ - id: runsec.java-spring.java-017
321
+ metadata:
322
+ runsec_version: v1.0
323
+ confidence: |-
324
+ 0.9
325
+ exploit_scenario: |-
326
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
327
+ fix_template: |-
328
+ SecureRandom r = new SecureRandom(); ... byte[] token = new byte[32]; r.nextBytes(token);
329
+ pattern-either:
330
+ - pattern: |-
331
+ Random r = new Random();
332
+ ...
333
+ String token = Long.toHexString(r.nextLong());
334
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-017\\b'
335
+ message: |-
336
+ RunSec Detection [JAVA-017]: CWE-338
337
+ languages:
338
+ - java
339
+ severity: WARNING
340
+ - id: runsec.java-spring.java-018
341
+ metadata:
342
+ runsec_version: v1.0
343
+ confidence: |-
344
+ 0.9
345
+ exploit_scenario: |-
346
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
347
+ fix_template: |-
348
+ String jwtSecret = System.getenv("JWT_SECRET"); if (jwtSecret == null) throw new IllegalStateException();
349
+ pattern-either:
350
+ - pattern: |-
351
+ String jwtSecret = "prod-secret-123";
352
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-018\\b'
353
+ message: |-
354
+ RunSec Detection [JAVA-018]: CWE-798
355
+ languages:
356
+ - java
357
+ severity: WARNING
358
+ - id: runsec.java-spring.java-019
359
+ metadata:
360
+ runsec_version: v1.0
361
+ confidence: |-
362
+ 0.9
363
+ exploit_scenario: |-
364
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
365
+ fix_template: |-
366
+ if (file.getSize() > 5 * 1024 * 1024) throw new IllegalArgumentException(); ... byte[] data = file.getBytes();
367
+ pattern-either:
368
+ - pattern: |-
369
+ MultipartFile file = req.getFile("file");
370
+ ...
371
+ byte[] data = file.getBytes();
372
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-019\\b'
373
+ message: |-
374
+ RunSec Detection [JAVA-019]: CWE-400
375
+ languages:
376
+ - java
377
+ severity: WARNING
378
+ - id: runsec.java-spring.java-020
379
+ metadata:
380
+ runsec_version: v1.0
381
+ confidence: |-
382
+ 0.9
383
+ exploit_scenario: |-
384
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
385
+ fix_template: |-
386
+ String p = request.getParameter("path"); Path target = Paths.get(root, p).normalize(); if (!target.startsWith(Paths.get(root))) throw new SecurityException();
387
+ pattern-either:
388
+ - pattern: |-
389
+ String p = request.getParameter("path");
390
+ ...
391
+ Path target = Paths.get(root, p);
392
+ - pattern-regex: 'Vulnerable:\\s*JAVA\\-020\\b'
393
+ message: |-
394
+ RunSec Detection [JAVA-020]: CWE-22
395
+ languages:
396
+ - java
397
+ severity: WARNING
@@ -0,0 +1,186 @@
1
+ rules:
2
+ - id: runsec.license-compliance.lic-001
3
+ metadata:
4
+ runsec_version: v1.0
5
+ confidence: |-
6
+ 0.9
7
+ exploit_scenario: |-
8
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
9
+ fix_template: |-
10
+ Заменить AGPL зависимость на совместимую по лицензии (MIT/BSD/Apache-2.0) и проверить транзитивные зависимости (lockfile/SBOM).
11
+ pattern-either:
12
+ - pattern: |-
13
+ "license": "AGPL-3.0"
14
+ AGPL-3.0
15
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-001\\b'
16
+ message: |-
17
+ RunSec Detection [LIC-001]: Policy: strong copyleft (AGPL-3.0)
18
+ languages:
19
+ - generic
20
+ severity: WARNING
21
+ - id: runsec.license-compliance.lic-002
22
+ metadata:
23
+ runsec_version: v1.0
24
+ confidence: |-
25
+ 0.9
26
+ exploit_scenario: |-
27
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
28
+ fix_template: |-
29
+ Исключить SSPL зависимости в облачном контуре, заменить на permissive варианты и подтвердить лицензионную совместимость (SBOM/scan).
30
+ pattern-either:
31
+ - pattern: |-
32
+ SSPL
33
+ "license": "SSPL"
34
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-002\\b'
35
+ message: |-
36
+ RunSec Detection [LIC-002]: Policy: SSPL risk for hosted services
37
+ languages:
38
+ - generic
39
+ severity: WARNING
40
+ - id: runsec.license-compliance.lic-003
41
+ metadata:
42
+ runsec_version: v1.0
43
+ confidence: |-
44
+ 0.9
45
+ exploit_scenario: |-
46
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
47
+ fix_template: |-
48
+ Обновить библиотеку до поддерживаемой версии, либо заменить на альтернативу с активным мейнтейном; фиксировать версии в lockfile.
49
+ pattern-either:
50
+ - pattern: |-
51
+ deprecated: true
52
+ last_updated: "2021-01-01"
53
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-003\\b'
54
+ message: |-
55
+ RunSec Detection [LIC-003]: Policy: dependency maintenance SLA (2y)
56
+ languages:
57
+ - generic
58
+ severity: WARNING
59
+ - id: runsec.license-compliance.lic-004
60
+ metadata:
61
+ runsec_version: v1.0
62
+ confidence: |-
63
+ 0.9
64
+ exploit_scenario: |-
65
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
66
+ fix_template: |-
67
+ Разрешать только явно идентифицированные SPDX-лицензии; блокировать сборку при UNKNOWN/NOASSERTION.
68
+ pattern-either:
69
+ - pattern: |-
70
+ "license": "UNKNOWN"
71
+ license: null
72
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-004\\b'
73
+ message: |-
74
+ RunSec Detection [LIC-004]: SPDX policy baseline
75
+ languages:
76
+ - generic
77
+ severity: WARNING
78
+ - id: runsec.license-compliance.lic-005
79
+ metadata:
80
+ runsec_version: v1.0
81
+ confidence: |-
82
+ 0.9
83
+ exploit_scenario: |-
84
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
85
+ fix_template: |-
86
+ Использовать только доверенные внутренние registry/mirror и фиксировать источник в CI policy.
87
+ pattern-either:
88
+ - pattern: |-
89
+ pip install --index-url https://pypi.org/simple
90
+ npm config set registry https://registry.npmjs.org/
91
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-005\\b'
92
+ message: |-
93
+ RunSec Detection [LIC-005]: Supply-chain trusted source policy
94
+ languages:
95
+ - generic
96
+ severity: WARNING
97
+ - id: runsec.license-compliance.lic-006
98
+ metadata:
99
+ runsec_version: v1.0
100
+ confidence: |-
101
+ 0.9
102
+ exploit_scenario: |-
103
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
104
+ fix_template: |-
105
+ Добавить CI gate: syft + policy check (block on AGPL/GPL/SSPL according to org policy).
106
+ pattern-either:
107
+ - pattern: |-
108
+ # build runs without syft/license stage
109
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-006\\b'
110
+ message: |-
111
+ RunSec Detection [LIC-006]: CI/CD license governance
112
+ languages:
113
+ - generic
114
+ severity: WARNING
115
+ - id: runsec.license-compliance.lic-008
116
+ metadata:
117
+ runsec_version: v1.0
118
+ confidence: |-
119
+ 0.9
120
+ exploit_scenario: |-
121
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
122
+ fix_template: |-
123
+ Генерировать SBOM через syft в формате CycloneDX/SPDX и сохранять как артефакт релиза.
124
+ pattern-either:
125
+ - pattern: |-
126
+ # no sbom artifact generated
127
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-008\\b'
128
+ message: |-
129
+ RunSec Detection [LIC-008]: SBOM requirement (CycloneDX/SPDX)
130
+ languages:
131
+ - generic
132
+ severity: WARNING
133
+ - id: runsec.license-compliance.lic-009
134
+ metadata:
135
+ runsec_version: v1.0
136
+ confidence: |-
137
+ 0.9
138
+ exploit_scenario: |-
139
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
140
+ fix_template: |-
141
+ Анализировать syft-отчет на транзитивные copyleft-лицензии и блокировать релиз до remediation/exception approval.
142
+ pattern-either:
143
+ - pattern: |-
144
+ # syft output includes GPL/AGPL transitive packages
145
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-009\\b'
146
+ message: |-
147
+ RunSec Detection [LIC-009]: Transitive license risk management
148
+ languages:
149
+ - generic
150
+ severity: WARNING
151
+ - id: runsec.license-compliance.lic-010
152
+ metadata:
153
+ runsec_version: v1.0
154
+ confidence: |-
155
+ 0.9
156
+ exploit_scenario: |-
157
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
158
+ fix_template: |-
159
+ Для бинарных зависимостей проверять наличие license metadata/attestation и подтверждать источник/право использования.
160
+ pattern-either:
161
+ - pattern: |-
162
+ # bundled .so/.dll without embedded license evidence
163
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-010\\b'
164
+ message: |-
165
+ RunSec Detection [LIC-010]: Binary provenance and license policy
166
+ languages:
167
+ - generic
168
+ severity: WARNING
169
+ - id: runsec.license-compliance.lic-011
170
+ metadata:
171
+ runsec_version: v1.0
172
+ confidence: |-
173
+ 0.9
174
+ exploit_scenario: |-
175
+ Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия.
176
+ fix_template: |-
177
+ Enable central package management + lockfile; verify package hashes in CI; verify binary signatures for external DLLs.
178
+ pattern-either:
179
+ - pattern: |-
180
+ # dotnet restore without packages.lock.json integrity gate
181
+ - pattern-regex: 'Vulnerable:\\s*LIC\\-011\\b'
182
+ message: |-
183
+ RunSec Detection [LIC-011]: CWE-347, CWE-1104
184
+ languages:
185
+ - generic
186
+ severity: WARNING
@@ -0,0 +1,37 @@
1
+ rules:
2
+ - id: runsec.mobile-flutter.mob-001
3
+ pattern-either:
4
+ - pattern: |-
5
+ HttpOverrides.global = MyHttpOverrides();
6
+ class MyHttpOverrides extends HttpOverrides {
7
+ bool badCertificateCallback(...) => true;
8
+ }
9
+ - pattern-regex: 'Vulnerable:\\s*MOB\\-001\\b'
10
+ message: 'RunSec Detection [MOB-001]: Mobile security baseline'
11
+ languages:
12
+ - generic
13
+ severity: WARNING
14
+ - id: runsec.mobile-flutter.mob-010
15
+ pattern-either:
16
+ - pattern: |-
17
+ if (kDebugMode) {
18
+ print('token - $token');
19
+ }
20
+ - pattern-regex: 'Vulnerable:\\s*MOB\\-010\\b'
21
+ message: 'RunSec Detection [MOB-010]: Mobile security baseline'
22
+ languages:
23
+ - generic
24
+ severity: WARNING
25
+ - id: runsec.mobile-flutter.mob-021
26
+ pattern-either:
27
+ - pattern: |-
28
+ class MainActivity: FlutterActivity() {
29
+ override fun onCreate(...) {
30
+ super.onCreate(...)
31
+ }
32
+ }
33
+ - pattern-regex: 'Vulnerable:\\s*MOB\\-021\\b'
34
+ message: 'RunSec Detection [MOB-021]: Mobile security baseline'
35
+ languages:
36
+ - generic
37
+ severity: WARNING