0.134.24
Fixed (MEDIUM-аудит: 10 находок группы 4.4 Security, см. docs/audit/backend-2026-06.md §4.4)
- M-X-1
security.SSRFGuard.IsPrivate— добавлен doc-комментарий с явным указанием приоритетов (blacklist > whitelist > глобальный blockedNetworks). Контракт зафиксирован тестомTestBlacklistOverridesWhitelist. - M-X-2
security.NewSSRFGuard— при невалидном CIDR (whitelist или blacklist) теперь пишетсяslog.Warnс указанием CIDR и ошибки. Ранее опечатки в CIDR молча игнорировались, ослабляя или ужесточая защиту непредсказуемо. - M-X-3
security.ExecGuard— всеdefaultDenyPatternsиdefaultPresetPatternsтеперь case-insensitive через inline(?i). Убранstrings.ToLower(cmd)вcheckPresetCommand/IsPresetCommand. РанееAPT INSTALL EVILобходил\bapt\b-паттерны, потому что они применялись безToLower. - M-X-4
security.isCredentialKey— добавлен паттерн"pass"(покрываетMY_PASS,MYSQL_PASS,USER_PASSи т.п.). Ранее"password"/"passwd"не покрывали короткий суффиксpass. - M-X-5
security.NormalizeCommand— добавлена проверка Unicode-категорийZl(Line Separator U+2028) иZp(Paragraph Separator U+2029). Они не покрываются ниzeroWidthRunes, ниunicode.Cf, но могут использоваться для обхода deny-patterns. - M-X-6
security.NormalizeCommand— doc-комментарий обосновывает scopeunicode.Cf(bidi-метки, теги и т.п.) в CLI-контексте. Поведение не изменилось — фикс только документационный. - M-X-7
security.ScrubSecrets— добавлен base64-декодер для блоков длиной ≥30 символов. При декодировании проверяются известные secret-префиксы (sk-,sk-ant-,ghp_,AKIAи т.д.). Закрывает обход через base64-кодирование (например,c2stcHJvai0xMjM0NTY3ODkwYWJjZGVmZ2hpamtsbW4=). - M-X-8
security.SafeReadFile—f.Read(buf)поstat.Size()заменён наio.ReadAll(io.LimitReader(f, 100MiB+1))+ проверка лимита. Закрывает partial read на regular files (при прерывании сигналом) и 0-байтовый stat на pipes/special files. - M-X-9
secrets.NewKeyManager— сигнатура изменена с*KeyManagerна(*KeyManager, error). Невалидная длина ключа теперь возвращает явную ошибку, а не «пустой» KeyManager, маскирующий configuration errors. ОбновленыLoadKeyManager(1 caller) и 4 теста. - M-X-10
secrets.reencryptOne— добавленslog.Errorв обе ветки ошибок (decryptиencrypt) с явнымlabel. Ранее ошибки терялись, если caller не проверялstats.Errors.
Tests
- Новые:
ssrf_test.go::TestNewSSRFGuard_InvalidCIDRIgnored,guard_test.go::TestExecGuard_CaseInsensitive+TestIsPresetCommand_CaseInsensitive,env_scrub_test.go::TestScrubCredentialEnv_PassSubstring,normalize_test.go::TestNormalizeCommand_LineParagraphSeparators,output_scrub_test.go::TestScrubSecrets_Base64Encoded+TestScrubSecrets_Base64NonSecretUnchanged,safeopen_test.go::TestSafeReadFile_PartialRead,keymanager_test.go::TestNewKeyManager_InvalidKey_ReturnsError+TestNewKeyManager_ValidKey_OK,reencrypt_test.go(новый файл сTestReencryptOne_DecryptError_AppendsAndLogs,TestReencryptOne_AlreadyActiveKey_NoOp,TestReencryptAll_LogsAndCountsErrors). - Обновлены:
keymanager_test.go— все 4 вызоваNewKeyManagerобёрнуты в helpermustNewKeyManager(M-X-9 breaking change).
Build / Tests
go test ./internal/...— все тесты проходят (security, secrets, agent, memory, store и т.д.).go build— OK.