v3.9.2 — аудит-фиксы: анти-локаут, скоуп apt, пиннинг ключей, секреты из argv и логов - #21
Merged
Conversation
…реты из 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Итог сплошного аудита (бэкдоры / баги / 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_CONNECTION) теперь всегда попадает в правила + warn.Пакеты и ключи
setup_xanmod_repoвалидировался неskoupленнымapt-get update→ любой чужой битый репо на боксе валил установку ядра. ТеперьDir::Etc-скоуп, как у CrowdSec с v3.6.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.