首页龙虾技能列表 › Go Vuln Info Disclosure — Go 信息泄露审计

Go Vuln Info Disclosure — Go 信息泄露审计

v0.1.0

当审计涉及日志记录、错误处理、HTTP 响应数据、Kubernetes Secret 管理或凭证存储的 Go 代码时使用。涵盖 CWE-200/532/522/312/552。

0· 184·0 当前·0 累计
by @yhy0 (yhy)·MIT-0
下载技能包
License
MIT-0
最后更新
2026/3/14
安全扫描
VirusTotal
无害
查看报告
OpenClaw
安全
high confidence
这是一个仅提供指令的 Go 信息泄露模式审计辅助工具;其需求和指令与其声明的目的一致,不请求凭证或安装代码。
评估建议
此技能是一个离线的、仅提供指令的审计辅助工具,运行 grep 风格的检查并提供案例示例。它不安装代码或请求凭证,因此与其声明的目的相符。在安装/使用之前,请考虑:(1) 代理将扫描仓库文件并可能在输出中暴露真实密钥(API 密钥、令牌、证书)—— 将这些输出视为敏感数据;(2) 仅对您允许代理检查的代码库运行此技能;(3) 手动审查结果(该工具产生候选问题,可能存在误报);(4) 如果为具有广泛仓库访问权限的代理启用自动调用,请注意该技能可能会被自动调用来扫描这些仓库—— 根据需要限制代理权限。...
详细分析 ▾
用途与能力
名称/描述(Go 信息泄露审计)与 SKILL.md 内容一致:搜索 %+v、JSON 序列化、K8s Secret 使用、错误消息和 CRD status 等模式。不请求无关的二进制文件、环境变量或网络端点。
指令范围
运行时指令是基于 grep 的检测模式、检查清单和手动代码审查的案例研究。这些操作适用于审计源代码。注意:指令指示扫描仓库文件并将就地识别密钥(这对于此目的是预期的)。
安装机制
没有安装规范,除文档外没有代码文件;最低风险形式(仅指令)。技能本身不会下载或写入磁盘任何内容。
凭证需求
该技能声明没有环境变量、凭证或配置路径。检查清单识别敏感模式,但不请求密钥或外部令牌—— 与声明的审计目的相称。
持久化与权限
always:false 和正常模型调用设置。该技能不请求持久性/系统级权限或修改其他技能的配置。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv0.1.02026/3/14

go-vuln-info-disclosure 初始发布,一个 Go 信息泄露审计指南。提供检测策略和 grep 模式,用于在 Go 代码中查找 CWE-200/532/522/312/552。包含审计日志、API 响应、struct 序列化、K8s Secret 处理和错误消息的综合检查清单。提供排除常见误报的指导,并突出显示真实世界风险案例(如 Argo CD/Rancher secrets)。建议保护措施,包括脱敏、正确的 struct 标签和响应 DTO 使用。

● 无害

安装命令 点击复制

官方npx clawhub@latest install go-vuln-info-disclosure
镜像加速npx clawhub@latest install go-vuln-info-disclosure --registry https://cn.clawhub-mirror.com

技能文档

当审计 Go 代码中涉及日志记录、错误处理、API 响应、K8s Secret 管理、凭证存储时加载此 Skill。

Detection Strategy

