Skip to content

v3.9.2 — аудит-фиксы: анти-локаут, скоуп apt, пиннинг ключей, секреты из argv и логов - #21

Merged
jestivald merged 3 commits into
mainfrom
v3.9.2-audit-fixes
Jul 26, 2026
Merged

v3.9.2 — аудит-фиксы: анти-локаут, скоуп apt, пиннинг ключей, секреты из argv и логов#21
jestivald merged 3 commits into
mainfrom
v3.9.2-audit-fixes

Conversation

@jestivald

Copy link
Copy Markdown
Owner

Итог сплошного аудита (бэкдоры / баги / supply-chain). Бэкдоров и утечек не найдено; здесь — найденные баги и ужесточения. Подробности по каждому пункту — в CHANGELOG.

Анти-локаут

  • Сейфти-таймер снимал только живую таблицу, а na-firewall.service оставался в автозагрузке → первый же ребут возвращал локаут-руллсет, уже без подстраховки. Теперь откат через na-fw-safety-revert (таблица + автозагрузка + метка + лог), diagnose про это громко говорит.
  • detect_ssh_port был слеп к ssh.socket (Ubuntu 24.04+) и к sshd_config.d/* → strict открывал :22 вместо реального порта.
  • Порт текущей SSH-сессии (SSH_CONNECTION) теперь всегда попадает в правила + warn.

Пакеты и ключи

  • setup_xanmod_repo валидировался неskoupленным apt-get update → любой чужой битый репо на боксе валил установку ядра. Теперь Dir::Etc-скоуп, как у CrowdSec с v3.6.
  • CrowdSec → канонический any/any (у Debian 13 своего suite нет). CROWDSEC_STRICT=1 запрещает curl|bash-фоллбэк.
  • import_pinned_key: в keyring кладётся ровно пиненый отпечаток.

Секреты: токены уходят через -H @file, а не в argv; URL в journald без userinfo; http:// при токене → warn; install.sh качает с --proto-redir '=https'.

Прочее: swapon на btrfs не роняет optimize посреди прогона; FLEET_SYNC_INTERVAL персистится и парсится верно; flock на прогон; rollback убирает pam_limits и свой swapfile; install.sh -h работает в curl|bash и без root.

Тесты: новый tests/fleet-sync-unit.sh исполняет сгенерированный na-fleet-sync против стабов; apply-smoke стережёт сейфти-откат и порт сессии; CI: checkout по SHA + permissions: contents: read.

jestivald and others added 3 commits July 26, 2026 23:40
…реты из argv/логов

Аудит кодовой базы (бэкдоры/баги/supply-chain) бэкдоров не нашёл; здесь — найденные
баги и ужесточения.

Анти-локаут:
- сработавший сейфти снимал ТОЛЬКО таблицу, а na-firewall.service оставался enabled →
  первый же ребут возвращал локаут-руллсет уже без подстраховки. Теперь откат идёт
  через na-fw-safety-revert: таблица + автозагрузка + метка safety-fired.last;
- detect_ssh_port был слеп к ssh.socket (Ubuntu 24.04+) и к sshd_config.d → strict
  открывал :22 вместо реального порта; теперь socket-юнит → sshd -T → ss → конфиг;
- порт текущей SSH-сессии (SSH_CONNECTION) всегда попадает в правила + warn.

Пакеты/ключи:
- setup_xanmod_repo валидировался НЕскоупленным apt-get update → любой чужой битый
  репо на боксе ронял установку ядра; теперь Dir::Etc-скоуп, как у CrowdSec;
- CrowdSec: канонический suite any/any (Debian 13 не имеет своего), CROWDSEC_STRICT=1
  запрещает curl|bash-фоллбэк; для bookworm форсится lts-ветка XanMod;
- import_pinned_key: в keyring кладётся РОВНО пиненый отпечаток (apt доверяет каждому
  ключу файла, а keyserver ищет по 64-битному keyid).

Секреты:
- na-fleet-sync шлёт X-Api-Key/Authorization через -H @file (не argv → /proc/cmdline);
- URL в journald пишется без userinfo (basic-auth больше не течёт в лог);
- http:// при заданном токене — громкий warn; install.sh качает с --proto-redir '=https'.

Прочее: swapon на btrfs больше не роняет optimize посреди прогона (и dd уважает
REMNAWAVE_SWAP_SIZE); FLEET_SYNC_INTERVAL персистится и читается верно (парс никогда
не совпадал → ложные «токен протух»); flock на прогон; rollback убирает pam_limits и
свой swapfile; install.sh -h работает в curl|bash и без root; двойной 0 в diagnose.

Тесты: tests/fleet-sync-unit.sh ИСПОЛНЯЕТ сгенерированный хелпер против стабов
(секреты не в argv, redact, redirect-политика, fail-safe); apply-smoke стережёт
сейфти-откат и порт сессии; CI: checkout по SHA, permissions: contents: read.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
В DRY_RUN protect.sh пишет ruleset в mktemp /tmp/na_filter.XXXXXX.nft, а не в
$CONF_DIR — проверка искала не тот путь и падала. Сама фича отработала на всех
образах: warn про порт сессии есть, nft -c принял правило с набором из двух портов.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jestivald
jestivald merged commit 1b09ed9 into main Jul 26, 2026
6 checks passed
@jestivald
jestivald deleted the v3.9.2-audit-fixes branch July 26, 2026 20:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant