Files
LokiStack/backend/services/promtail_forbidden_path_test.go
opsx 2975452c21 fix(security,data): P0 — 命令注入/停止毁数据/采集路径绕过/DB 清库/前端竞态
后端(实机 10.10.10.161 验证 host-binary 全链路 + 注入双路径 400):
- Loki 版本号严格 ^\d+.\d+.\d+$ 校验并接入 Update 路径:version 拼进 SSH shell 命令,
  旧校验放行 3.0.0'; id; echo ' 等注入载荷(root RCE)
- Stop/Restart 清理清单移除 PVC:停止部署曾连带删除 loki-data PVC,filesystem 存储日志被永久清空(测试锁死红线)
- 采集敏感路径防护覆盖默认 LogPath 分支与 collector Create(/etc/shadow 不再可绕过入库)
- 数据文件损坏时原文件改名 .corrupt-* 留档再空库启动,不再被静默覆盖(loadFromDisk 抽出可测)

前端:
- 审计页用户名过滤 300ms 防抖 + AbortController/版本号(逐键竞态数据错乱)
- 向导自动部署改用创建返回实例(或 id 最大且 pending),不再盲取 list[0] 对错误实例发起真实部署
- 路由级 ErrorBoundary:单页崩溃/chunk 404 只影响当前页
2026-10-29 13:02:11 +08:00

26 lines
880 B
Go

package services
import "testing"
// TestPromtailConfigForHostRejectsForbiddenDefaultLogPath 敏感路径防护不得只覆盖 ScrapeJobs 分支:
// 默认 LogPath 填 /etc/shadow、/root/.ssh/id_rsa 同样必须被拒绝(否则主机凭据被采进日志平台)。
func TestPromtailConfigForHostRejectsForbiddenDefaultLogPath(t *testing.T) {
bad := []string{"/etc/shadow", "/root/.ssh/id_rsa", "/proc/self/mem", "/etc/ssh/ssh_host_rsa_key"}
for _, path := range bad {
_, err := PromtailConfigForHost(HostPromtailOptions{
Hostname: "h1",
LogPath: path,
})
if err == nil {
t.Errorf("默认 LogPath=%q 应被拒绝(敏感路径)", path)
}
}
// 正常业务路径不受影响
if _, err := PromtailConfigForHost(HostPromtailOptions{
Hostname: "h1",
LogPath: "/var/log/app/*.log",
}); err != nil {
t.Errorf("正常 LogPath 不应报错: %v", err)
}
}