Sources(敏感数据来源):

  • Kubernetes Secret 对象(v1.Secret.Data
  • 数据库凭证(database/sql 连接字符串)
  • API token / OAuth credential(struct 字段)
  • TLS 证书私钥
  • 环境变量中的密钥(os.Getenv("API_KEY")
  • Git 仓库 URL 中的认证信息(https://user:token@github.com

Sinks(泄露出口):

  • log.Printf("%+v", configStruct) -- %+v 格式化输出所有字段包括密钥
  • logrus.WithFields(logrus.Fields{...}).Error() -- 结构化日志中包含敏感字段
  • zap.Any("config", struct) -- zap 日志序列化完整结构体
  • HTTP API 响应 body(json.Marshal(objectWithSecrets)
  • K8s API 对象的 .status / .spec 字段
  • 错误信息(fmt.Errorf("failed to connect: %v", err))中的连接字符串
  • runtime.Stack() 输出包含参数值

Sanitization(数据保护措施):

  • Struct field tag json:"-" -- JSON 序列化时忽略字段
  • String() / MarshalJSON() 方法 -- 自定义序列化隐藏敏感字段
  • Log scrubbing 中间件 -- 过滤日志中的敏感模式
  • K8s Secret stringData -> base64 data 转换
  • Error wrapping(fmt.Errorf("connection failed: %w", ErrGeneric))-- 隐藏内部细节

检测路径:

# 格式化输出 struct
grep -rn '%+v\|%#v' --include=".go"

# 日志中可能的敏感信息 grep -rn 'log\.Print\|logrus\.\|zap\.\|logger\.' --include=".go" | grep -i 'secret\|password\|token\|credential\|key'

# JSON 序列化 — 检查是否有 json:"-" tag grep -rn 'json:"-"' --include=".go"

# K8s Secret 操作 grep -rn 'v1.Secret\|corev1.Secret\|StringData\|\.Data\[' --include=".go"

# 错误信息中的敏感信息 grep -rn 'fmt.Errorf\|errors.New\|errors.Wrap' --include=".go"

# Git URL with credentials grep -rn 'https://.:.@\|git.token\|git.password' --include=".go"

# API 响应 grep -rn 'json.Marshal\|json.NewEncoder.Encode' --include=".go"

  • 搜索敏感数据的定义位置(Secret struct、credential 字段、token 变量)
  • 追踪数据流向,检查是否流入日志、API 响应、错误信息
  • 验证是否有保护措施:
- 包含密钥的 struct 是否有 json:"-" tag? - 日志是否使用了 scrubbing/redaction 过滤? - API 响应是否使用专门的 DTO(而非直接返回内部对象)? - K8s Secret 是否在 CRD status 中被明文暴露? - 错误信息是否包含连接字符串或堆栈追踪?
  • 若敏感数据可能泄露 -> 标记为候选漏洞

Detection Checklist

  • [ ] %+v 格式化审计 (CWE-532):fmt.Sprintf("%+v", struct)log.Printf("%+v", struct) 是否会输出包含密码/token 的 struct 字段?%+v 会打印所有字段名和值。
  • [ ] K8s Secret 明文存储审计 (CWE-312):Secret 值是否作为明文存储在 CRD 的 .spec.status 字段中?CRD status subresource 的 RBAC 通常比 Secret 宽松,任何有 CRD read 权限的用户都能读取 status 中的凭证。修复方式:凭证应存储在 K8s Secret 对象中,CRD status 仅引用 Secret 的名称(如 secretRef: my-backup-credentials)。Rancher 的 cluster template answers 曾直接存储 cloud credential。
  • [ ] API 响应中的凭证字段审计 (CWE-200):API endpoint 返回的 JSON 是否包含 passwordtokensecret 等字段?是否使用独立的 response DTO 而非直接 Marshal 内部对象?
  • [ ] Argo CD Cluster Secret 泄露审计 (CWE-532):Argo CD 的 cluster details API 是否在日志或响应中暴露了 cluster secret(kubeconfig、bearer token)?
  • [ ] Git URL 凭证泄露审计 (CWE-522):Git clone URL 中是否包含 https://user:token@host 格式的认证信息?该 URL 是否出现在日志或错误信息中?
  • [ ] 错误信息堆栈追踪审计 (CWE-200):生产环境的 HTTP error response 是否包含 runtime.Stack() 输出或内部文件路径?Go 的 panic recovery 中间件是否向客户端暴露了堆栈?
  • [ ] json:"-" 缺失审计 (CWE-200):包含敏感字段(Password, Token, SecretKey)的 struct 是否为敏感字段添加了 json:"-" tag?未标记的字段在 json.Marshal 时会被包含。
  • [ ] JWT Claims 未验证 Audience 审计 (CWE-200):Argo CD 风格的 JWT 信任——启用匿名访问时是否盲目信任 JWT claims?攻击者是否能通过伪造 JWT 获取敏感信息?

False Positive Exclusion Guide

以下模式不是此类漏洞:

  • Debug 级别日志中的详细信息 -- 如果 debug 日志仅在开发环境启用且不会出现在生产日志中
  • json:"-" 用于内部 RPC struct -- 仅在服务内部使用的 struct 不需要隐藏字段
  • 错误信息中的操作描述 -- "failed to create user" 不包含敏感数据
  • 测试代码中的 mock Secret -- _test.go 中使用假密钥

以下模式需要深入检查

  • json.Marshal(clusterObject) -- 集群对象是否包含 kubeconfig 或 bearer token 字段?
  • logrus.WithError(err).Error("operation failed") -- err 中是否包含连接字符串或凭证?
  • CRD 的 status subresource -- status 通常有较宽松的 RBAC,其中的敏感数据更容易被低权限用户读取
  • Rancher API 的 answers 字段 -- cluster template 的 answers 可能包含 cloud provider credentials

Real-World Cases

详见 references/cases.md(7 个真实案例,需要时加载)。

数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制

免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制

了解定制服务