security: bootstrap sscsb supply-chain controls, and retire a scanner that scanned nothing - #1
Open
p4gs wants to merge 2 commits into
Open
security: bootstrap sscsb supply-chain controls, and retire a scanner that scanned nothing#1p4gs wants to merge 2 commits into
p4gs wants to merge 2 commits into
Conversation
… that scanned nothing `sscsb init` installs 47 controls (32 enabled) — signed-commit policy, secret scanning at pre-commit/pre-push/CI, SBOM, vulnerability scanning, SAST, SLSA provenance, Scorecard, Renovate and the OpenSSF posture files. Four things needed deciding rather than accepting as generated. TruffleHog is the only credential-detection engine. `gitleaks = false` in .sscsb/config.toml, and the generated gitleaks CI job is removed so CI enforces the policy the config declares instead of contradicting it. TruffleHog verifies candidates against the issuing provider, so a finding is a live credential rather than a high-entropy string; a second, unverifying engine beside it adds false positives without adding detection. CodeQL now analyses this repo's actual source. The generated matrix is `["actions"]` — the only language sscsb can assume every repo has — and its own comment says CodeQL that does not read your source code is not analysing your source code. Added `javascript-typescript` for assets/js/site.js, the one executable file ALCOVE ships. The rest of the tree is HTML, CSS, SVG and woff2. Removed .github/workflows/semgrep.yml, which had been reporting success daily while analysing nothing. The workflow passes `SEMGREP_APP_TOKEN` from a secret that does not exist on this repository (`gh secret list` is empty), so every run since 2026-08-23 logged `run 'semgrep login' before using 'semgrep ci'` followed by "There were errors during analysis but Semgrep will succeed because there were no blocking findings" — and exited 0. Roughly twenty consecutive green runs, zero analysis. It was also the sole source of three sscsb verify failures: `actions/checkout@v4` on a mutable ref, no `persist-credentials: false`, and no harden-runner. Its replacement is already here and actually runs: OpenGrep (Semgrep-compatible, committed ruleset, no cloud token) plus CodeQL. Fixing the pinning would have left a workflow that still scanned nothing; a green check that cannot fail is worse than no check, because people trust it. Added SECURITY.md, which security-insights.yml referenced twice without it existing, and filled the generated REPLACE-ME placeholders. Approved signer recorded in .sscsb/policy/signers.toml is the 1Password-vaulted ed25519 key that already signs every commit here. It is declared `backend = "software"` and NOT hardware-backed, because it is a vaulted software key rather than a non-exportable secure element — sscsb keeps warning about that, correctly, and the warning is left standing rather than silenced with a false attestation. sscsb verify: 4 failed / 3 degraded before, 1 failed / 2 degraded after. The remaining failure is branch protection, which needs a repository ruleset that does not exist yet; `sscsb harden` can only update one, not create it. AI-Assisted: true AI-Tool: Claude Code AI-Model: claude-opus-5 AI-Role: draft Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017N6Qc2T7buVAXHZ9vYa1xm
`sscsb scan --local` at 91f0b0a, signed in the `sscsb-scan-record` namespace by the approved signer this repository commits in .sscsb/policy/allowed_signers. The record is a pointer the public directory reads from this repo, so both the JSON and its detached signature have to be tracked. It asserts the local result only. It is not evidence CI produced anything — where a control is observable from the repository, the directory requires an independent record to agree before the row counts. AI-Assisted: true AI-Tool: Claude Code AI-Model: claude-opus-5 AI-Role: draft Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017N6Qc2T7buVAXHZ9vYa1xm
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Bootstraps sscs-bootstrapper on ALCOVE: 47 controls installed, 32 enabled.
sscsb verifygoes 4 failed / 3 degraded → 1 failed / 2 degraded.Four things needed deciding rather than accepting as generated.
TruffleHog is the only credential-detection engine.
gitleaks = falsein.sscsb/config.toml, and the generated gitleaks CI job is removed so CI enforces the policy the config declares instead of contradicting it. TruffleHog verifies candidates against the issuing provider, so a finding is a live credential rather than a high-entropy string.CodeQL now reads this repo's actual source. The generated matrix is
["actions"]— the only language sscsb can assume every repo has — and its own comment warns that CodeQL which does not read your source code is not analysing your source code. Addedjavascript-typescriptforassets/js/site.js, the one executable file ALCOVE ships.Removed
.github/workflows/semgrep.yml, which had been green daily while analysing nothing. It passesSEMGREP_APP_TOKENfrom a secret that does not exist on this repository (gh secret listis empty), so every run since 2026-08-23 logged:…and exited 0. Roughly twenty consecutive green runs, zero analysis. It was also the sole source of three
sscsb verifyfailures (actions/checkout@v4on a mutable ref, nopersist-credentials: false, no harden-runner). Its replacement already runs here: OpenGrep (Semgrep-compatible, committed ruleset, no cloud token) plus CodeQL. Pinning it would have left a workflow that still scanned nothing — a green check that cannot fail is worse than no check, because people trust it.Added
SECURITY.md, whichsecurity-insights.ymlreferenced twice without it existing, and filled the generatedREPLACE-MEplaceholders.Why this is a PR and not a push to
mainThe pre-push gate requires
hardware_backed = trueon protected branches. The approved signer is the 1Password-vaulted ed25519 key that already signs every commit in this repo — a vaulted software key, not a non-exportable secure element — sosigners.tomlrecords it asbackend = "software"with no hardware assertion. Both commits here are signed and verifyGood.Relaxing that gate was deliberately not done. The honest options were a false
hardware_backed = trueattestation,--no-verify, or a documentedrequire_hardware_backed = false— and the third was blocked by the agent permission classifier, correctly, as a weakening of a security control. It is left for a human decision. See "Open items".Open items for the maintainer
verifyfailure.mainhas no ruleset: no required PRs, no force-push blocking, no required signed commits, no required status checks.sscsb harden branch-protectioncan only update an existing ruleset, not create one, and creating it is a repo-admin write. Needs a human.require_hardware_backed = false, documenting why), or provision a YubiKeyed25519-skand record it withhardware_backed = true. Until one of those, direct pushes tomainare blocked locally by design.signing-modeldegraded — thegithub-web,codespacesandcloud-claudelanes are attestations only a human can truthfully make (sscsb signing setup <lane> --confirm). Not fabricated here.scorecarddegraded — no published results yet. Resolves oncescorecard.ymlruns on the default branch, i.e. after this merges.AI Provenance Declaration
AI tool(s)/model(s) used (if any): Claude Code (claude-opus-5),
AI-Role: draftHuman review performed on AI-generated parts (what/how): Pending maintainer review. Every claim above is tool-verified rather than asserted: the Semgrep no-op is quoted from run 34686171235's own log, the empty secret list from
gh secret list, and the verify counts fromsscsb verifybefore and after.Dependency Changes
🤖 Generated with Claude Code
https://claude.ai/code/session_017N6Qc2T7buVAXHZ9vYa1xm