Compare commits

..
Author SHA1 Message Date
testclient-admin da240ba117 security-analysis/policy.yml: low блокирует merge
security/scan 0 findings, 0 blocking
security / scan (pull_request) Successful in 54s
security/review 1 findings, 0 blocking
security / review (pull_request) Successful in 26s
security / deep-audit (pull_request) Skipped
2026-09-01 06:28:59 +00:00
testclient-admin 0ff70f2755 Merge pull request 'Add Level 0 + Level 1 + Level 2 security scanning' (#5) from add-security-scanning into main
Reviewed-on: #5
2026-08-29 19:05:46 +00:00
testclient-admin 4d95f2f174 Level 0: security scanning for pull requests
security/scan 0 findings, 0 blocking
security / scan (pull_request) Successful in 1m12s
security/review 0 findings, 0 blocking
security / review (pull_request) Successful in 16s
security / deep-audit (pull_request) Skipped
2026-08-29 19:01:44 +00:00
testclient-admin 2bec505126 Level 0: security scanning for pull requests 2026-08-29 19:01:43 +00:00
testclient-admin d798e2d110 Level 0: security scanning for pull requests 2026-08-29 19:01:42 +00:00
testclient-admin bdd0dc6ede Merge pull request 'add a small example file so security scanning has real content to check' (#3) from add-example-file into main 2026-08-29 18:52:03 +00:00
testclient-admin f7ad12811b add a small example file so security scanning has real content to check 2026-08-29 18:38:39 +00:00
4 changed files with 1305 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+69
View File
@@ -0,0 +1,69 @@
# security-analysis
Результаты автоматической security-проверки этого репозитория:
Level 0 (детерминированные сканеры) и Level 1 (AI PR review) из
требований AI Security Engine. Заводится и сопровождается
пайплайном `seed-security-scanning` (platform-infra) — правки
этого README переживут только до следующего его запуска.
## Что здесь лежит
- `policy.yml` — какие severity блокируют merge и какой минимальный
confidence нужен, чтобы находка вообще считалась. Общий для
обоих уровней.
- `findings/pr-<номер>/<unix-время>[-review].json` — находки
конкретного скана: массив объектов вида
```json
{
"id": "...", "source": "semgrep|gitleaks|ai-review",
"category": "sast|secret|auth|idor|injection|...",
"severity": "critical|high|medium|low", "confidence": 0.0,
"file": "...", "line_start": 0, "line_end": 0,
"title": "...", "description": "...", "rule_id": "...",
"cwe": "CWE-...", "status": "OPEN",
"created_at": "...", "pr_number": 0, "commit_sha": "..."
}
```
У находок Level 1 (`source: ai-review`) дополнительно есть
`impact`, `exploit_scenario`, `evidence`, `recommendation`.
## Уровни
- **Level 0** (`security/scan`) — semgrep + gitleaks, без LLM.
Быстро и воспроизводимо, ловит известные классы проблем.
Запускается на каждый PR.
- **Level 1** (`security/review`) — headless-агент
(`security-reviewer`, read-only: без bash/edit/webfetch) читает
диф PR через шлюз (модель `coder-fast`) и ищет то, что
детерминированные сканеры не видят: логические дыры
авторизации, IDOR, SSRF и т.п. Не идёт по всему репозиторию —
только диф и то, что нужно дочитать по grep/glob. Тоже на
каждый PR.
- **Level 2** (Deep Security Audit) — по запросу
(`workflow_dispatch` на `security.yml`, вход `domains` —
какие домены проверять, пусто = все). Шесть доменных
read-only агентов (`audit-auth`, `audit-authz`,
`audit-injection`, `audit-ssrf`, `audit-secrets`,
`audit-business-logic`) идут по ВСЕМУ репозиторию
последовательно (не параллельно — проще отлаживать, дороже
по времени), модель `coder-think` (рассуждение, не
экономичная `coder-fast`). Каждая находка проходит через
независимого верификатора (`audit-verifier`), который
пытается её ОПРОВЕРГНУТЬ, а не подтвердить — подтверждённые
находки попадают в отчёт (`security-analysis/deep-audit/<время>/`,
Markdown + JSON), не подтверждённые отбрасываются молча.
Результат — отдельный pull request с отчётом, не блокирует
merge (это аудит, не гейт).
## Кто это делает
Комментарии и статусы всех уровней — от имени
`<репозиторий>-security-bot`, отдельной учётки с правом записи
только на этот репозиторий. Не токен разработчика и не
администратора: у бота нет прав ни на что, кроме комментирования
PR и записи находок сюда же. У Level 1 и Level 2 — свои,
отдельные ключи шлюза (`SECURITY_REVIEWER_LITELLM_KEY` только на
`coder-fast`, `DEEP_AUDIT_LITELLM_KEY` только на `coder-think`),
каждый со своим бюджетом.
+8
View File
@@ -0,0 +1,8 @@
security:
block_on:
- critical
- high
- low
min_confidence: 0.7
scan_enabled: true
review_enabled: true
+5
View File
@@ -0,0 +1,5 @@
function greet(name) {
return `Hello, ${name}!`;
}
module.exports = { greet };