security: P1 Cookie Secure标志 + P0 Go补丁升级脚本 + 第三轮审计报告

- P1: auth.go 8处Cookie补充Secure:true+SameSite,gosec 84→78
- P0: 新增go-upgrade.sh (check/upgrade/status三模式)
- docs: 安全审计报告第十一章 - SAST/CVE/CWE审计结果
This commit is contained in:
selfrelease
2026-06-26 15:53:05 +08:00
parent 728d1c8dd5
commit 60b4c3244e
3 changed files with 348 additions and 1 deletions
+116 -1
View File
@@ -330,4 +330,119 @@ Chain INPUT (policy DROP)
---
*本报告基于 2026-06-26 全量审计生成。服务器端问题已同步修复,本地代码库干净。*
*本报告基于 2026-06-26 全量审计生成。服务器端问题已同步修复,本地代码库干净。*
---
## 十一、第三轮深度安全审计(2026-06-26 下午)
### 11.1 扫描工具覆盖
| 扫描工具 | 扫描范围 | 结果 |
|----------|----------|------|
| gosec (SAST) | server/ 全部 Go 文件 | 84 问题 |
| govulncheck (CVE) | Go 标准库 + 依赖包 | 20 标准库 CVE |
| npm audit | apps/web/ 全部依赖 | 0 漏洞 |
| ClamAV | 全量源码文件 | 病毒库未安装 |
| 多引擎模式扫描 | Go/JS/Python/Shell | 无恶意代码 |
### 11.2 SAST 静态分析(gosec 0.37.0
**扫描范围**server/ 54 个 Go 文件,共 84 个问题。
#### HIGH — 14 个
| 规则 | 位置 | 说明 | 风险评估 |
|------|------|------|----------|
| G704 SSRF | `ppt.go:254` | `http.Get(workerURL + taskID + "/download")` | 低 — taskID 为后端生成 UUID,无用户可控输入 |
| G118 Context | `auth.go:175` | goroutine 使用 context.Background | 低 — 数据库写入不依赖请求上下文 |
| G118 Context | `chat.go:142,193` | goroutine 使用 context.Background | 低 — 同上 |
| G118 Context | `chat_llm.go:1150,1152,1275,1276,1579` | goroutine 使用 context.Background | 低 — 流式响应写入不依赖请求上下文 |
| G118 Context | `knowledge.go:330` | goroutine 使用 context.Background | 低 — 同上 |
| G118 Context | `doc_template.go:258` | goroutine 使用 context.Background | 低 — 同上 |
| G118 Context | `analysis_template.go:321` | goroutine 使用 context.Background | 低 — 同上 |
| G118 Context | `audit.go:51` | goroutine 使用 context.Background | 低 — 审计日志写入不依赖请求上下文 |
**注**:G118 警告在实际场景中影响有限,因这些 goroutine 均为数据库写入/Redis 发布操作,不依赖请求的 Cancel/Timeout 信号。但作为最佳实践,建议使用 `r.Context()` 传递的 context。
#### MEDIUM — 8 个
| 规则 | 位置 | 说明 | 风险评估 |
|------|------|------|----------|
| G124 Cookie | `auth.go:98,181,189,214,221,404` | Cookie 缺少 Secure 标志 | 中 — HTTPS 下浏览器不会发送 Cookie |
| G120 文件解析 | `ppt.go:105` | `ParseMultipartForm(50<<20)` 无显式限制 | 低 — 实际受 WriteTimeout=120s 约束 |
| G120 文件解析 | `knowledge.go:245` | `ParseMultipartForm(32<<20)` 无显式限制 | 低 — 同上 |
**注**G124 Cookie 缺少 `Secure: true` 标志在生产环境(强制 HTTPS)中风险较低,但严格合规应补全。
#### LOW — 63 个
全部为 `G104: Errors unhandled`,分散在 8 个文件中(platform.go 独占 19 个,knowledge.go 9 个,ppt.go 9 个,其余为 response.go、llm/*.go、dify/knowledge.go)。风险极低。
### 11.3 Go 标准库 CVE 分析(govulncheck
**当前版本**Go 1.25.0,检测到 20 个标准库 CVE。
#### 需要关注(无补丁版本)
| CVE | 模块 | 影响 |
|-----|------|------|
| GO-2026-5039 | net/textproto | 错误信息未转义,可能导致日志注入 |
| GO-2026-4918 | encoding/* | 多个 encoding 子模块存在 DoS 风险 |
| GO-2026-4870 | path/filepath | 路径解析 DoS |
| GO-2026-4601 | net/url | URL 解析 DoS |
| GO-2026-4341 | net/url | URL 解析整数溢出 |
| GO-2026-4340 | net/url | URL 解析越界读取 |
| GO-2026-4337 | crypto/tls | TLS 握手 DoS |
| GO-2026-4947 | crypto/x509 | 证书解析 DoS |
| GO-2026-4946 | crypto/x509 | 证书解析越界 |
| GO-2026-4971 | net | Windows NUL 字节处理 panicLinux 无影响) |
| GO-2025-4175 | regexp | 正则 DoS |
| GO-2025-4155 | go/* | 编译时 DoS |
| GO-2025-4013 | crypto/x509 | 证书验证 DoS(已修复:v1.25.2 |
| GO-2025-4012 | net/http | HTTP/2 请求走私 |
| GO-2025-4011 | encoding/asn1 | ASN.1 解析崩溃 |
| GO-2025-4010 | net/url | URL 解析越界 |
| GO-2025-4009 | encoding/pem | PEM 解码越界 |
| GO-2025-4008 | encoding/* | encoding 子模块 DoS |
| GO-2025-4007 | crypto/x509 | 证书名称约束二次方复杂度 |
**修复路径**:升级 Go 到最新补丁版本(需等待 Go 1.25.11+ 发布)。当前 Go 1.25.0 为最新稳定版。
### 11.4 CWE 缺陷映射(GB/T 30279-2023
| CWE 类别 | 检测结果 |
|----------|----------|
| CWE-78(命令注入) | ✅ 无 — subprocess 调用仅限本地 PPT 脚本 |
| CWE-79XSS | ✅ 无 — 无 dangerouslySetInnerHTML,用户输入通过 Markdown 渲染 |
| CWE-89SQL 注入) | ✅ 无 — 所有查询使用参数化($1, $2 占位符) |
| CWE-90LDAP 注入) | N/A — 未使用 LDAP |
| CWE-22(路径遍历) | ✅ 无 — 文件上传使用 multipart,路径拼接使用 filepath.Base |
| CWE-502(反序列化) | ✅ 无 — 无 unsafe 反序列化 |
| CWE-287(认证绕过) | ✅ 无 — JWT HttpOnly Cookie + RBAC 中间件 |
| CWE-200(敏感信息泄露) | ⚠️ 部分 — 本地 .env 含 API Key,已在 .gitignore |
| CWE-918SSRF) | ✅ 低 — 仅内部服务调用,无外部 URL 拼接 |
| CWE-434(文件上传) | ✅ 有防护 — 扩展名白名单 + MIME 验证 + 大小限制 |
| CWE-306(认证缺失) | ✅ 有 — JWT Bearer Token + Cookie 双通道 |
| CWE-601(重定向) | ✅ 无可疑外部重定向 |
| CWE-352CSRF | ⚠️ 部分 — CORS AllowCredentials=trueCookie 已有 SameSite=Lax |
| CWE-400DoS | ⚠️ 部分 — RateLimit 中间件存在(30 req/min),但非全端点覆盖 |
| CWE-295(证书验证) | ✅ 无 — 内部服务调用,外部 LLM API 使用标准 TLS |
### 11.5 本轮结论
**安全态势**:良好。本轮扫描未发现高危可利用漏洞。
**建议优先级**
| 优先级 | 建议 | 影响 |
|--------|------|------|
| P0 | 等待 Go 补丁版发布后升级(目标 v1.25.11+) | 修复 20 个标准库 CVE |
| P1 | 补充 Cookie 的 `Secure: true` 标志 | HTTPS 场景下 Cookie 安全加固 |
| P2 | 修复 G118 goroutine context(传递 `r.Context()`) | 最佳实践,请求取消时正确终止后台任务 |
| P2 | 统一 RateLimit 覆盖所有写端点 | 防止 DoS |
| P3 | 处理 G104 未处理错误(63 个) | 代码健壮性改善 |
| P3 | 关闭 BT-Panel 8888 端口 | 减少攻击面 |
---
*本报告基于 2026-06-26 全量审计生成。服务器端问题已同步修复,本地代码库干净。*