Skip to content

Harden input validation (security audit)#7

Merged
jestivald merged 3 commits into
mainfrom
harden-input-validation
Jun 12, 2026
Merged

Harden input validation (security audit)#7
jestivald merged 3 commits into
mainfrom
harden-input-validation

Conversation

@jestivald

Copy link
Copy Markdown
Owner

Security-хардинг входной валидации (по итогам аудита)

Прогнал аудит двумя независимыми аудиторами (бэкдоры/эксфильтрация + инъекции/привилегии). Бэкдоров, эксфильтрации, скрытых кредов — нет. Реальные находки — пробелы валидации ENV; т.к. тулкит параметризуется неинтерактивно из панели/оркестратора, это не «root сам себе», а вектор компрометации ноды тем, кто заполняет поля.

Фиксы

  • 🔴 SAFETY_DELAYsh -c (единственный shell-eval-сток): валидируется как uint + передаётся позиционным аргументом.
  • 🔴 WHITELIST IPv6: раньше любая строка с : уходила дословно в nft elements = { … } (инъекция правил) — теперь строгий regex, как у IPv4.
  • 🟠 Куст rate/burst/*_BAN_TIME (SYN_RATE/CONN_LIMIT/ICMP_*/PORTSCAN_*/…): валидируются перед попаданием в nft-heredoc.
  • 🟠 NA_REF (install.sh): ^[A-Za-z0-9._/-]+$ без .. — раньше допускал path-traversal в URL модулей.
  • 🟡 Стейт сейфти-таймера из предсказуемого /tmp → root-only $STATE_DIR (симлинк/TOCTOU), ! -L перед чтением pid.
  • 🟡 CrowdSec-установщик curl -s-fsSL (fail-closed).

Образцовое — не трогал

Проверка полного fingerprint ключа XanMod, validate_port_list/_is_port, nft -c перед nft -f, signed-by, single-quoted sh -c в optimize.sh — оставлено как есть.

Не закрыто (вне scope, рекомендация): жёсткий пиннинг CrowdSec через их APT-репо вместо curl|bash; SHA-пиннинг модулей в install.sh; deb.xanmod.org по https.

jestivald and others added 3 commits June 12, 2026 03:47
…ety state out of /tmp

Security audit follow-up. The toolkit is parameterized non-interactively (panel/
orchestrator), so unvalidated ENV is a real vector, not just root-to-root.
- Validate SYN/UDP/CONN/ICMP/PORTSCAN/SAFETY_DELAY as uint and SSH_BAN_TIME/
  PORTSCAN_BAN_TIME as durations before they hit the nft ruleset; SAFETY_DELAY also
  reached an sh -c (the only shell-eval sink) — now validated + passed positionally.
- WHITELIST IPv6 branch now strictly validated like IPv4 (previously any ':'-string
  went verbatim into the nft 'elements = {…}' heredoc — rule injection).
- Safety-timer pid/log moved from predictable /tmp to root-only $STATE_DIR (symlink/
  TOCTOU), with a '! -L' check before reading the pid.
- CrowdSec installer curl -s -> -fsSL (fail closed on HTTP error/redirect).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
NA_REF is interpolated into the module download URL; restrict to [A-Za-z0-9._/-]
and reject '..' so it can't be steered to another repo.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jestivald jestivald merged commit dcd34bc into main Jun 12, 2026
5 checks passed
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