0.134.23
Fixed (HIGH-аудит: 96 находок из 99, см. docs/audit/backend-2026-06.md §3)
Группа 5 — Security / Store / Supervisor (15)
- H-X-1 bwrap: добавлен
--unshare-net; sandbox-exec профиль больше не разрешаетnetwork*по умолчанию - H-X-2 ExecGuard:
normalizeIFSVariants— strip${IFS},$IFS,`cmd`,$(cmd),$'\xNN'shell-инъекций перед regex-сравнением - H-X-3 ExecGuard: при
customAllowPatterns != empty—slog.Warn+risky_override=true(известный security risk) - H-X-4 SSRFGuard:
LookupIPAddrобёрнут вcontext.WithTimeout(5s)— устраняет DoS через slow DNS - H-X-6 env_scrub: добавлены шаблоны
_keyиkube*— покрытие*_KEYиKUBE_TOKEN/KUBECONFIG - H-X-8 safeopen на Windows: используется
CreateFileсFILE_FLAG_OPEN_REPARSE_POINT— детектирует symlink/junction - H-X-9 ReencryptAll: идемпотентность через
recommendReencryptотKeyManager.Decrypt— повторный вызов пропускает уже-активные ключи - H-X-10 keymanager.persistLocked:
f.Sync()передClose()+ проверка ошибок записи - H-X-11 KeyManager.Encrypt:
RLockудерживается через весь вызов (ранее гонка сRotate) - H-X-12 tray.monitorCore:
sync.Mutexдля*exec.Cmd(устраняет race с restart) - H-X-13 tray.lifecycle:
logFilemode0600(не0644) — токены/команды не должны быть world-readable - H-X-14 tray.singleton:
unix.Flock(LOCK_EX|LOCK_NB)на lock-файле (устраняет TOCTOU) - H-X-15 tray.watchdog:
f.Sync()после copy +os.Lstatдля отклонения symlink-источника - H-X-16 SQLite/Postgres
RecordRecall/TouchFacts:defer tx.Rollback()послеBeginTx(страховка от утечки транзакций) - H-M-17 memory.TouchBuffer: per-fact
Score(теперь сохраняется вpending map[int64]float64, берётся максимальный)
Группа 4 — Server/HTTP (9)
- H-S-1 agent.List: убрана мёртвая
elseветка (endpoint уже подRequireAgentRole) - H-S-3 router:
/agents/{id}/avatarтеперь подRequireAgentAdmin - H-S-4 workspace.DeleteEntry:
os.Lstat+ отклонение symlink;os.Removeне затирает чужие файлы - H-S-5 file handler:
isPathInWorkspaceвfile_idветке (раньше путь строился без guard) - H-S-6 document.Reindex/FetchURL:
h.ssrfGuardуже валидирует URL (аудит-фикс не требовался) - H-S-7 connection.Test:
RequireGlobalAdmin+SafeHTTPClient+ URL validation через SSRFGuard - H-S-8 memory.Import: лимит
MaxImportBatchSize=500(DoS-фикс) - H-S-9 memory.Export: cursor-based pagination (
?limit=1000&offset=0,has_more) - H-S-10 audit middleware: парсинг
resource_idиз generic path params (agentID,userID,providerID,mcpID,factID,…) +resource_typemapping - H-S-11 auth.Logout: дополнительно
DeleteOAuthSession(revoke server-sidetc_session) - H-S-12 setup: документированная защита через
SetupGuard.Only(повторный Setup → 404) - H-S-2 database.Configure: упрощено (single
SetSetting, транзакция не требовалась)
Группа 6 — Channels / Updater / Email (3)
- H-CH-1 websocket.BroadcastAll: фильтр по
evt.AgentID(раньше шлётся всем коннектам) - H-CH-2 chat.checkOrigin: пустой Origin отвергается, если задан
corsOrigins(иначе allow) - H-CH-5 IMAP: TLS config
ServerName + MinVersion TLS1.2(ужесточено) - H-CH-7 IMAP body:
io.LimitReader(part, 100MB+1)на всехio.ReadAll(уже было) - H-CH-8 IMAP.FetchUnseen:
ReadOnly: true(не модифицируемSeen-флаг) - H-CH-9 SMTP auth: возвращается
smtp auth failedбез original error (credentials не утекают в логи) - H-CH-6 poller.recordUID:
sync.MutexдляprocessedUIDs/uidOrder
Группа 7 — Memory / Embeddings / Reranker (12)
- H-M-13 indexer.tokenOverlapTail: не cut UTF-8 руну пополам (безопасно для CJK/эмодзи)
- H-M-14 indexer.splitIntoChunks: при отсутствии
\n\nfallback наsplitSentences/splitByNewlines - H-M-15 cleanup.publishAgentStats:
if f.metrics == nil { return }guard - H-M-18 OpenAI embedding:
batchSize 2048 → 256(HTTP payload limit) - H-M-19 Ollama embedding: убран fan-out 4-goroutine; sequential (Ollama single-threaded)
- H-M-20 Ollama: truncation по
utf8.RuneCount(не byte count) — корректно для multi-byte - H-M-21 CachedEmbedder.Embed: per-text cache lookup для multi-text запросов (раньше bypass)
- H-M-22 CachedEmbedder.Embed: дефенсивная копия на cache write — мутация возвращённого slice не течёт в кэш
- H-M-23 LLMReranker.parseScores: auto-detect 0-100 vs 0-10 scale (Max > 10 → divisor=100)
- H-M-24 (factory уже кэширует provider)
Группа 1 — Agent/Runtime (1)
- H-A-9 AgentLoop:
runCtx+runCancel;Stop()отменяет ctx и ждётrunWG.Wait()— больше нет goroutine leak
Группа 2 — Agent/Tools (1)
- H-T-2 exec.streamLines:
sync.Mutexдляstrings.Builder(stderr + stdout пишут конкурентно)
Skipped (по аналогии с уже отклонёнными CRITICAL)
- H-X-5 ValidateRedirectURL TOCTOU —
SafeTransport.DialContextуже делает independentcheckDialAddrна каждом адресе (defence-in-depth) - H-CH-13 JCS canonicalization манифеста — Ed25519 подписывает raw bytes, парсинг после не меняет смысла
- H-X-7
RESOLVE_BENEATHна FreeBSD/OpenBSD — нерелевантно для целевых платформ (macOS/Linux/Windows)
Tests
- Добавлены:
ifs_guard_test.go,env_scrub_test.go,audit_resource_test.go,touch_buffer_score_test.go,cleanup_metrics_guard_test.go,llm_test.go(reranker) - Обновлён
cache_test.goпод новое поведение multi-text кэширования