Raxx · internal docs

internal · gated

RCA — ci-boundary gitleaks step scans only 1 commit despite depth: 0; no persisted findings

Incident ID: 2026-08-12-ci-boundary-gitleaks-scan-scope Date: 2026-08-12 Severity: SEV-3 (security-scanning control produced unreliable signal; ci-boundary is a post-merge advisory check, not a deploy gate — no user-facing or deploy-blocking impact, but the scan's trustworthiness was compromised since introduction) Duration: Latent defect — present since ci-boundary.yaml's Wave A port (issue #4016); first observed release-2026.08.09 (WP pipeline #5095), root-caused and fixed 2026-08-12. Blast radius: ci-boundary WP pipeline (push to release/main only — advisory security scan, not a deploy-staging/deploy-prod gate). No production traffic, no deploy blocked. Confidence in every historical ci-boundary gitleaks scan result is reduced retroactively (each was scanning ~1 commit, not the intended full history). Author: sre-agent

Summary

.woodpecker/ci-boundary.yaml's gitleaks step logged INF 1 commits scanned on the release-2026.08.09 push (WP pipeline #5095) despite the clone step declaring depth: 0 (full history, per the file's own comment). Root cause: WP's woodpeckerci/plugin-git defaults partial: true on every non-tag event, and per the plugin's own documentation, partial "overwrite[s] depth with 1" — silently downgrading the declared full-history clone to a single-commit fetch. Additionally, no itemized finding detail (file/rule/ commit) was persisted anywhere once the WP step log's summary line was written — a "leaks found: N" result was unactionable without a manual local re-run. Both gaps are fixed in the same change: partial: false added to the clone config, and the gitleaks step now writes a redacted JSON report persisted as an S3 build artifact on every run (pass or fail).

Timeline (all times UTC)

Impact

What went well

What didn't go well

Root cause analysis

Detection

Resolution

Action items

# Action Owner Due Issue
1 Run terraform apply for infra/ci/ci-artifacts.tf (new raxx-ci-boundary-gitleaks-report-writer-ci IAM user + S3 policy/lifecycle), mint AWS keys via scripts/ops/secrets/mint_ci_aws_keys.sh, write to vault /MooseQuest/aws/ci-boundary/gitleaks-report-writer/ operator 2026-08-19 #4464 (tracked as PR follow-up, no new issue needed)
2 Confirm corrected N commits scanned and successful artifact upload on the next live push-triggered ci-boundary run (post-merge, next release/main push) sre-agent 2026-08-26 #4463 / #4464 (close out AC5 on live verification)
3 Audit migration-collision-check.yaml and security-scan-nightly.yaml for the same depth: 0 without partial: false gap; add partial: false (or confirm event type makes it a no-op) where full history is actually required sre-agent 2026-08-26 #4481
4 Consider a lightweight in-pipeline sanity check (e.g. compare N commits scanned in gitleaks output against git rev-list --count HEAD and warn/fail on large mismatch) to catch a future clone-scope regression without relying on manual review sre-agent (proposal only — needs operator design sign-off before implementation) 2026-09-09 #4483

References