[CL-AUDIT-EP] Endpoint audit fixes: model-rollback owner-gate, magic-link throttle, dashboard-token header #321
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/claude-arnold-endpoint-audit"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Фиксы трёх находок аудита всех 197 endpoints (46 routers) от 2026-06-11:
POST /api/ai-signals/model-rollbackowner-gate (64ca08f). ModelRegistry process-global: любой авторизованный юзер мог откатить ML-модель для всех. Теперьis_owner_account→ 403, по образцу feature_flags.d7763ce).magic-link-login— единственный credential-issuing auth-роут без Pass 91/95ip_throttle(оракул для брута токенов).request-magic-link— только per-email throttle: один IP ротацией email флудил Telegram DM. Оба закрыты существующимip_throttle.check_and_record; generic-200 no-leak контракт сохранён.X-Dashboard-Tokenheader (f8d1610). Query-string token утекал в access-логи/Referer/history, включая деструктивныеlive-close-all/live-grid-rebuild. Header приоритетен, query fallback сохранён для /live HTML-навигации. slowapi limiter вынесен вapp/rate_limit.py.Зачем
Закрытие P0/P1 находок endpoint-аудита: privilege escalation на глобальную ML-модель, брут-форс окно на входе, утечка дашборд-секрета через логи.
План тестирования
backend/tests/test_endpoint_audit_fixes.py: 9 тестов (owner 403/200, 429 на magic-link брут, IP-flood стоп с no-leak, header/query token, wrong header 401).test_magic_link_login_returns_access_state— новая сигнатура), повторный прогон затронутых файлов: 110 passed.scripts/ops/post-deploy-validate.shпосле merge.Где могу ошибаться
magic-link-login: легитимные ретраи Mini App за одним NAT-IP мобильного оператора теоретически могут упереться в лимит (как и на остальных 4 роутах — поведение консистентно).request-magic-linkотвечает generic-200 и при IP-throttle (не 429) — осознанно, чтобы не давать флудеру сигнал; мониторить нечем кроме логов./api/live-*строго query-token — поведение не сломано (fallback), но если где-то стоит WAF, режущий кастомные заголовки, header-путь не заработает.