@runsec/mcp 1.0.35 → 1.0.37
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/data/.rag-cache.json +1 -0
- package/dist/data/skills/_exploit_overrides.json +16 -0
- package/dist/data/skills/advanced-agent-cloud/index.md +94 -0
- package/dist/data/skills/advanced-agent-cloud/patterns.md +46 -0
- package/dist/data/skills/advanced-agent-cloud/skill.json +38 -0
- package/dist/data/skills/app-logic/index.md +69 -0
- package/dist/data/skills/app-logic/patterns.md +23 -0
- package/dist/data/skills/app-logic/skill.json +24 -0
- package/dist/data/skills/auth-keycloak/index.md +69 -0
- package/dist/data/skills/auth-keycloak/patterns.md +46 -0
- package/dist/data/skills/auth-keycloak/skill.json +51 -0
- package/dist/data/skills/browser-agent/index.md +58 -0
- package/dist/data/skills/browser-agent/patterns.md +15 -0
- package/dist/data/skills/browser-agent/skill.json +24 -0
- package/dist/data/skills/cloud-secrets/index.md +66 -0
- package/dist/data/skills/cloud-secrets/patterns.md +19 -0
- package/dist/data/skills/cloud-secrets/skill.json +28 -0
- package/dist/data/skills/csharp-dotnet/index.md +103 -0
- package/dist/data/skills/csharp-dotnet/patterns.md +270 -0
- package/dist/data/skills/csharp-dotnet/skill.json +27 -0
- package/dist/data/skills/desktop-vsto-suite/index.md +202 -0
- package/dist/data/skills/desktop-vsto-suite/patterns.md +154 -0
- package/dist/data/skills/desktop-vsto-suite/skill.json +26 -0
- package/dist/data/skills/devops-security/index.md +64 -0
- package/dist/data/skills/devops-security/patterns.md +23 -0
- package/dist/data/skills/devops-security/skill.json +42 -0
- package/dist/data/skills/domain-access-management/index.md +123 -0
- package/dist/data/skills/domain-access-management/patterns.md +58 -0
- package/dist/data/skills/domain-access-management/skill.json +36 -0
- package/dist/data/skills/domain-data-privacy/index.md +98 -0
- package/dist/data/skills/domain-data-privacy/patterns.md +48 -0
- package/dist/data/skills/domain-data-privacy/skill.json +36 -0
- package/dist/data/skills/domain-input-validation/index.md +210 -0
- package/dist/data/skills/domain-input-validation/patterns.md +158 -0
- package/dist/data/skills/domain-input-validation/skill.json +24 -0
- package/dist/data/skills/domain-platform-hardening/index.md +169 -0
- package/dist/data/skills/domain-platform-hardening/patterns.md +96 -0
- package/dist/data/skills/domain-platform-hardening/skill.json +27 -0
- package/dist/data/skills/ds-ml-security/patterns.md +137 -0
- package/dist/data/skills/fastapi-async/index.md +83 -0
- package/dist/data/skills/fastapi-async/patterns.md +329 -0
- package/dist/data/skills/fastapi-async/skill.json +32 -0
- package/dist/data/skills/frontend-react/index.md +26 -0
- package/dist/data/skills/frontend-react/patterns.md +226 -0
- package/dist/data/skills/frontend-react/skill.json +24 -0
- package/dist/data/skills/go-core/index.md +86 -0
- package/dist/data/skills/go-core/patterns.md +272 -0
- package/dist/data/skills/go-core/skill.json +22 -0
- package/dist/data/skills/hft-cpp-security/patterns.md +37 -0
- package/dist/data/skills/index.md +73 -0
- package/dist/data/skills/infra-k8s-helm/index.md +138 -0
- package/dist/data/skills/infra-k8s-helm/patterns.md +279 -0
- package/dist/data/skills/infra-k8s-helm/skill.json +41 -0
- package/dist/data/skills/integration-security/index.md +73 -0
- package/dist/data/skills/integration-security/patterns.md +132 -0
- package/dist/data/skills/integration-security/skill.json +30 -0
- package/dist/data/skills/java-enterprise/index.md +31 -0
- package/dist/data/skills/java-enterprise/patterns.md +816 -0
- package/dist/data/skills/java-enterprise/skill.json +26 -0
- package/dist/data/skills/java-spring/index.md +65 -0
- package/dist/data/skills/java-spring/patterns.md +22 -0
- package/dist/data/skills/java-spring/skill.json +23 -0
- package/dist/data/skills/license-compliance/index.md +58 -0
- package/dist/data/skills/license-compliance/patterns.md +12 -0
- package/dist/data/skills/license-compliance/skill.json +28 -0
- package/dist/data/skills/mobile-security/patterns.md +42 -0
- package/dist/data/skills/nodejs-nestjs/index.md +71 -0
- package/dist/data/skills/nodejs-nestjs/patterns.md +288 -0
- package/dist/data/skills/nodejs-nestjs/skill.json +24 -0
- package/dist/data/skills/observability/index.md +68 -0
- package/dist/data/skills/observability/patterns.md +22 -0
- package/dist/data/skills/observability/skill.json +26 -0
- package/dist/data/skills/php-security/patterns.md +202 -0
- package/dist/data/skills/ru-regulatory/index.md +72 -0
- package/dist/data/skills/ru-regulatory/patterns.md +28 -0
- package/dist/data/skills/ru-regulatory/skill.json +53 -0
- package/dist/data/skills/ruby-rails/index.md +65 -0
- package/dist/data/skills/ruby-rails/patterns.md +172 -0
- package/dist/data/skills/ruby-rails/skill.json +24 -0
- package/dist/data/skills/rust-security/patterns.md +152 -0
- package/dist/data/trufflehog-config.yaml +407 -0
- package/dist/index.js +3766 -372
- package/package.json +1 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
| ID | Название метрики | Anti-Pattern (Vulnerable Code/YAML) | Safe-Pattern (Remediation) | Stack | Источник fix_template | Exploit scenario |
|
|
2
|
+
|---|---|---|---|---|---|---|
|
|
3
|
+
| PY-007 | SSRF via user URL fetch | `requests.get(user_url)` | Host allowlist + blocking private ranges + egress policy. | Python | Input Validation | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий указывает внутренний URL/метаданные; SSRF к IMDS или внутренним сервисам (CWE-918). |
|
|
4
|
+
| PY-012 | SQL injection in dynamic execute | `execute(f"...{id}...")` | Parametrized queries / ORM bind params only. | Python | Input Validation | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
5
|
+
| PY-014 | Path traversal in file operations | `open(base + "/" + filename)` | `abspath/resolve` + boundary check to base dir. | Python | Input Validation | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
6
|
+
| PY-015 | eval/exec on untrusted data | `eval(user_expr)` | Запрет dynamic code execution, использовать safe parser. | Python | Input Validation | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
7
|
+
| PY-021 | SQLAlchemy text injection | `text(f"SELECT ... {name}")` | Использовать bind params и schema validation. | Python | Input Validation | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
8
|
+
| PY-025 | Missing webhook signature check | body processed without HMAC validation | Проверять подпись и replay-window. | Python | Input Validation | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
9
|
+
| PY-110 | Media path traversal | `join(MEDIA_ROOT, file_path)` | Нормализация + проверка префикса `MEDIA_ROOT`. | Python | Input Validation | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
10
|
+
| NJS-001 | Command injection in exec | `exec("tar " + userArchive)` | `execFile/spawn` + allowlist args. | Node.js/JavaScript | Input Validation | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
11
|
+
| NJS-002 | Path traversal in fs access | `fs.readFile(base + "/" + file)` | `path.resolve` + strict base boundary checks. | Node.js/JavaScript | Input Validation | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
12
|
+
| NJS-007 | SSRF in fetch | `fetch(req.body.url)` | URL allowlist + deny private/link-local. | Node.js/JavaScript | Input Validation | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
13
|
+
| PY-001 | FastAPI debug enabled in production | `app = FastAPI(debug=True)` | Отключать debug в production и управлять через безопасный конфиг. | Python | FastAPI deployment hardening | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
14
|
+
| PY-003 | Unsafe pickle deserialization | `pickle.loads(data)` | Использовать безопасные форматы (JSON/msgpack) и schema validation. | Python | CWE-502 | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий передаёт сериализованный объект; при небезопасной десериализации выполняет код на сервере (CWE-502). |
|
|
15
|
+
| PY-004 | Subprocess shell injection | `subprocess.run(cmd, shell=True)` | Использовать `shell=False`, whitelist аргументов и массив команд. | Python | CWE-78 | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий подставляет команду в shell=True; выполняет произвольные команды ОС (CWE-78). |
|
|
16
|
+
| PY-005 | YAML unsafe loader | `yaml.load(data, Loader=yaml.Loader)` | Использовать `yaml.safe_load` для недоверенных данных. | Python | PyYAML security | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
17
|
+
| PY-006 | Weak temp file handling | `tempfile.mktemp()` | Использовать `NamedTemporaryFile`/`mkstemp` с безопасными правами. | Python | CWE-377 | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
18
|
+
| PY-008 | Missing request timeout in outgoing calls | `requests.get(url)` | Всегда задавать timeout и retry budget. | Python | Reliability/security baseline | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
19
|
+
| PY-013 | ORM mass assignment | `Model(**request.json())` | Использовать DTO/allowlist полей перед записью в модель. | Python | OWASP Mass Assignment | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
20
|
+
| PY-016 | Insecure CORS wildcard with credentials | `allow_origins=["*"], allow_credentials=True` | Использовать строгий origin allowlist без wildcard+credentials. | Python | CORS hardening | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
21
|
+
| PY-018 | Async endpoint with blocking I/O | `async def ...: requests.get(...)` | Использовать async clients (`httpx.AsyncClient`) и non-blocking I/O. | Python | Async runtime safety | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
22
|
+
| PY-019 | Playwright launch with insecure flags | `browser = p.chromium.launch(args=["--no-sandbox"])` | Удалить insecure flags, использовать isolated runtime profile. | Python | Browser automation hardening | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
23
|
+
| PY-020 | FastAPI route without response_model returning DB object | `@app.get("/users/{id}")`<br>`return db_user` | Задавать `response_model` и отделять ORM объекты от API DTO. | Python | FastAPI response_model safety | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
24
|
+
| PY-022 | Pydantic construct bypass for external input | `UserModel.model_construct(**payload)` | Для внешних данных использовать `model_validate`/`parse_obj` с validation. | Python | Pydantic security | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
25
|
+
| PY-029 | Celery task deserialization risk | pickle serializer enabled in worker | Использовать json serializer и trusted broker controls. | Python | Celery security | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
26
|
+
| PY-030 | Unvalidated redirect target | `return RedirectResponse(next_url)` | Проверять redirect allowlist и запрещать external arbitrary redirects. | Python | OWASP Open Redirect | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
27
|
+
| DJA-001 | CSRF Disabled: view без CSRF-защиты | `@csrf_exempt`<br>`def update_profile(request):`<br>` ...`<br>` return JsonResponse({"ok": True})` | `@csrf_protect`<br>`def update_profile(request):`<br>` ...`<br>` return JsonResponse({"ok": True})` | Python | `CWE-352` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
28
|
+
| DJA-002 | Raw SQL Injection: строковая конкатенация в SQL | `q = "SELECT * FROM users WHERE email = '" + email + "'"`<br>`...`<br>`User.objects.raw(q)` | `q = "SELECT * FROM users WHERE email = %s"`<br>`...`<br>`User.objects.raw(q, [email])` | Python | `CWE-89` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
29
|
+
| DJA-003 | DEBUG=True in Production | `DEBUG = True` | `DEBUG = os.getenv("DJANGO_DEBUG", "false").lower() == "true"` | Python | `CWE-489` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий провоцирует ошибку; при DEBUG=True получает детали стека и конфигурации (CWE-489). |
|
|
30
|
+
| DJA-004 | Mass Assignment: `ModelForm` без явных `fields` | `class UserForm(forms.ModelForm):`<br>` class Meta:`<br>` model = User` | `class UserForm(forms.ModelForm):`<br>` class Meta:`<br>` model = User`<br>` fields = ["email", "display_name"]` | Python | `CWE-915` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
31
|
+
| DJA-005 | Insecure ALLOWED_HOSTS wildcard | `ALLOWED_HOSTS = ["*"]` | `ALLOWED_HOSTS = ["app.example.com", "admin.example.com"]` | Python | `CWE-346` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
32
|
+
| DJA-006 | Open Redirect через `next` без проверки | `return redirect(request.GET.get("next"))` | `next_url = request.GET.get("next", "/")`<br>`if not url_has_allowed_host_and_scheme(next_url, allowed_hosts={request.get_host()}):`<br>` next_url = "/"`<br>`return redirect(next_url)` | Python | `CWE-601` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
33
|
+
| DJA-009 | Unsafe file upload path (path traversal) | `path = os.path.join("/data/uploads", upload.name)` | `safe_name = os.path.basename(upload.name)`<br>`path = os.path.join("/data/uploads", safe_name)`<br>`...`<br>`with open(path, "wb") as f:` | Python | `CWE-22` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
34
|
+
| DJA-011 | XSS via `mark_safe`: доверие пользовательскому HTML | `html = mark_safe(user_input)` | `html = format_html("{}", user_input)`<br>`...`<br>`html = bleach.clean(user_input)` | Python | `CWE-79` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
35
|
+
| DJA-013 | Insecure `.extra()` where clause | `qs = User.objects.extra(where=["id=%s" % user_id])` | `qs = User.objects.filter(id=user_id)` | Python | `CWE-89` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
36
|
+
| DJA-016 | ReDoS in URL patterns via complex `re_path` | `urlpatterns = [`<br>` re_path(r"^(a+)+$", view),`<br>`]` | `urlpatterns = [`<br>` path("items/<slug:item>/", view),`<br>`]` | Python | `CWE-400` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
37
|
+
| DJA-017 | ModelForm `exclude=[]` abuse | `class AdminForm(forms.ModelForm):`<br>` class Meta:`<br>` model = User`<br>` exclude = []` | `class AdminForm(forms.ModelForm):`<br>` class Meta:`<br>` model = User`<br>` fields = ["email", "display_name"]` | Python | `CWE-915` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
38
|
+
| DSK-100 | Remote Code Injection via executeJavaScript | `mainWindow.webContents.executeJavaScript(`<br>` "window.render(" + JSON.stringify(userInput) + ")"`<br>`)` | Исключить динамическое исполнение строкового JS из недоверенных данных; передавать данные через безопасный IPC API с валидацией схемы. | Electron/Desktop | Insight SAR | Исключить динамическое исполнение строкового JS из недоверенных данных; передавать данные через безопасный IPC API с валидацией схемы. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
39
|
+
| NJS-003 | Event Loop Blocking через `*Sync` API в request handlers | `app.get("/data", (req,res) => { const x = fs.readFileSync(p) })` | В обработчиках запросов использовать async API (`fs.promises`, async zlib/crypto), выносить CPU-heavy задачи в worker queue/thread. | Node.js/JavaScript | Node.js Event Loop Safety | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
40
|
+
| NJS-004 | Insecure Serialization / unsafe eval processing | `const obj = serialize.unserialize(payload)`<br>`eval("(" + body + ")")` | Запретить `node-serialize` и eval-подобный парсинг; использовать `JSON.parse` + schema validation. | Node.js/JavaScript | OWASP Deserialization Security | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
41
|
+
| NJS-006 | Open Redirect via untrusted URL forwarding | `res.redirect(req.query.next)` | Валидировать redirect targets по allowlist доменов/путей, запрещать внешние схемы и абсолютные URL без проверки. | Node.js/JavaScript | OWASP Open Redirect | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
42
|
+
| NJS-008 | Broken CORS policy with wildcard + credentials | `cors({ origin: "*", credentials: true })` | Использовать строгий allowlist origin и отключать credentials для wildcard. | Node.js/JavaScript | OWASP CORS Security | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
43
|
+
| NJS-011 | Server-Side Prototype Pollution in merge/parsing flows | `deepMerge(config, req.body)`<br>`querystring.parse(req.url)` без фильтра ключей | Блокировать `__proto__`/`constructor`/`prototype`, использовать safe-merge и schema validation для входных структур. | Node.js/JavaScript | Prototype Pollution Server-Side | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
44
|
+
| NJS-012 | Unsafe Buffer allocation | `const b = Buffer.allocUnsafe(size)` | Использовать `Buffer.alloc()` или контролируемое заполнение буфера перед чтением, чтобы исключить утечку памяти. | Node.js/JavaScript | Node.js Buffer Security | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий подставляет строку в SQL через шаблон; при отсутствии параметров выполняет произвольный SQL (CWE-89). |
|
|
45
|
+
| NJS-013 | HTTP Parameter Pollution without type guards | `const id = req.query.id`<br>`if (id.includes("admin")) ...` | Явно валидировать типы `req.query/req.body` (string/array/object) и нормализовать параметры до бизнес-логики. | Node.js/JavaScript | OWASP Input Validation | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
46
|
+
| NJS-014 | Insecure Sandbox with `vm` module execution | `vm.runInNewContext(untrustedCode, sandbox)` | Не исполнять недоверенный код через `vm`; использовать изолированные микросервисы/контейнеры или специализированные sandbox-подходы с жесткими ограничениями. | Node.js/JavaScript | Node.js Sandbox Security | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
47
|
+
| NJS-015 | Event Loop ReDoS in server validators/routes | `const re = /(a+)+$/`<br>`if (re.test(req.body.input))` | Исключать regex с catastrophic backtracking, ограничивать input length и использовать безопасные/предкомпилированные паттерны. | Node.js/JavaScript | OWASP ReDoS (Server Side) | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
48
|
+
| NJS-017 | Dependency Confusion & Integrity gaps in package sources | `"lib-x": "git+https://github.com/org/lib-x.git"` (без commit hash)<br>`# no package-lock.json/npm-shrinkwrap.json` | Фиксировать зависимости по commit hash/tag+integrity, использовать lockfile (`package-lock.json`/`npm-shrinkwrap.json`) и приватные registry policies. | Node.js/JavaScript | Supply Chain Security | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
49
|
+
| NJS-018 | Insecure Header Leakage: X-Powered-By exposed | `app.disable("x-powered-by")` отсутствует<br>`helmet()` не подключен | Включить `helmet()` и отключить `X-Powered-By` для снижения fingerprinting и утечек информации о стеке. | Node.js/JavaScript | HTTP Header Hardening | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
50
|
+
| NJS-020 | Unsafe File Deletion/Cleanup with user-controlled paths | `fs.unlink(req.body.filePath, cb)` | Перед удалением нормализовать/resolve путь и проверять, что он находится в разрешенной temp/work директории. | Node.js/JavaScript | CWE-73 / File Path Control | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
51
|
+
| NJS-022 | Weak password hashing parameters | `bcrypt.hash(password, 4)` | Использовать достаточный work factor (например, 12+), периодически пересматривать параметры согласно hardware baseline. | Node.js/JavaScript | OWASP Password Storage | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
52
|
+
| NJS-023 | NoSQL Injection in Mongo-style filters | `User.find({ email: req.body.email })` (без schema/type guard) | Валидировать и нормализовать input, запрещать операторы `$ne/$gt/$where` из пользовательских payload-ов. | Node.js/JavaScript | OWASP NoSQL Injection | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
53
|
+
| NJS-025 | Open CORS preflight methods/headers overexposure | `cors({ methods: "*", allowedHeaders: "*" })` | Ограничивать `methods/allowedHeaders` минимумом необходимого, синхронизировать с API contract/allowlist. | Node.js/JavaScript | CORS Hardening Best Practices | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
54
|
+
| NJS-026 | Mass Assignment через прямую передачу `req.body` в ORM | `await User.create(req.body)`<br>`await User.update(req.body, { where: ... })` | Использовать allowlist полей (DTO/pick), игнорировать системные атрибуты и критичные security-флаги при mass update. | Node.js/JavaScript | OWASP Mass Assignment | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
55
|
+
| NJS-027 | Safe Buffer Creation: `Buffer.from(variable)` без type guard | `const buf = Buffer.from(input)` | Перед созданием буфера валидировать тип входа (`string`/`Uint8Array`) и исключить невалидные/числовые источники данных. | Node.js/JavaScript | Node.js Buffer Safety | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
56
|
+
| NJS-028 | SCA / Audit Gate отсутствует в npm scripts | `"scripts": { "build": "tsc", "test": "jest" }` (без `npm audit`/`snyk`/`socket`) | Добавить обязательный SCA gate в CI (`npm audit --audit-level=high`/`snyk test`/`socket protect`) и fail build на критичных уязвимостях. | Node.js/JavaScript | Supply Chain SCA Controls | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
57
|
+
| NJS-029 | SSTI / Unsafe template raw output tags | `<%- userContent %>` (EJS)<br>`!= userContent` (Pug) | Использовать экранированный вывод (`<%= ... %>`) и санитизацию HTML перед рендерингом динамического контента. | Node.js/JavaScript | SSTI/XSS Template Security | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
58
|
+
| NJS-031 | Prototype Pollution через spread operator из user input | `const merged = { ...defaults, ...req.body }` | Перед spread очищать опасные ключи (`__proto__`, `constructor`, `prototype`) и валидировать объект schema-based guard-ом. | Node.js/JavaScript | Prototype Pollution (Object Spread) | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
59
|
+
| NJS-035 | Sensitive data retained in long-lived heap strings | `let passwordPlain = req.body.password` (долгоживущая переменная) | Минимизировать lifetime чувствительных данных, избегать хранения plaintext в памяти и очищать буферы после использования. | Node.js/JavaScript | Sensitive Data Memory Hygiene | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
60
|
+
| FTS-001 | XSS Prevention: unsafe HTML rendering without sanitization | `dangerouslySetInnerHTML={{ __html: userHtml }}`<br>`<div v-html="content"></div>`<br>`el.innerHTML = payload` | Перед рендерингом HTML применять `DOMPurify.sanitize(...)`, включить строгий CSP, избегать прямого HTML-injection в UI. | Node.js/JavaScript | OWASP XSS Prevention Cheat Sheet | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
61
|
+
| FTS-004 | Insecure Communication: postMessage without origin validation | `window.addEventListener("message", (e) => handle(e.data))`<br>`target.postMessage(data, "*")` | Проверять `event.origin` через allowlist, использовать явный target origin вместо `"*"`, валидировать schema входящих сообщений. | Node.js/JavaScript | OWASP HTML5 Security Cheat Sheet | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
62
|
+
| FTS-006 | Missing CSP Hardening for script execution | `<meta http-equiv="Content-Security-Policy" content="">`<br>`script-src 'unsafe-inline' 'unsafe-eval'` | Включить строгий CSP (`default-src 'self'`, nonce/hash для скриптов), запретить `unsafe-inline`/`unsafe-eval` в production. | Node.js/JavaScript | CSP Level 3 guidance | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
63
|
+
| FTS-007 | Clickjacking Protection Missing | `# no frame-ancestors / X-Frame-Options policy` | Запретить embedding через `frame-ancestors 'none'` (или trusted list), добавить `X-Frame-Options: DENY/SAMEORIGIN`. | Node.js/JavaScript | OWASP Clickjacking Defense | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
64
|
+
| FTS-010 | Service Worker Cache Poisoning Risk | `self.addEventListener("fetch", (event) => event.respondWith(caches.match(req)))`<br>`# no cache key validation / stale cache fallback` | Ограничить кэш только trusted-origin ресурсами, валидировать cache keys/versioning и отключать кэш для чувствительных ответов. | Node.js/JavaScript | PWA security guidance | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
65
|
+
| FTS-011 | Unsafe Execution: dynamic code execution from strings | `eval(userInput)`<br>`new Function(code)`<br>`setTimeout("run()", 100)`<br>`setInterval("tick()", 1000)` | Исключить string-based execution, использовать безопасные функции/колбэки и явные allowlist-парсеры вместо eval-подобных конструкций. | Node.js/JavaScript | OWASP JavaScript Security Guidelines | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
66
|
+
| FTS-012 | Prototype Pollution: unsafe deep merge without key guards | `deepMerge(target, payload)`<br>`obj[key] = value` (без фильтра `__proto__/constructor/prototype`) | Блокировать служебные ключи (`__proto__`, `constructor`, `prototype`), использовать безопасный merge и schema validation входа. | Node.js/JavaScript | Prototype Pollution Prevention | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
67
|
+
| FTS-013 | Global Namespace Pollution and native prototype extension | `leakedVar = 1`<br>`Array.prototype.custom = fn` | Всегда использовать `const/let`, запретить расширение нативных прототипов и ограничить область видимости модулем/closure. | Node.js/JavaScript | JavaScript Secure Coding | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
68
|
+
| FTS-015 | RegExp DoS / ReDoS with catastrophic backtracking | `const re = /(a+)+$/`<br>`re.test(input)` | Избегать уязвимых regex-конструкций, ограничивать длину входа и использовать безопасные/проверенные шаблоны. | Node.js/JavaScript | OWASP ReDoS | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
69
|
+
| FTS-016 | Sequential Await DoS in loops for external calls | `for (const id of ids) { await fetchUser(id) }`<br>`items.map(async (i) => await apiCall(i))` | Параллелизовать независимые запросы через `Promise.all()`/`Promise.allSettled()`, ограничивать concurrency и таймауты. | Node.js/JavaScript | JS Async Performance/Safety | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
70
|
+
| CWE-78-PY | CWE-78 OS Command Injection (Python dangerous process APIs) | `os.system(user_cmd)`<br>`os.popen(user_cmd)`<br>`subprocess.Popen(user_cmd, shell=True)`<br>`subprocess.run(user_cmd, shell=True)` | Не использовать shell-интерпретацию для пользовательского ввода: применять `subprocess.run(["cmd", arg], shell=False)` и строгий allowlist аргументов. | Python | CWE-78 | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
71
|
+
| CWE-89-PY | CWE-89 SQL Injection (Python raw execute string formatting) | `cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")`<br>`cursor.execute("... %s" % user_input)` | Использовать параметризованные запросы (`cursor.execute("... WHERE id=%s", (user_id,))`) для psycopg2/sqlite3/mysql-connector. | Python | CWE-89 | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
72
|
+
| CWE-94-PY | CWE-94 Code Injection (Python dynamic execution) | `eval(user_code)`<br>`exec(user_code)`<br>`compile(user_code, "<x>", "exec")` | Полностью исключить dynamic code execution для внешних данных; вместо этого использовать безопасный DSL/парсеры с allowlist команд. | Python | CWE-94 | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
73
|
+
| CWE-78-JS | CWE-78 OS Command Injection (Node.js command execution) | `child_process.exec(userInput)`<br>`child_process.spawn(cmd, args, { shell: true })` | Использовать `spawn/execFile` без shell и передавать аргументы массивом после валидации/allowlist. | Node.js/JavaScript | CWE-78 | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
74
|
+
| CWE-79-JS | CWE-79 XSS (unsafe HTML rendering in React/Vue) | `dangerouslySetInnerHTML={{ __html: userHtml }}`<br>`<div v-html="userHtml"></div>` | Не рендерить недоверенный HTML напрямую; применять санитизацию (`DOMPurify`) и серверную валидацию контента. | Node.js/JavaScript | CWE-79 | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
75
|
+
| CWE-94-JS | CWE-94 Code Injection (JavaScript dynamic execution) | `new Function(userCode)`<br>`eval(userCode)`<br>`setTimeout(userCode, 1000)` | Исключить строковое исполнение кода; использовать безопасные callback-функции и предопределенные операции по allowlist. | Node.js/JavaScript | CWE-94 | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
76
|
+
| CWE-22-PY | Path Traversal in Python file path join | `full_path = os.path.join(base_dir, user_path)` | После `join` выполнять `abspath/realpath` и проверять `full_path.startswith(base_dir_real)` перед доступом к файлу. | Python | CWE Compliance | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
77
|
+
| CWE-434-PY | Unsafe File Upload with original filename | `name = request.FILES["file"].name`<br>`save("/uploads/" + name)` | Генерировать безопасное имя (`uuid4`) и жестко валидировать/allowlist расширений перед сохранением. | Python | CWE Compliance | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
78
|
+
| CWE-22-JS | Path Traversal in Node IPC file operations | `const p = path.join(baseDir, ipcPayload.userPath)`<br>`fs.readFileSync(p)` | Нормализовать путь (`path.resolve`) и проверять принадлежность разрешенной директории до операций чтения/записи. | Node.js/JavaScript | CWE Compliance | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
79
|
+
| CWE-614-JS | Insecure Cookie flags in web builds | `res.cookie("sid", sid, { secure: false })`<br>`document.cookie = "sid="+sid` | Для сессионных cookie включать `secure: true`, `httpOnly: true`, `sameSite`, и исключать установку чувствительных cookie на клиенте. | Node.js/JavaScript | CWE Compliance | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
80
|
+
| CWE-611-PY | XXE in XML parsing (Python lxml) | `lxml.etree.parse(xml_path)` | Для XML-парсинга отключать entity resolution (`resolve_entities=False`) и использовать безопасные парсеры/ограничения внешних сущностей. | Python | CWE Compliance | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
81
|
+
| CWE-502-PY | Insecure deserialization in Python | `pickle.loads(payload)`<br>`marshal.loads(payload)`<br>`yaml.load(data, Loader=yaml.Loader)` | Не десериализовать недоверенные данные через `pickle/marshal`; использовать безопасные форматы и `yaml.safe_load`/`SafeLoader`. | Python | CWE Compliance | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
82
|
+
| CWE-1321-JS | Prototype Pollution via unsafe object merge | `Object.assign(target, userObj)`<br>`merge(target, userObj)`<br>`extend({}, userObj)` | Перед merge блокировать ключи `__proto__`, `constructor`, `prototype`; использовать safe-merge со schema validation. | Node.js/JavaScript | CWE Compliance | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
83
|
+
| CWE-502-JS | Insecure deserialization in Node.js libs | `serialize.unserialize(input)`<br>`serializeJavascript(input)` на недоверенных данных | Исключить `node-serialize`/небезопасные serialize libs для внешних данных; использовать `JSON.parse` + strict schema validation. | Node.js/JavaScript | CWE Compliance | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
84
|
+
| CWE-918-PY | SSRF in Python HTTP client calls with untrusted URL | `requests.get(user_url)`<br>`requests.post(target_url, json=data)` | Проверять URL по allowlist доменов/схем, блокировать private/link-local адреса и использовать egress policy. | Python | CWE Compliance Final | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
85
|
+
| CWE-918-JS | SSRF in JS/Node HTTP calls with untrusted URL | `axios.get(userUrl)`<br>`fetch(targetUrl)` | Разрешать только allowlist хостов, валидировать протокол/порт и блокировать internal metadata/private networks. | Node.js/JavaScript | CWE Compliance Final | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
86
|
+
| CWE-1333-JS | ReDoS via dynamic RegExp from user input | `const re = new RegExp(userInput)` | Не строить regex из недоверенного ввода без sandbox/ограничений; применять allowlist шаблонов и лимиты длины. | Node.js/JavaScript | CWE Compliance Final | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
87
|
+
| CWE-601-PY | Open Redirect in Python without allowlist validation | `HttpResponseRedirect(request.GET.get("next"))` | Валидировать redirect target через allowlist доменов/схем и fallback на безопасный внутренний URL. | Python | CWE Compliance - Logic/Resources | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
88
|
+
| CWE-601-JS | Open Redirect in Express/Fastify without host/protocol checks | `res.redirect(req.query.url)` | Разрешать redirect только на относительные пути или allowlist домены с проверкой протокола/хоста. | Node.js/JavaScript | CWE Compliance - Logic/Resources | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
89
|
+
| CWE-91-PY | XML Injection via unsanitized user fragments in XML templates | `xml = "<root>" + user_input + "</root>"` | Экранировать XML-спецсимволы, валидировать input и использовать безопасные XML builder API вместо string concatenation. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
90
|
+
| CWE-918-PY-PROTO | SSRF with missing protocol allowlist in Python | `requests.get(url)` где `url` может быть `file://`, `gopher://`, `ftp://` | Разрешать только `https/http` по строгому allowlist, отклонять нестандартные схемы и internal CIDR. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
91
|
+
| CWE-918-JS-PROTO | SSRF with missing protocol validation in JS/Node | `fetch(userUrl)`/`axios.get(userUrl)` без проверки `new URL(userUrl).protocol` | Валидировать `protocol` (`https:`/`http:`) и host allowlist перед сетевыми вызовами, блокировать `file:`, `gopher:`, `ftp:`. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
92
|
+
| CWE-91-PY-IDENTITY | Incorrect identity comparison (`is`) for strings/numbers in Python validation/auth logic | `if token is expected_token:`<br>`if status is 200:` | Для сравнения значений использовать `==`/`!=`; оператор `is` оставлять только для `None` и identity-проверок объектов. | Python | CWE Compliance Final | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
93
|
+
| CWE-1025-JS | Loose equality (`==`) in token/authorization checks | `if (req.headers["x-token"] == expected)`<br>`if (role == "admin")` | Использовать строгое сравнение `===`/`!==`, нормализовать типы входа и валидировать auth-контекст до проверок доступа. | Node.js/JavaScript | CWE Compliance Final | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
94
|
+
| CWE-89-PY-DJA-RAW | Django SQL Injection via `.extra(where=...)` / `.raw()` with string concatenation | `User.objects.extra(where=["email='" + email + "'"])`<br>`User.objects.raw("SELECT * FROM users WHERE id=" + user_id)` | Отказаться от строковой конкатенации в SQL, использовать ORM фильтры или параметризованные запросы (`raw(sql, [params])`). | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
95
|
+
| CWE-89-JS-ORM-RAW | SQL Injection in Sequelize/Knex raw query APIs with interpolation | `sequelize.literal("id = " + userId)`<br>`knex.raw("SELECT * FROM users WHERE id = " + req.query.id)` | Использовать bind/replacements/parameterized queries и строгую валидацию типов входных данных до построения запроса. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
96
|
+
| CWE-20-UNIVERSAL-NULLBYTE | Missing null-byte/control-char sanitization in inputs sent to system calls | `subprocess.run(["cat", user_path])` где `user_path` может содержать `%00`/`\\x00`<br>`execFile("ls", [userArg])` без фильтра control chars | Перед системными вызовами удалять/блокировать `\\x00` и управляющие символы, нормализовать input и применять allowlist форматов аргументов. | Universal | CWE Final Certification | Перед системными вызовами удалять/блокировать `\\x00` и управляющие символы, нормализовать input и применять allowlist форматов аргументов. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
97
|
+
| CWE-20-HPP | HTTP Parameter Pollution in security-critical parameter parsing | `role = req.query.role` (ожидается строка, приходит массив `role=user&role=admin`) | Нормализовать/валидировать тип параметров (single-value), отклонять массивы/дубликаты в критичных auth/ACL полях. | Universal | CWE Final Certification | Нормализовать/валидировать тип параметров (single-value), отклонять массивы/дубликаты в критичных auth/ACL полях. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
98
|
+
| CWE-611-PY-MINIDOM | XML parser DoS risk with `xml.dom.minidom.parse()` on untrusted XML | `xml.dom.minidom.parse(xml_file)` | Для недоверенного XML использовать защищенные парсеры (`defusedxml`), лимитировать размер/глубину документа и отключать обработку опасных сущностей. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
99
|
+
| CWE-611-PY-ELEMENTTREE | XML parser DoS risk with `xml.etree.ElementTree.parse()` (billion laughs) | `xml.etree.ElementTree.parse(path)` | Для внешнего XML применять `defusedxml.ElementTree`, вводить лимиты размера/сложности и reject oversized payloads. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
100
|
+
| CWE-611-JS-LIBXMLJS-NOENT | XXE/entity expansion risk in `libxmljs.parseXml(..., { noent: true })` | `libxmljs.parseXml(data, { noent: true })` | Не использовать `noent: true` для недоверенного XML, отключать substitution entities и валидировать входной XML до парсинга. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
101
|
+
| CWE-91-UNIVERSAL-XML-CONCAT | XML Injection via string concatenation with user-controlled fragments | `xml = "<root>" + user_input + "</root>"`<br>`const x = "<tag>" + input + "</tag>"` | Строить XML через безопасные builder API и обязательно экранировать спецсимволы (`<`, `>`, `&`, `'`, `"`). | Universal | CWE Final Certification | Строить XML через безопасные builder API и обязательно экранировать спецсимволы (`<`, `>`, `&`, `'`, `"`). | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
102
|
+
| CWE-85-174-UNIVERSAL-ONCE | Single-pass normalization bypass via one-time `replace()` / `re.sub()` filtering | `path = path.replace("../", "")`<br>`clean = re.sub(r"<script>", "", payload)` | Выполнять нормализацию до фиксированной точки (loop until stable), затем строгую canonicalization-проверку и allowlist-валидацию итогового значения. | Universal | CWE Final Certification | Выполнять нормализацию до фиксированной точки (loop until stable), затем строгую canonicalization-проверку и allowlist-валидацию итогового значения. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
103
|
+
| CWE-85-JS-SLASH-FILTER | Incomplete slash filtering in Node.js checks (`/` only, ignores `//`) | `if (url.includes("/")) reject()`<br>`safe = input.replace("/", "")` | Нормализовать повторяющиеся разделители (`//`), валидировать protocol/path parser-ом и проверять итоговый canonical path/URL against allowlist. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
104
|
+
| CWE-79-PY-DJANGO-SAFE | XSS via Django `|safe` filter with request-controlled variables | `{{ request.GET.q|safe }}` | Не применять `|safe` к данным пользователя; использовать autoescaping по умолчанию и серверную санитизацию trusted-allowlist подходом. | Python | CWE Final Certification | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
105
|
+
| CWE-79-PY-DJANGO-AUTOESCAPE-OFF | XSS via `{% autoescape off %}` around untrusted variables | `{% autoescape off %}{{ request.GET.msg }}{% endautoescape %}` | Не отключать autoescape для недоверенного контента; при необходимости явно экранировать/санитизировать данные до шаблона. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
106
|
+
| CWE-79-PY-HTMLRESPONSE | XSS in FastAPI/Flask HTML responses built via f-strings/concatenation | `return HTMLResponse(f"<div>{user_input}</div>")`<br>`return render_template_string("<p>"+name+"</p>")` | Использовать шаблонизаторы с безопасным escaping и передавать данные через контекст, не собирать HTML из пользовательских строк. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
107
|
+
| CWE-79-JS-SSR-RAW | Unescaped SSR template output (`<%-` in EJS / `{{{` in Handlebars) | `<%- userContent %>`<br>`{{{comment}}}` | Использовать экранированный вывод (`<%=`, `{{...}}`) и санитизацию HTML только для строго trusted-контента. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
108
|
+
| CWE-80-UNIVERSAL-NOSNIFF | Missing `X-Content-Type-Options: nosniff` with dynamic content responses | `res.send(dynamicContent)` без `X-Content-Type-Options` | Для динамических ответов всегда добавлять `X-Content-Type-Options: nosniff` и корректный `Content-Type`, исключая MIME sniffing. | Universal | CWE Final Certification | Для динамических ответов всегда добавлять `X-Content-Type-Options: nosniff` и корректный `Content-Type`, исключая MIME sniffing. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
109
|
+
| CWE-1336-PY-JINJA2-RTS | SSTI risk: Jinja2 template created directly from user input | `render_template_string(user_input)`<br>`jinja2.Template(user_input)` | Использовать только статические template-файлы, передавать данные через контекст и исключить компиляцию шаблонов из недоверенного ввода. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
110
|
+
| CWE-1336-PY-MAKO-RTS | SSTI risk: Mako Template from user-controlled source | `mako.template.Template(user_input)` | Не создавать Mako шаблоны из пользовательских строк; использовать pre-reviewed шаблоны и контекстные переменные. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
111
|
+
| CWE-1336-JS-PUG-EJS-RTS | SSTI risk in Node.js when compiling/rendering user template source | `pug.compile(userInput)`<br>`ejs.render(userInput)` | Запретить компиляцию/рендер шаблонов из недоверенного ввода; использовать статические template-файлы и безопасную передачу данных в context locals. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
112
|
+
| CWE-1336-JS-LODASH-TEMPLATE | Code/template injection via `_.template(userInput)` | `_.template(userInput)` | Не использовать `_.template`/`underscore.template` для пользовательских строк; применять фиксированные шаблоны и allowlist placeholders. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
113
|
+
| CWE-943-PY-MONGO-DICT | NoSQL Injection: passing raw `request.json` dict into PyMongo/MongoEngine queries | `db.users.find(request.json)`<br>`Model.objects(__raw__=request.json).update(**request.json)` | Не передавать клиентский dict напрямую в фильтры; валидировать схему, приводить типы и строить query только из allowlist полей/операторов. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
114
|
+
| CWE-943-PY-DJANGO-KWARGS | Unsafe `**kwargs` unpacking from user input in Django ORM filters | `User.objects.filter(**request.GET.dict())`<br>`User.objects.get(**payload)` | Формировать kwargs только из разрешенных ключей и типобезопасных значений, исключая прямую распаковку внешнего словаря. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
115
|
+
| CWE-943-JS-MONGO-FILTER | NoSQL Injection in Node.js by using `req.body/req.query` as Mongo filter | `User.find(req.body)`<br>`collection.find(req.query)` | Перед query санитизировать payload (`mongo-sanitize`), приводить значения к ожидаемым примитивам и строить фильтр по allowlist. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
116
|
+
| CWE-943-JS-SEQUELIZE-WHERE | Unsafe Sequelize `where` from full `req.query` object | `User.findAll({ where: req.query })` | Не передавать `req.query` целиком; делать explicit mapping полей и принудительное приведение типов перед `where`. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
117
|
+
| CWE-23-PY-TEMPLATE-FILE | Path Traversal via user-controlled template/file path in Django/Flask | `render(request, request.GET["tpl"])`<br>`send_file(request.args.get("path"))` | Не использовать путь из запроса напрямую; валидировать имя через allowlist/маппинг, проверять `realpath` и ограничивать разрешенным каталогом. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
118
|
+
| CWE-23-JS-EXPRESS-SENDFILE | Path Traversal in Express `res.sendFile`/`res.render` with `req.params/query` | `res.sendFile(req.query.path)`<br>`res.render(req.params.view)` | Перед использованием выполнять нормализацию (`path.resolve`) и проверку принадлежности разрешенной директории, либо использовать ID->filename mapping. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
119
|
+
| CWE-23-JS-DYNAMIC-REQUIRE | Dynamic `require()`/`import()` path from request data | `require(req.query.module)`<br>`await import(req.body.path)` | Запретить динамический импорт из внешнего ввода; использовать фиксированный allowlist модулей и статические импорты. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
120
|
+
| CWE-89-PY-SQLALCHEMY-TEXT | SQL Injection in SQLAlchemy `text()` with user concatenation | `session.execute(text("SELECT ... " + user_input))`<br>`.filter(text("id=" + user_input))` | Для SQLAlchemy использовать bind parameters/ORM expressions; исключить string concatenation внутри `text(...)`. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
121
|
+
| CWE-89-PY-SQLALCHEMY-ORDERBY | Unsafe dynamic `order_by(user_input)` without allowlist mapping | `query.order_by(user_input)` | Использовать whitelist map (`{"name": Model.name, ...}`) и подставлять только разрешенные колонки/направления сортировки. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
122
|
+
| CWE-89-JS-ORM-QUERYRAW | SQL Injection via TypeORM/Sequelize raw query builders with concatenation | `queryRaw("SELECT ... " + input)`<br>`sequelize.literal("id=" + req.query.id)` | Использовать параметризованные запросы/замены (`replacements`, bind params) и строгий allowlist для динамических SQL-фрагментов. | Node.js/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
123
|
+
| CWE-89-PG-COPY-PROGRAM | PostgreSQL command/file injection via `COPY ... FROM PROGRAM` or `lo_import()` with user input | `COPY t FROM PROGRAM 'cat ' || user_cmd`<br>`SELECT lo_import(user_path)` | Запретить динамические PROGRAM/file path из внешнего ввода, использовать fixed allowlist операций и параметризованные запросы без конкатенации. | Python/Node.js/PostgreSQL | CWE Final Certification | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
124
|
+
| CWE-89-PLPGSQL-EXECUTE | SQL Injection in PL/pgSQL dynamic `EXECUTE` without proper quoting | `EXECUTE 'SELECT ... ' || user_value` | В PL/pgSQL использовать `quote_ident()`/`quote_literal()` или `format('%I/%L', ...)`, исключать прямую конкатенацию в dynamic SQL. | PostgreSQL/PLpgSQL | CWE Final Certification | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
125
|
+
| CWE-943-REDIS-CMD | Redis command injection via dynamic `execute_command` / `send_command` arguments | `redis.execute_command(req.body.cmd, ...)`<br>`redis.send_command(req.query.cmd, ...)` | Не принимать имя Redis-команды/ключи из запроса напрямую; применять allowlist команд и явную валидацию/кастинг аргументов. | Python/Node.js/Redis | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
126
|
+
| CWE-943-REDIS-LUA-EVAL | Redis Lua injection via `eval()`/`evalsha()` script body concatenation | `redis.eval("return " + user_input, ...)` | Хранить статические Lua-скрипты (preloaded SHA), не конкатенировать пользовательские строки в script body, передавать данные только через argv. | Python/Node.js/Redis | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
127
|
+
| CWE-89-PY-SQLALCHEMY-ASYNC-TEXT | SQL Injection in SQLAlchemy Async via `await session.execute(text(...))` concatenation | `await session.execute(text("SELECT ... " + user_input))` | В async SQLAlchemy использовать bind params/ORM выражения и исключить конкатенацию в `text(...)` для внешнего ввода. | Python/SQLAlchemy Async/PostgreSQL | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
128
|
+
| CWE-943-REDIS-RQ-IREDIS-CMD | Redis command injection in RQ/ioredis command APIs | `redis.execute_command(req.body.cmd, req.body.arg)`<br>`ioredis.send_command(req.query.cmd, [...])` | Для RQ/redis-py/ioredis применять allowlist команд, фиксированные key namespaces и типобезопасную валидацию аргументов до вызова Redis API. | Python/Redis RQ/Node.js ioredis | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
129
|
+
| CWE-943-REDIS-RQ-IREDIS-EVAL | Lua script injection in Redis `eval()` from user-concatenated script body | `redis.eval("return " + req.body.expr, 0)` | Использовать только предзагруженные статические Lua scripts (SHA allowlist), параметры передавать через ARGV/KEYS без string concatenation. | Python/Redis RQ/Node.js ioredis | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
130
|
+
| CWE-918-NEXTJS-AXIOS-SSRF | SSRF in Next.js (`getServerSideProps`/API routes) via `axios.get/post(userInput)` without host allowlist | `await axios.get(req.query.url)`<br>`await axios.post(userInput, data)` | Валидировать URL через strict host allowlist/protocol checks перед вызовом axios в server-side контексте Next.js. | Node.js/Next.js/Axios | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
131
|
+
| CWE-346-AXIOS-WITHCREDENTIALS | Insecure global `axios.defaults.withCredentials = true` without trusted `baseURL` restriction | `axios.defaults.withCredentials = true` | Разрешать `withCredentials` только для доверенного `baseURL`/origin allowlist, избегать глобальной активации без доменных ограничений. | Node.js/React/Axios | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
132
|
+
| CWE-79-REACT-DANGEROUSLYSETHTML | React XSS via `dangerouslySetInnerHTML` without `DOMPurify.sanitize()` wrapper | `<div dangerouslySetInnerHTML={{ __html: html }} />` | Перед рендерингом HTML обязательно применять `DOMPurify.sanitize(...)` или безопасный markdown/HTML renderer с allowlist. | Node.js/React | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
133
|
+
| CWE-1321-TS-DEEPMERGE | Prototype pollution risk in recursive deep merge without `__proto__/constructor` key guards | `deepMerge(target, source)` без проверки опасных ключей | В рекурсивном merge блокировать `__proto__`, `constructor`, `prototype`, использовать schema validation и safe-merge библиотеку/реализацию. | TypeScript/JavaScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
134
|
+
| CWE-94-OPENROUTER-PROMPT-CONCAT | Prompt injection risk: user input concatenated into OpenRouter/OpenAI `messages` without role-structured filtering | `messages=[{"role":"user","content":"..."+user_input}]`<br>`prompt = system + user_input` | Формировать запросы через явные роли `system/user`, применять фильтрацию/guardrails для jailbreak-фраз (e.g. `ignore previous instructions`) и policy checks перед отправкой. | Python/OpenRouter/OpenAI | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
135
|
+
| CWE-116-LLM-HTML-UNTRUSTED | Untrusted LLM output (GigaAM/OpenRouter) rendered as HTML without sanitization | `dangerouslySetInnerHTML={{__html: llmText}}` | Рассматривать LLM output как недоверенный ввод: рендерить как plain text или предварительно санитизировать (`DOMPurify.sanitize`) с allowlist. | Node.js/React/GigaAM/OpenRouter | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
136
|
+
| CWE-915-NODE-ASSIGN-MERGE | Prototype pollution via `Object.assign()` / `_.merge()` with untrusted `req.body` object | `Object.assign(target, req.body)`<br>`_.merge(config, req.body)` | Перед merge блокировать ключи `__proto__`, `constructor`, `prototype`, применять schema validation и safe merge policy для внешних объектов. | Node.js/TypeScript | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
137
|
+
| CWE-915-SQLMODEL-MASS-ASSIGN | SQLModel mass assignment via `model_validate()`/`from_orm()`/`**request.json` without `include/exclude` filtering | `User.model_validate(request.json())`<br>`User.from_orm(payload)`<br>`User(**request.json())` | Для SQLModel явно ограничивать поля (`include/exclude`), использовать DTO/schemas и denylist/allowlist для привилегированных атрибутов. | Python/SQLModel | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
138
|
+
| CWE-89-SQLMODEL-TEXT-FSTRING | SQL injection in SQLModel query with `select().where(text(f"...{var}"))` | `select(User).where(text(f"id = {user_id}"))` | Не использовать f-строки в `text(...)`; применять bind parameters и ORM-выражения SQLModel/SQLAlchemy. | Python/SQLModel | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
139
|
+
| CWE-601-CSH-PROCESS-START-URL | Open redirect / unsafe URL launch via `Process.Start(url)` from untrusted input | `Process.Start(userUrl)` | Перед запуском валидировать схему/домен по allowlist, блокировать внешние/неожиданные URI и использовать безопасный dispatcher. | C#/.NET Desktop | CWE Final Certification | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
140
|
+
| CWE-81-CSH-WEBBROWSER-XSS | XSS risk in desktop WebView/WebBrowser via unescaped `DocumentText` / `InvokeScript` input | `webBrowser.DocumentText = userHtml`<br>`webBrowser.Document.InvokeScript("render", new[]{userInput})` | Экранировать/санитизировать input, запрещать прямой HTML/script injection и применять safe rendering templates. | C#/.NET Desktop | CWE Final Certification | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
141
|
+
| CWE-1321-CSH-DYNAMIC-EXPANDO | Mapping JSON into `dynamic`/`ExpandoObject` without strict schema validation | `dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json)` | После десериализации применять строгую модель/схему (DTO) и reject неизвестные поля/вложенные структуры до бизнес-логики. | C#/.NET Desktop | CWE Final Certification | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
142
|
+
| CWE-749-CSH-COMVISIBLE-DANGEROUS | `[ComVisible(true)]` class exposes public methods executing sensitive operations (`File.Delete`, `Process.Start`, `Registry.SetValue`) | `[ComVisible(true)] public void Run(string x){ Process.Start(x); }` | Для COM-visible классов ограничивать публичный API, запрещать опасные операции без authz/validation и выносить privileged actions в trusted service layer. | C#/.NET Desktop | CWE Final Certification | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. |
|
|
143
|
+
| CWE-123-PY-TEMPFILE-TOCTOU | TOCTOU: проверка `os.path.exists` перед `open` без атомарного создания | `if os.path.exists(tmp):`<br>` os.remove(tmp)`<br>`open(tmp, "w").write(data)` | Использовать `tempfile.NamedTemporaryFile(delete=False)` + `os.replace`/`mkstemp`; избегать check-then-use на shared paths. | Python | `CWE-123` | Атомарные temp API; для concurrent writes — file locks; валидировать path после `mkstemp`. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-123-py-tempfile-toctou exists remove open write tempfile -->
|
|
144
|
+
| CWE-124-JS-ARRAYBUFFER-SLICE | Небезопасное копирование из `ArrayBuffer` без проверки границ среза | `new Uint8Array(buf).subarray(userStart, userEnd)` без clamp к `byteLength` | Clamp индексов к `[0, byteLength]`, использовать `DataView` с явными bounds checks. | Node.js/TypeScript | `CWE-124` | Проверять `start/end` против `buffer.byteLength`; отклонять отрицательные/NaN индексы; использовать typed array helpers с валидацией. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-124-js-arraybuffer-slice uint8array subarray userstart userend bytelength -->
|
|
145
|
+
| CWE-20-PY-VAL-EXTRA-01 | Невалидированный `float()` из query для критичного лимита | `limit = float(request.query_params["limit"])` без upper bound | `Field(ge=0, le=1000)` / `min(max(limit, 0), cap)` после parse. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-20-py-val-extra-01 float query params limit без upper -->
|
|
146
|
+
| CWE-20-PY-VAL-EXTRA-02 | Пустая строка как путь к файлу после `strip()` | `p = (body.get("path") or "").strip()` затем `open(p)` без deny empty | Отклонять `""`, проверять `isabs`/`resolve` и root allowlist. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-20-py-val-extra-02 path strip empty open body get -->
|
|
147
|
+
| CWE-20-JS-VAL-EXTRA-01 | `parseInt` без radix на пользовательском вводе | `const n = parseInt(req.query.depth)` | `parseInt(x, 10)` + `Number.isFinite` + bounds. | Node.js | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-20-js-val-extra-01 parseint req query depth без radix -->
|
|
148
|
+
| CWE-20-JS-VAL-EXTRA-02 | Доверие `JSON.parse` без try/catch на внешнем теле | `const cfg = JSON.parse(req.body)` без schema | `z.object({...}).parse(JSON.parse(...))` с ограничением глубины. | Node.js | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-20-js-val-extra-02 json parse req body без schema -->
|
|
149
|
+
| CWE-89-PY-VAL-EXTRA-01 | Конкатенация в `ORDER BY` с «белым списком» только в комментарии | `ORDER BY {user_col}` где `user_col` из query | Allowlist колонок в коде (`if col not in ALLOWED: raise`), не доверять строке. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-89-py-val-extra-01 order by user_col query allowlist -->
|
|
150
|
+
| CWE-79-JS-VAL-EXTRA-01 | `href` из API без протокольной проверки | `<a href={item.url}>` без `sanitizeUrl` | Allowlist `https:`/`mailto:`; блокировать `javascript:`/`data:`. | Node.js/React | CWE Final Certification | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-79-js-val-extra-01 href item url без sanitize -->
|
|
151
|
+
| CWE-918-PY-VAL-EXTRA-01 | `ipaddress.ip_address` на пользовательском хосте без blocklist | `ipaddress.ip_address(host)` затем `socket.connect` | Блокировать private/link-local/мetadata ranges после resolve. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-918-py-val-extra-01 ipaddress ip_address host socket connect -->
|
|
152
|
+
| CWE-502-PY-VAL-EXTRA-01 | `yaml.load` на конфиге из upload | `yaml.load(uploaded_text)` | `yaml.safe_load` + schema validation. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-502-py-val-extra-01 yaml load uploaded text -->
|
|
153
|
+
| CWE-611-PY-VAL-EXTRA-01 | `lxml.etree.fromstring` с `resolve_entities` по умолчанию на внешнем XML | `lxml.etree.fromstring(ext_xml)` без `resolve_entities=False` | `etree.XMLParser(resolve_entities=False, no_network=True)`. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-611-py-val-extra-01 lxml etree fromstring ext xml resolve_entities -->
|
|
154
|
+
| CWE-20-PY-VAL-EXTRA-03 | Непроверенный `int()` из multipart filename | `int(request.form["chunk_index"])` без range check | `Field(ge=0, le=10_000)` или `try/except ValueError` + cap. | Python | CWE Final Certification | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-20-py-val-extra-03 int request form chunk_index без range -->
|
|
155
|
+
| CWE-1268-PY-IPC-CHANNEL | Подмена IPC/сокетного канала без проверки peer identity | `sock.connect((host, port))` где `host` из конфига без pinning | Проверять TLS/mTLS или peer identity для IPC; не доверять только hostname. | Python | `CWE-1268` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-1268-py-ipc-channel sock connect host port конфига без pinning -->
|
|
156
|
+
| CWE-1271-PY-SIGNED-ERR | Игнорирование ошибки проверки подписи в цепочке обновлений | `verify_sig(blob) or True` | Fail-closed при невалидной подписи; не продолжать установку. | Python | `CWE-1271` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-1271-py-signed-err verify sig blob or true fail closed -->
|
|
157
|
+
| CWE-1280-PY-MARK-CRITICAL | Критичный код помечен как «optional» в политике | `if optional: skip_tls_check()` | Разделить optional UX и security-critical пути; TLS не optional. | Python | `CWE-1280` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-1280-py-mark-critical optional skip tls check -->
|
|
158
|
+
| CWE-1285-PY-NEGOTIATION | Небезопасный downgrade при согласовании протокола | `if not tls: use_http()` | Запретить downgrade; только HTTPS для чувствительных API. | Python | `CWE-1285` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. | Атакующий доставляет входные данные, соответствующие anti-pattern; реальный ущерб зависит от приёмника (sink), конфигурации и границ доверия. | <!-- semantic_anchor: cwe-1285-py-negotiation if not tls use http downgrade -->
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_id": "domain-input-validation",
|
|
3
|
+
"name": "Domain Input Validation",
|
|
4
|
+
"activation_triggers": [
|
|
5
|
+
"path-traversal-guard",
|
|
6
|
+
"ssrf-host-allowlist",
|
|
7
|
+
"command-injection-node",
|
|
8
|
+
"sql-param-binding"
|
|
9
|
+
],
|
|
10
|
+
"relevant_extensions": [
|
|
11
|
+
".py",
|
|
12
|
+
".js",
|
|
13
|
+
".ts",
|
|
14
|
+
".json"
|
|
15
|
+
],
|
|
16
|
+
"tools": [
|
|
17
|
+
"semgrep",
|
|
18
|
+
"syft",
|
|
19
|
+
"trufflehog"
|
|
20
|
+
],
|
|
21
|
+
"rules_path": "core/skills/domain-input-validation/patterns.md",
|
|
22
|
+
"few_shot_examples": "core/gold-standard-testbed/gap_fill_vulnerable.py",
|
|
23
|
+
"security_priority": 8
|
|
24
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Domain Platform Hardening
|
|
2
|
+
|
|
3
|
+
## Stack overview
|
|
4
|
+
|
|
5
|
+
Hardening for mobile/desktop/runtime/infrastructure platform controls and operational guardrails.
|
|
6
|
+
|
|
7
|
+
## Top threats
|
|
8
|
+
|
|
9
|
+
- **Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists.**: 36 metrics (`PY-024`, `PY-027`, `CWE-400-PY`, `CWE-670-PY`)
|
|
10
|
+
- **Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering.**: 20 metrics (`NJS-017`, `NJS-018`, `NJS-033`, `NJS-021`)
|
|
11
|
+
- **Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input.**: 8 metrics (`CWE-114-CSH-PROCESS-START-RELATIVE`, `CWE-497-CSH-SENSITIVE-LOG`, `CWE-606-CSH-UNTRUSTED-LOOP-BOUND`, `CWE-114-CSH-DLL-SEARCH-ORDER`)
|
|
12
|
+
- **Canary + auto rollback on SLO breach.**: 1 metrics (`INF-216`)
|
|
13
|
+
- **Egress allowlist через NetworkPolicy/egress proxy.**: 1 metrics (`INF-207`)
|
|
14
|
+
- **Immutable config + signed deployment pipeline.**: 1 metrics (`INF-213`)
|
|
15
|
+
- **mTLS + authn/authz даже во внутреннем контуре.**: 1 metrics (`INF-217`)
|
|
16
|
+
- **Ввести dedup/throttle и escalation policy.**: 1 metrics (`INF-220`)
|
|
17
|
+
- **Ввести ResourceQuota и LimitRange.**: 1 metrics (`INF-214`)
|
|
18
|
+
- **Вводить maxReplicas + circuit breaker на upstream.**: 1 metrics (`INF-203`)
|
|
19
|
+
- **Включить `FLAG_SECURE` на чувствительных экранах.**: 1 metrics (`MOB-021`)
|
|
20
|
+
- **Включить service mesh mTLS/PKI policy.**: 1 metrics (`INF-210`)
|
|
21
|
+
- **Вынести персоналии в защищенный справочник и role mapping.**: 1 metrics (`INF-200`)
|
|
22
|
+
- **Генерировать и хранить SBOM + provenance attestation.**: 1 metrics (`INF-209`)
|
|
23
|
+
- **Для query-параметров всегда выполнять явное приведение к ожидаемому примитиву (`string/number/boolean`) и отклонять объекты/операторы.**: 1 metrics (`CWE-20-UNIVERSAL-TYPE-CONFUSION`)
|
|
24
|
+
- **Для динамического рендеринга избегать исполнения шаблонного кода: использовать статические шаблоны из доверенного каталога и передавать только данные через контекст.**: 1 metrics (`CWE-94-UNIVERSAL-NO-SANDBOX-TEMPLATE`)
|
|
25
|
+
- **Добавить PDB для сохранения SLO при обновлениях/сбоях.**: 1 metrics (`INF-204`)
|
|
26
|
+
- **Добавить startup probe с корректным timeout window.**: 1 metrics (`INF-206`)
|
|
27
|
+
- **Запрет privileged debug в prod namespace.**: 1 metrics (`INF-212`)
|
|
28
|
+
- **Запрет string-exec, передача данных через безопасный IPC.**: 1 metrics (`DSK-100`)
|
|
29
|
+
- **Изоляция узлов через taints/tolerations/nodeSelector.**: 1 metrics (`INF-219`)
|
|
30
|
+
- **Использовать `ipcMain.handle` + schema validation + authz.**: 1 metrics (`DSK-105`)
|
|
31
|
+
- **Использовать digest pinning + controlled updates.**: 1 metrics (`INF-208`)
|
|
32
|
+
- **Настроить readiness/liveness/startup probes.**: 1 metrics (`INF-205`)
|
|
33
|
+
- **Не давать внешнему параметру напрямую выбирать файл/модуль; применять фиксированный маппинг `ID -> Filename` и deny-by-default для неизвестных значений.**: 1 metrics (`CWE-98-UNIVERSAL-FILE-INFRA-CONTROL`)
|
|
34
|
+
- **Никогда не печатать токены, даже в debug.**: 1 metrics (`MOB-010`)
|
|
35
|
+
- **Обновление зависимости + hardening bootstrap.**: 1 metrics (`DSK-110`)
|
|
36
|
+
- **Обязательные CPU requests/limits по профилю сервиса.**: 1 metrics (`INF-201`)
|
|
37
|
+
- **Обязательные memory requests/limits и OOM policy.**: 1 metrics (`INF-202`)
|
|
38
|
+
- **Политика ротации и автоматический rollover.**: 1 metrics (`INF-211`)
|
|
39
|
+
- **Политика хранения/архивации security logs.**: 1 metrics (`INF-215`)
|
|
40
|
+
- **Применить baseline профили на namespace/service.**: 1 metrics (`INF-218`)
|
|
41
|
+
- **Удалить bypass, включить pinning/strict TLS validation.**: 1 metrics (`MOB-001`)
|
|
42
|
+
|
|
43
|
+
## Pattern catalog
|
|
44
|
+
|
|
45
|
+
Complete Anti-Pattern / Safe-Pattern definitions live in [`patterns.md`](patterns.md). The table below is a **table of contents** by metric ID.
|
|
46
|
+
|
|
47
|
+
| ID | Metric | Stack |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `MOB-001` | Flutter TLS bypass | Удалить bypass, включить pinning/strict TLS validation. |
|
|
50
|
+
| `MOB-010` | Token leakage in debug mode | Никогда не печатать токены, даже в debug. |
|
|
51
|
+
| `MOB-021` | Missing UI privacy protection | Включить `FLAG_SECURE` на чувствительных экранах. |
|
|
52
|
+
| `DSK-100` | Electron remote code injection path | Запрет string-exec, передача данных через безопасный IPC. |
|
|
53
|
+
| `DSK-105` | Insecure IPC for sensitive actions | Использовать `ipcMain.handle` + schema validation + authz. |
|
|
54
|
+
| `DSK-110` | Old xlsx prototype pollution risk | Обновление зависимости + hardening bootstrap. |
|
|
55
|
+
| `NJS-017` | Dependency integrity gaps | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
56
|
+
| `NJS-018` | Header fingerprint leakage | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
57
|
+
| `NJS-033` | Weak TLS config | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
58
|
+
| `INF-200` | Hardcoded employee identities in notification routes | Вынести персоналии в защищенный справочник и role mapping. |
|
|
59
|
+
| `INF-201` | Missing CPU limits in workloads | Обязательные CPU requests/limits по профилю сервиса. |
|
|
60
|
+
| `INF-202` | Missing memory limits in workloads | Обязательные memory requests/limits и OOM policy. |
|
|
61
|
+
| `INF-203` | Unbounded worker autoscaling | Вводить maxReplicas + circuit breaker на upstream. |
|
|
62
|
+
| `INF-204` | No pod disruption budget | Добавить PDB для сохранения SLO при обновлениях/сбоях. |
|
|
63
|
+
| `INF-205` | Missing readiness probe | Настроить readiness/liveness/startup probes. |
|
|
64
|
+
| `INF-206` | Missing startup probe for heavy services | Добавить startup probe с корректным timeout window. |
|
|
65
|
+
| `INF-207` | No network egress policy | Egress allowlist через NetworkPolicy/egress proxy. |
|
|
66
|
+
| `INF-208` | Unpinned base image digest | Использовать digest pinning + controlled updates. |
|
|
67
|
+
| `INF-209` | Missing SBOM attestation in release flow | Генерировать и хранить SBOM + provenance attestation. |
|
|
68
|
+
| `INF-210` | Unencrypted internal traffic | Включить service mesh mTLS/PKI policy. |
|
|
69
|
+
| `INF-211` | No centralized secret rotation | Политика ротации и автоматический rollover. |
|
|
70
|
+
| `INF-212` | Privileged debug containers in production | Запрет privileged debug в prod namespace. |
|
|
71
|
+
| `INF-213` | Missing immutable config boundary | Immutable config + signed deployment pipeline. |
|
|
72
|
+
| `INF-214` | No resource quota per namespace | Ввести ResourceQuota и LimitRange. |
|
|
73
|
+
| `INF-215` | Missing audit retention policy | Политика хранения/архивации security logs. |
|
|
74
|
+
| `INF-216` | No rollback safety gate | Canary + auto rollback on SLO breach. |
|
|
75
|
+
| `INF-217` | Exposed admin endpoints internally without auth | mTLS + authn/authz даже во внутреннем контуре. |
|
|
76
|
+
| `INF-218` | Missing runtime seccomp/apparmor baseline | Применить baseline профили на namespace/service. |
|
|
77
|
+
| `INF-219` | No node taint/toleration isolation | Изоляция узлов через taints/tolerations/nodeSelector. |
|
|
78
|
+
| `INF-220` | Incident notification without rate control | Ввести dedup/throttle и escalation policy. |
|
|
79
|
+
| `PY-024` | Insecure httpx TLS config | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
80
|
+
| `PY-027` | Unbounded pagination/query limits | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
81
|
+
| `NJS-021` | Missing request payload size limits (DoS risk) | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
82
|
+
| `NJS-030` | JSON Depth/Size Limits missing in body parsing | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
83
|
+
| `FTS-009` | Dependency Integrity Missing for third-party scripts | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
84
|
+
| `CWE-400-PY` | ReDoS in Python regex on unbounded user input | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
85
|
+
| `CWE-670-PY` | Race Condition in temporary file creation (predictable path) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
86
|
+
| `CWE-400-JS` | ReDoS in JavaScript regex against user input | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
87
|
+
| `CWE-670-JS` | Race Condition in file writes with predictable names | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
88
|
+
| `CWE-755-JS` | Unhandled rejection / await without try-catch in IPC handlers | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
89
|
+
| `CWE-295-PY` | TLS certificate validation disabled in Python SSLContext | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
90
|
+
| `CWE-297-PY` | Deprecated/weak TLS protocol versions in Python | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
91
|
+
| `CWE-295-JS-ENV` | Global TLS verification bypass via environment in Node.js | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
92
|
+
| `CWE-295-JS-REQ` | TLS validation disabled in https.request options | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
93
|
+
| `CWE-451-PY` | Clickjacking protection middleware missing in Django | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
94
|
+
| `CWE-1321-JS-JSON` | Prototype pollution risk after JSON.parse(untrusted) | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
95
|
+
| `CWE-362-PY` | Race Condition in async Python state updates | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
96
|
+
| `CWE-362-JS` | Race Condition in async Node.js critical sections | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
97
|
+
| `CWE-451-JS` | Missing CSP/Clickjacking headers in JS web stack | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
98
|
+
| `CWE-400-PY-RESOURCE` | Unreleased file/socket handles in Python loops/generators | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
99
|
+
| `CWE-772-JS-BUFFER` | Use of `Buffer.allocUnsafe()` without immediate full overwrite | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
100
|
+
| `CWE-174-PY-CANONICAL` | Missing final canonicalization/boundary check after Python input transformations | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
101
|
+
| `CWE-174-JS-CANONICAL` | Missing final canonicalization check after JS/Node normalization pipeline | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
102
|
+
| `CWE-116-PY-PARTIAL-ESCAPE` | Improper output encoding in Python: escaping only `<`/`>` but not attribute vectors | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
103
|
+
| `CWE-116-JS-PARTIAL-ESCAPE` | Improper output encoding in JS: partial replace allows `onerror`/`onload` attribute inj... | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
104
|
+
| `CWE-94-UNIVERSAL-NO-SANDBOX-TEMPLATE` | Dynamic template rendering without sandbox/isolation controls | Для динамического рендеринга избегать исполнения шаблонного кода: использовать статические шаблоны из доверенного каталога и передавать только данные через контекст. |
|
|
105
|
+
| `CWE-20-UNIVERSAL-TYPE-CONFUSION` | Missing input type validation/casting for query-critical fields (type confusion) | Для query-параметров всегда выполнять явное приведение к ожидаемому примитиву (`string/number/boolean`) и отклонять объекты/операторы. |
|
|
106
|
+
| `CWE-98-UNIVERSAL-FILE-INFRA-CONTROL` | External control of executable/loadable file selection without mapping | Не давать внешнему параметру напрямую выбирать файл/модуль; применять фиксированный маппинг `ID -> Filename` и deny-by-default для неизвестных значений. |
|
|
107
|
+
| `CWE-942-PLAYWRIGHT-WEBSEC` | Browser security bypass via Playwright insecure launch flags | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
108
|
+
| `CWE-295-PLAYWRIGHT-HTTPS` | TLS trust bypass in browser automation via `ignoreHTTPSErrors: true` | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
109
|
+
| `CWE-295-S3-MINIO-VERIFY` | Insecure TLS disable in MinIO/S3 clients (`verify=False`) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
110
|
+
| `CWE-942-S3-PUBLIC-ACL` | Public object ACL exposure in S3/MinIO operations | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
111
|
+
| `CWE-400-GIGAAM-UPLOAD-LIMITS` | Missing content-length/file size limits for GigaAM audio upload endpoints | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
112
|
+
| `CWE-400-GIGAAM-HTTPX-TIMEOUT` | Missing `httpx` timeouts for transcription API calls (resource exhaustion risk) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
113
|
+
| `CWE-94-ELECTRON-WEBPREFS` | Insecure Electron BrowserWindow webPreferences (`nodeIntegration: true` / `contextIsola... | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
114
|
+
| `CWE-250-ELECTRON-REMOTE` | Unsafe usage of deprecated Electron `remote` module | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
115
|
+
| `CWE-94-NODE-EXEC-CONCAT` | Command injection risk in `child_process.exec/spawn` with user-influenced command conca... | Validate data with Zod and sanitize DOM/HTML sinks with DOMPurify before rendering. |
|
|
116
|
+
| `CWE-295-BOTO3-VERIFY-FALSE` | Insecure TLS verification disabled in boto3 sessions/clients | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
117
|
+
| `CWE-284-BOTO3-PUBLIC-ACL` | Overly permissive S3 bucket ACL (`public-read/public-read-write`) via boto3 | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
118
|
+
| `CWE-295-BOTO3-PRESIGNED-TTL` | Excessive presigned URL lifetime (`ExpiresIn > 3600`) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
119
|
+
| `CWE-114-CSH-PROCESS-START-RELATIVE` | Unsafe process execution via relative binary path (`Process.Start("app.exe")`) | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
120
|
+
| `CWE-497-CSH-SENSITIVE-LOG` | Sensitive environment/exception disclosure in logs (`Environment.GetEnvironmentVariable... | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
121
|
+
| `CWE-606-CSH-UNTRUSTED-LOOP-BOUND` | Untrusted input controls loop termination in unsafe/memory-copy contexts | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
122
|
+
| `CWE-114-CSH-DLL-SEARCH-ORDER` | Missing DLL search order hardening in VSTO startup (`SetDllDirectory("")`/`SetDefaultDl... | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
123
|
+
| `CWE-362-CSH-STATIC-ASYNC-RACE` | Race condition: writes to `static` fields inside async methods/event handlers without s... | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
124
|
+
| `CWE-583-CSH-METADATA-ACL-TRUST` | Access control decisions based on mutable document metadata (`BuiltInDocumentProperties`) | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
125
|
+
| `CWE-912-CSH-ANTI-DEBUG-AUTH` | Anti-debug logic (`Debugger.IsAttached`/`Debug.Assert`) inside auth-critical flow | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
126
|
+
| `CWE-749-CSH-SINGLETON-PUBLIC-HOOKS` | Public `event`/`Action` in singleton security classes allowing external state mutation | Use using/try-finally and safe .NET APIs; enforce strict allowlists for untrusted input. |
|
|
127
|
+
| `PLT-001` | Создание temp-файла в общем каталоге с предсказуемым именем (CWE-379) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
128
|
+
| `PLT-002` | Утечка памяти: повторный `malloc` без `free` в C-extension glue (CWE-401) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
129
|
+
| `PLT-003` | Двойное освобождение одного указателя (CWE-415) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
130
|
+
| `PLT-004` | Use-after-free в callback после async (CWE-416) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
131
|
+
| `PLT-005` | Плагин получает доступ к объекту вне его security-контекста (CWE-668) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
132
|
+
| `PLT-006` | Неправильная инициализация ресурса до проверки прав (CWE-403) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
133
|
+
| `PLT-007` | Асимметричное потребление ресурсов при парсинге входа (CWE-405) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
134
|
+
| `PLT-008` | Неверное преобразование типа в security check (CWE-704) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
135
|
+
| `PLT-009` | Чтение за пределами выделенного буфера в shim (CWE-125) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
136
|
+
| `PLT-010` | Отсутствие обработки ошибки при security decision (CWE-390) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
137
|
+
| `PLT-011` | Раскрытие чувствительного различия ошибок (CWE-203) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
138
|
+
| `PLT-012` | Целочисленное переполнение при выделении структуры (CWE-189) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
139
|
+
| `PLT-013` | Некавыченный путь поиска при `subprocess` (CWE-428) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
140
|
+
| `PLT-014` | Нулевой pointer dereference после guard (CWE-476) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
141
|
+
| `PLT-015` | Неправильное сравнение указателей вместо содержимого (CWE-581) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
142
|
+
| `PLT-016` | Некорректные права по умолчанию на конфиг с секретами (CWE-276) | Use strict Pydantic BaseModel schemas for input/output, including response_model and field allowlists. |
|
|
143
|
+
|
|
144
|
+
## Verification
|
|
145
|
+
|
|
146
|
+
**Verification:** Check the gold testbed file(s) below for `Vulnerable: <ID>` markers (static Semgrep + `detection-matrix.md` ground truth).
|
|
147
|
+
|
|
148
|
+
- [`gold-standard-testbed/gap_fill_vulnerable.py`](../gold-standard-testbed/gap_fill_vulnerable.py)
|
|
149
|
+
|
|
150
|
+
After changing [`patterns.md`](patterns.md), run from the repo root:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
python scripts/sync_semgrep.py
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Workflow: Recon → Scan → Verify
|
|
157
|
+
|
|
158
|
+
### 1) Recon
|
|
159
|
+
- Map entrypoints, data flows, and trust boundaries for this stack.
|
|
160
|
+
- Identify which metrics in [`patterns.md`](patterns.md) apply to the code under review.
|
|
161
|
+
|
|
162
|
+
### 2) Scan
|
|
163
|
+
- Run Semgrep with `semgrep-rules/<skill>.yaml` (generated) and correlate with Anti-Patterns.
|
|
164
|
+
- Eliminate findings that cannot bind to a metric row.
|
|
165
|
+
|
|
166
|
+
### 3) Verify
|
|
167
|
+
- Confirm markers or scanner hits for touched IDs in the gold testbed when adding metrics.
|
|
168
|
+
- Emit findings as `Vulnerable: <PREFIX>-<NNN>` in written reviews.
|
|
169
|
+
|