From 5598894717130737119fd38773f02c8c214a81df Mon Sep 17 00:00:00 2001 From: igor04091968 Date: Wed, 3 Jun 2026 09:23:24 +0300 Subject: [PATCH] docs(release): add June 2026 audit --- docs/RELEASE_AUDIT_2026-06.md | 187 ++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 docs/RELEASE_AUDIT_2026-06.md diff --git a/docs/RELEASE_AUDIT_2026-06.md b/docs/RELEASE_AUDIT_2026-06.md new file mode 100644 index 0000000..041c382 --- /dev/null +++ b/docs/RELEASE_AUDIT_2026-06.md @@ -0,0 +1,187 @@ +# Release audit 2026-06 + +Дата проверки: `2026-06-03 09:21:17 MSK` + +Проверенный commit: + +```text +a1801fca5f0502c9745baedf027fafc0b96428e3 +``` + +Цель аудита: подтвердить, что публичный release-состав DetMir/AWatch-rus не +содержит приватные hostnames, адреса личного стенда, публичный домен +правообладателя, локальные пути оператора и реальные секреты. + +## 1. Область проверки + +Release-аудит выполнялся по tracked-файлам Git. Это корректная область для +GitHub/release экспертизы: `.git`, build output, ignored локальные артефакты, +рабочие `.ops/`, `.playwright-cli/`, unpacked install-kit и локальные AI-логи +не входят в публичную поставку. + +Запрошенный оператором общий шаблон: + +```bash +grep -R "SHARKON2025\|10.10.10\|dm.iri\|/home/igor\|/root\|password\|token\|secret" . +``` + +Для release-аудита использован воспроизводимый эквивалент по tracked-файлам: + +```bash +git grep -n -E 'SHARKON2025|10\.10\.10|dm\.iri|/home/igor|/root|password|token|secret' -- \ + ':!*.zip' ':!*.tar.gz' ':!adk-rust/target/**' +``` + +Причина: голый `grep -R .` также читает `.git`, ignored локальные каталоги и +сам audit-документ, поэтому он не является корректным критерием публичного +release-состава. + +## 2. Приватные маркеры стенда + +Команда: + +```bash +git grep -n -E 'SHARKON2025|10\.10\.10|dm\.iri|/home/igor|/root' -- \ + ':!*.zip' ':!*.tar.gz' ':!adk-rust/target/**' +``` + +Фактический вывод: + +```text +adk-rust/crates/verify-innosetup-installer/src/main.rs:260: let root = std::path::Path::new("/tmp/root"); +docs/ARCHITECTURE_RU.md:116:- canonical path/root allowlist; +docs/DETMIR_THREAT_MODEL_RU.md:168:- canonical path/root allowlist; +docs/DETMIR_THREAT_MODEL_RU.md:223:| T05 | Прямая выдача файлов по path traversal | Canonical path/root allowlist, no raw path route. | +proxmox/tsj_guardian_bot.py:960: base_pat += r"|lxc-usernsexec.*(/var/lib/lxc/" + guest_pat + r"/rootfs|/run/lxc/)" +``` + +Результат: + +- `SHARKON2025`: не найдено; +- `10.10.10`: не найдено; +- `dm.iri`: не найдено; +- `/home/igor`: не найдено; +- `/root` как приватный путь оператора: не найдено; +- оставшиеся совпадения являются ложноположительными: + `path/root`, `/tmp/root`, LXC `rootfs`. + +Вывод: приватных данных стенда в tracked release-составе не найдено. + +## 3. Слова password/token/secret + +Команда: + +```bash +git grep -n -E 'password|token|secret' -- \ + ':!*.zip' ':!*.tar.gz' ':!adk-rust/target/**' | wc -l +``` + +Фактический вывод: + +```text +396 +``` + +Это ожидаемые технические совпадения. Они относятся к: + +- названиям переменных CLI/API (`password`, `token`); +- Ansible lookup из окружения; +- `CHANGE_ME`, `replace-me`, `` и другим placeholder-значениям; +- документации по безопасному хранению секретов; +- тестам, проверяющим, что секреты не печатаются; +- DLP/regex terminology (`secret` как тип контролируемых данных). + +Примеры допустимых совпадений: + +```text +ansible/group_vars/aw_server.yml:4:ansible_password: "{{ lookup('env', 'AW_SSH_PASSWORD') }}" +ansible/group_vars/aw_windows.yml:4:ansible_password: "{{ lookup('env', 'AW_WINRM_PASSWORD') }}" +ansible/group_vars/proxmox-bot.example.yml:1:telegram_bot_token: "CHANGE_ME" +ansible/group_vars/pfsense-poller.example.yml:17: api_secret: "replace-me" +docs/INSTALL_RU.md:66:- Telegram bot token; +docs/INSTALL_RU.md:67:- evidence upload token. +adk-rust/crates/detmir-portal/src/main.rs:1756:fn bearer_token(request: &Request) -> Option { +``` + +Вывод: сами слова `password`, `token`, `secret` присутствуют в коде и +документации по назначению, но реальные значения секретов не обнаружены. + +## 4. Проверка высокосигнальных секретов + +Команда: + +```bash +git grep -n -E 'sk_[A-Za-z0-9]{12,}|pk_[A-Za-z0-9]{12,}|BEGIN (RSA |OPENSSH |EC |DSA )?PRIVATE KEY|ghp_[A-Za-z0-9]{20,}|xox[baprs]-[A-Za-z0-9-]{20,}|[0-9]{8,10}:[A-Za-z0-9_-]{30,}' -- \ + ':!*.zip' ':!*.tar.gz' ':!adk-rust/target/**' +``` + +Фактический вывод: + +```text +docs/SBOM_RELEASE_CHECKLIST_RU.md:65:git grep -n -E 'sk_[A-Za-z0-9]|pk_[A-Za-z0-9]|BEGIN OPENSSH PRIVATE KEY|password\\s*=' -- . || true +``` + +Результат: единственное совпадение находится в checklist-документе и является +самой командой проверки. Реальные API keys, GitHub tokens, Telegram bot tokens +и private keys не найдены. + +Контрольная проверка без audit/checklist-документов: + +```text +HIGH_SIGNAL_SECRETS_EXCLUDING_AUDIT=0 +``` + +## 5. Проверка tracked env/inventory/secrets + +Команда: + +```bash +git ls-files | grep -E '(^|/)secrets(/|$)|\.env$|inventory\.ini$' || true +``` + +Фактический вывод: + +```text +proxmox/ct-vars.example.env +``` + +Результат: найден только `*.example.env` шаблон. Он не является приватной +конфигурацией и не содержит реальных секретов. + +## 6. Проверка assignment-паттернов + +Команда: + +```bash +git grep -n -E "(password|token|secret)[[:space:]]*[:=][[:space:]]*['\"][^'\"]{8,}['\"]" -- \ + ':!*.zip' ':!*.tar.gz' ':!adk-rust/target/**' +``` + +Результат: найдены только шаблоны, env lookups, generated runtime password +logic и `CHANGE_ME`/`replace-me`. Реальные статические пароли или токены не +обнаружены. + +Характерные безопасные формы: + +```text +ansible/group_vars/aw_server.yml: ansible_password берется из AW_SSH_PASSWORD +ansible/group_vars/aw_windows.yml: ansible_password берется из AW_WINRM_PASSWORD +ansible/group_vars/proxmox-bot.example.yml: telegram_bot_token: "CHANGE_ME" +ansible/group_vars/pfsense-poller.example.yml: api_secret: "replace-me" +ansible/deploy_proxmox_web_gateway.yml: password генерируется через openssl rand +``` + +## 7. Итог + +Статус audit gate: `PASS`. + +Вывод для эксперта: + +- приватные hostnames, реальные адреса личного стенда, личный публичный домен, + `/home/igor` и приватные `/root/...` пути в tracked release-составе не + найдены; +- совпадения `password/token/secret` являются ожидаемыми техническими + терминами, placeholders или env lookups; +- реальных секретов, private keys и API tokens не найдено; +- `secrets/`, локальные `.env`, приватный `inventory.ini` и runtime artifacts + не входят в tracked Git-состав.