0.134.19
Security
- C-S-1:
GetAgentStats— заменён запрос к удалённой таблицеsessionsнаCOUNT(DISTINCT thread_id) FROM messages, чинит 500 на/agents/{id}/statsпосле миграции 049 - C-S-2:
FindSimilarEntities— проброшенuserIDчерезdual.go/sqlite.go/postgres.go, фильтрация KG-сущностей по пользователю (закрывает утечку данных между пользователями) - C-H-1: IDOR в
/agents/{id}/messages/{msgID}— добавленrequireMessageInAgentхелпер, валидация agentID в GetMessage/SetReaction/ToggleFavorite - C-H-2: IDOR в
/kg/*— write-операции (DeleteEntity/DeleteRelation/Rebuild) обёрнуты вRequireAgentAdmin - C-H-3:
/providers/{id}/diagnostics— обёрнут вRequireGlobalAdmin(ранее доступен любому авторизованному) - C-CH-5:
/agents/{id}/approvals/{id}/resolve— обёрнут вRequireAgentAdmin(ранее доступен agent_user) - C-H-4: Setup-токен — поддержка
X-Setup-Tokenheader (fallback на JSON body для backward compat) - C-H-5:
/healthz— убраныversionиuptimeиз публичного эндпоинта (anti-fingerprinting) - C-H-6:
ChatHandler.tickets— добавлен фоновый GC (30s), nil-check перед доступом кt.expiresAt - C-H-8: Refresh-токен — добавлен
client_idв refresh-токены, сверка при обмене (migration 072) - C-SC-2: Sandbox —
WrapCommandBwrap/WrapCommandSandboxExecпереведены на argv-array безsh -c - C-SC-3:
keys.json— HMAC-SHA256 подпись при записи, верификация при чтении (с migration path для старого формата) - C-SC-4: Refresh-rotation — unified “invalid credentials” для lockout и неверного пароля (оба 401)
- C-SC-5: Lockout info leak — единое сообщение “invalid credentials” вместо раскрытия времени блокировки
- C-SC-6: JWT secret — валидация
len(secret) >= 32вNewTokenService - C-SC-7: Lockout persistence —
Persist/Loadметоды для сохранения lockout-состояния в файл - C-SC-8: Lockout cap — max 1000 entries + GC expired при
RecordFailure - C-SC-12: SSRF — добавлены unit-тесты для IPv4-mapped IPv6
- C-SC-13: SSRF — расширены
blockedNetworks: multicast (224.0.0.0/4), reserved (240.0.0.0/4), benchmarking (198.18.0.0/15), TEST-NET-1/2/3 - C-SC-14: SSRF — отключён HTTP proxy в
SafeTransport(Proxy: nil) - C-CH-1: SMTP Header Injection —
sanitizeHeader()для Subject/From/In-Reply-To/References - C-CH-10: SMTP filename injection —
sanitizeFilename()для Content-Disposition - C-CH-11: SMTP boundary —
randomBoundary()переведён наcrypto/rand - C-CH-12: SMTP credentials scrub —
TestConnectionне раскрывает credentials в ошибке - C-CH-2: IMAP — все
io.ReadAll()обёрнуты вio.LimitReader(part, 100MB+1) - C-CH-7: Updater TLS —
ServerName/MinVersion: TLS 1.2в tls.Config, убранtcp4 - C-CH-6: Permissions —
ApplyAutonomyOverlayявно deny MCP для readonly/supervised уровней
Fixed
- C-S-3:
AsyncAddMessage— заменён fire-and-forget goroutine на buffered channel + writer-goroutine с логированием ошибок - C-S-4: N+1 в
ListAgents— batchloadAgentProviderIDsBatch/loadAgentModelIDsBatchчерезWHERE agent_id IN (...) - C-CH-3: WebSocket — server-side ping-ticker (30s) + per-connection idle timeout (60s)
- C-CH-4: WebSocket —
generateConnID/generateChatIDпереведены наatomic.Uint64counter - C-CH-9: Whitelist — добавлена документация о проверке только envelope-from
Changed
- C-M-1:
persistSummary— корректная передачаuserIDвместоnil - C-M-3/C-M-4: OpenAI/Ollama embedding clients — добавлен
http.Client{Timeout: 60s} - C-M-5:
SwappableEmbedder.Swap— возвращает ошибку при несовпадении размерностей - C-M-6: Reranker — параллелизация batch-обработки через WaitGroup + semaphore (max 4 concurrent)
- C-SC-10: Argon2id параметры — задокументирован осознанный выбор
t=3, p=4