Skip to content

[code-review] secretdetect misses ENCRYPTED PRIVATE KEY variant (high); display_redact truncated-PEM pattern over-masks literal PEM discussion (medium) #3084

Closed

Description

@topcheer

初筛 sa-203 + 独立复核 sa-206 确认。#3081 修复验收中发现的两个残留面。

V2: secretdetect 检测层 PEM 头缺 ENCRYPTED 变体 — high

internal/security/secretdetect.go(逐字):

Pattern: regexp.MustCompile(`-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----`),

前缀枚举无 ENCRYPTED 。-----BEGIN ENCRYPTED PRIVATE KEY-----(openssl pkcs8 -topk8 加密私钥标准格式)不命中:可选组各前缀均非 "ENCRYPTED",省略组又要求紧跟 "PRIVATE KEY"。

  • 兜底排查:secretdetect.go / display_redact.go 全文无 "ENCRYPTED";generic_api_key_assignment 等通用模式不覆盖裸 PEM 块——无兜底,漏检成立
  • 对比:显示层 private_key 模式前缀类 [A-Z ]* 恰好覆盖 ENCRYPTED——检测不告警、显示却遮蔽,检测/显示再次 drift
  • 修复:前缀组加 ENCRYPTED (或与显示层对齐为 [A-Z ]*),zz 测试断言 ENCRYPTED 形态触发 high finding

V1: display_redact private_key_truncated 无终止锚,字面讨论文本整段遮蔽 — medium

internal/security/display_redact.go(#3082 引入,逐字):

{"private_key_truncated", regexp.MustCompile(`(?s)-----BEGIN (?:[A-Z ]*)PRIVATE KEY-----.+`), []string{"-----BEGIN"}},

无捕获组 → 单组分支对整个 match((?s) 下 BEGIN 到文末)maskValue。教学/文档文本字面提及 -----BEGIN PRIVATE KEY----- 且无 END 行时(如 PEM 格式说明),从该行到文末全部压成首4尾4+星号——长文本显示实质破坏。纯显示层不改数据,注释自述"masks to end of buffer"为截断流防泄漏的有意设计,但对字面讨论场景权衡过宽。

  • 修复建议:裸头后要求跟疑似 base64 体才触发(如 -----BEGIN...-----\s*[A-Za-z0-9+/=]{20,}),或限制遮蔽长度上限。

顺带(裁定不立案)

Activity

  1. topcheer commented on Oct 2, 2026

    @topcheer
    OwnerAuthor

    修复 PR:#3085(分支 fix-3084-pem,commit b006f52)。V2 前缀枚举加 ENCRYPTED;V1 truncated 模式加 base64 体门控。zz_issue3084_test.go 2 组断言,internal/security 全绿。待验收。

  2. added a commit that references this issue on Oct 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions