Skip to content

fix(ci): pin qualified TruffleHog runtime image - #272

Merged
joshavant merged 1 commit into
mainfrom
fix/pin-qualified-trufflehog-image
Oct 25, 2026
Merged

joshavant merged 1 commit into
mainfrom
fix/pin-qualified-trufflehog-image

Conversation

@joshavant

@joshavant joshavant commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

The pinned TruffleHog action defaults to latest, so an older cached scanner image can be reused. Select the qualified 3.99.4 runtime image through the action’s existing version input; retain its pinned source, scan range, verification flags and failure gate.

Both canonical Linux image payloads match the official release binaries and retained Go1.27.3 build metadata. Focused isolated validation covers the ARM image’s actual entrypoint and extracted AMD64 image binary: 14 incident endpoints using ARM image defaults/explicit old CA and AMD64 explicit image CA/old CA, legitimate public/private HTTPS, hostname/untrusted controls, and the expected git-scan exit183 for a synthetic verified credential. The AMD64 binary runs in a full-system x86_64 guest under QEMU TCG; this is functional proof, not a hardware/timing claim.

All workflows pass actionlint1.7.12, diff-check passes, and independent P0–P3 review is scoped-clean. Actual GitHub AMD64 container execution remains PR-CI evidence. This does not qualify every built-in detector, external Git/SSH transport or installed fleet; the normal upstream version tag remains mutable. No release or deployment was run.

Retained product observations and actual hosted image selection

Field-preserving projections below omit only paths/addresses and synthetic marker contents. Default unknown-issuer is distinguished from explicit-old-store no-valid-chains. The actual hosted AMD64 composite pulled the same captured image index and completed normal secret scanning; it did not execute the incident fixture. Other transport/detector/platform limits above remain.

{
  "imageIndexSHA256": "bf9238f5bdf26ac28230d4b0bae5162a752b151bf10bea612dad7a62da938731",
  "armActualImageEntryPointELF": "b57ff51268b83496fd58889b252e61549cd1071467aed4f4706b1df53ec13150",
  "observedOutputProjection": [
    {
      "label": "incident-00-default",
      "exit": 0,
      "timeout": false,
      "elapsedSeconds": 1.7013239860534668,
      "findings": [
        {
          "DetectorName": "CustomRegex",
          "Verified": false,
          "VerificationError": "x509: certificate signed by unknown authority",
          "VerificationFromCache": false
        }
      ],
      "rawStderrSHA256": "b7893489e08cd7e4f2a059f5797cbb2c3c7a42d41e3e9dbca0be84207896775e"
    },
    {
      "label": "incident-00-oldCA",
      "exit": 0,
      "timeout": false,
      "elapsedSeconds": 1.6995091438293457,
      "findings": [
        {
          "DetectorName": "CustomRegex",
          "Verified": false,
          "VerificationError": "x509: no valid chains built",
          "VerificationFromCache": false
        }
      ],
      "rawStderrSHA256": "7472876e613798eb505200da3102d2382afca8c8ff741caac675059f2c42abc2"
    },
    {
      "label": "private-CA",
      "exit": 0,
      "timeout": false,
      "elapsedSeconds": 1.3892931938171387,
      "findings": [
        {
          "DetectorName": "CustomRegex",
          "Verified": true,
          "VerificationFromCache": false
        }
      ],
      "rawStderrSHA256": "6cf40395b7f753746fb704d623733803afda264b460d034e7b741ba075b91fc5"
    },
    {
      "label": "private-untrusted",
      "exit": 0,
      "timeout": false,
      "elapsedSeconds": 1.3877675533294678,
      "findings": [
        {
          "DetectorName": "CustomRegex",
          "Verified": false,
          "VerificationError": "x509: certificate signed by unknown authority",
          "VerificationFromCache": false
        }
      ],
      "rawStderrSHA256": "36ea4d7ad2f44d2e1234452c35bac6d75d0001022ea82d1db30ac2950686dd51"
    },
    {
      "label": "git-verified-gate",
      "exit": 183,
      "timeout": false,
      "elapsedSeconds": 1.4629900455474854,
      "findings": [
        {
          "DetectorName": "CustomRegex",
          "Verified": true,
          "VerificationFromCache": false
        }
      ],
      "rawStderrSHA256": "948bcb0602fbdd61a2479d3653e9ab92da7e56b7b7f524548f5e22b0309ce422"
    },
    {
      "label": "git-unverified-control",
      "exit": 0,
      "timeout": false,
      "elapsedSeconds": 1.459975004196167,
      "findings": [],
      "rawStderrSHA256": "91a3fbd4d0822a73e371daed85be27dec162faf0e918d872e8382df8d8579a82"
    }
  ],
  "hostedAMD64Composite": {
    "run": "https://github.com/openclaw/gitcrawl/actions/runs/40027780355/job/120668186343",
    "observedImageDigest": "sha256:bf9238f5bdf26ac28230d4b0bae5162a752b151bf10bea612dad7a62da938731",
    "version": "3.99.4",
    "verifiedSecrets": 0,
    "rawLogSHA256": "9f9cbed8aa241cd1817ef3dc7d647052bef7346a04ad492a752ed5612250ee82",
    "scope": "normal composite execution from the captured qualified image index; this job did not run the incident fixture"
  }
}

@joshavant
joshavant requested a review from a team as a code owner October 23, 2026 21:34
@clawsweeper

clawsweeper Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. P2 Normal priority bug or improvement with limited blast radius. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 23, 2026
@clawsweeper

clawsweeper Bot commented Oct 23, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge.

What this changes

This PR selects TruffleHog runtime image 3.99.4 through the pinned action’s existing version input.

Example: The secret-scanning runner already has a locally cached latest image.

  • Before: The action requests ghcr.io/trufflesecurity/trufflehog:latest and can reuse that cached image.
  • After: The action requests ghcr.io/trufflesecurity/trufflehog:3.99.4.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The patch is focused and correct; successful production-workflow steps support execution, while detailed qualification remains a prose report rather than inspectable output.
Proof confidence 🦐 gold shrimp (3/6) The supplied maintainer-authored classification exempts ordinary contributor proof; exact-head GitHub jobs confirm successful execution of the changed scanner step, while the body reports additional isolated qualification without attached traces.
Patch quality 🦞 diamond lobster (5/6) No actionable review findings were identified.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: Security scans can reuse an older cached scanner despite an updated action source.
Reason: The maintainer-authored direction supplied in the review context uses an existing upstream input and preserves the security gate’s contract.

Merge readiness

✅ Ready for maintainer review

Keep open: this PR makes a focused runtime-version repair that current main lacks, and no actionable patch defect was found.

Priority: P2
Reviewed head: 477b32f8f03608d354ed38917c46d7fde9d9f3ec

Before merge

None.

Findings

None.

Agent review details

How this fits together

GitHub push and pull-request events provide a commit range to the security workflow, which runs TruffleHog and fails when verified credentials are detected.

flowchart TD
  A[Push or pull request] --> B[Resolve commit range]
  B --> C[Pinned TruffleHog action]
  C --> D[Runtime image 3.99.4]
  D --> E[Scan and verify credentials]
  E --> F[Workflow result]
Loading

Technical review

Best possible solution:

Use the existing version input to select the qualified runtime while preserving the established scanning gate.

Do we have a high-confidence way to reproduce the issue?

The pinned upstream action defaults to latest and invokes docker run without forcing a pull, establishing the cached-image reuse path without executing target code.

Is this the best way to solve the issue?

The single existing input is the smallest complete fix for explicit runtime selection; it does not claim immutable image identity.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 440c46c04877.

Provenance checked

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • Vincent Koc: Raw commit a4ab91b adds .github/workflows/secret-scan.yml:23 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: a4ab91b035da; files: .github/workflows/secret-scan.yml)
  • Peter Steinberger: Raw commit f80cc94 adds .github/workflows/secret-scan.yml:19 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: f80cc94dcdbd; files: .github/workflows/secret-scan.yml)

Labels

Label changes:

  • add P2: Explicit scanner-version selection improves a repository security gate with a narrow change and no demonstrated urgent workflow outage.
  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Label justifications:

  • P2: Explicit scanner-version selection improves a repository security gate with a narrow change and no demonstrated urgent workflow outage.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed October 23, 2026, 5:47 PM ET / 21:47 UTC.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant