Repository navigation
fix(reporting): redact imported secret evidence - #1423
seonghobae wants to merge 1 commit into
Conversation
Normalize untrusted finding envelopes through one report-safe boundary. Redact nested fields and keys, authorization/credential/provider forms, multiline and escaped delimiters, and source-aligned truncated snippets. Preserve IssueOps compatibility and add downstream regression coverage for all reports, SARIF, and control-plane persistence.
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Exact-head Checks RCA — 2026-10-09PR head
어떤 source step, test, scanner도 실행되지 않았으므로 이 결과는 코드 failure나 security verdict가 아닙니다. exact billing/admission 원인은 이 응답만으로 확정하지 않고 중앙 owner ContextualWisdomLab/.github#2356에 연결했습니다. 원인 변화 없는 blind rerun, gate 약화, Ready 전환, merge는 하지 않습니다. 동일 head에서 실행 가능한 receipt와 qualifying current-head review가 필요합니다. |
상태
Draft / Proposed입니다. 보호된
develop병합·릴리스 증거가 아니며, exact-head Checks와 현행-head 승인이 충족되기 전에는 merge하지 않습니다.develop@2949d30718752ea5915c7713ba227e8c19d9e5bf5150cd79be921550e838b08bbec560052379e7971369cf3670283dab819d0757843b82ff3f463eb71369cf3670283dab819d0757843b82ff3f463eb7(remote tree와 동일)Root cause
normalize_finding()은 외부/가져온 finding의 전체 envelope를 신뢰하면서 snippet을 길이 제한만 했습니다. built-in scanner의 선행 redaction과 달리 report ingestion 경계에는 일관된 비밀 억제 계약이 없어서 다음 경로가 raw evidence를 직렬화할 수 있었습니다.Preconditions / observable signals
재현 조건은 신뢰되지 않은 finding 또는 job log에 다음 중 하나가 포함되는 경우입니다.
category=secrets또는 실제 secret disclosure semantics를 가진 rule의 opaque snippetline객체의 후행 문자열 변환snippet_max_len경계를 가로지르는 provider token관찰 신호는 raw token/opaque credential이 report/SARIF/control-plane JSON에 그대로 남는 것입니다.
Repair
sk-proj/sk-svcacct, multiline·escaped delimiter를 처리합니다.line은 bounded positive integer로만 정규화합니다.issueops.SECRET_RE호환 동작을 유지합니다.Gate를 억제하거나 finding을 숨긴 것이 아니라, raw credential payload만 report-safe evidence로 변환합니다.
Regression corpus / TDD
수정 전 successive RED rounds에서 3, 20, 9, 11, 13, 4개 adversarial failure를 재현했습니다. 회귀에는 다음 downstream surface가 포함됩니다.
최종 동일 tree 검증:
appguardrail_core/findings.py: 237/237appguardrail_core/redaction.py: 89/89appguardrail_core/issueops.py: 193/193python3 -m compileall -q appguardrail_core: passgit diff --check: pass5f376acffaae469ea4fb807b34459054f302725a67535f348ef6491edf27bc0fFP / FN boundary
Follow-up
이 PR의 exact-head workflow/run/job을 직접 확인하고, 실행되지 않은 runner/admission failure는 source failure와 분리해 중앙 owner에 연결합니다. 보호 브랜치 통합 후에만 release/consumer claim을 갱신합니다.