fix: secret scan flagged every on-chain proof artifact as a private key - #100
Closed
celesteanglm wants to merge 1 commit into
Closed
fix: secret scan flagged every on-chain proof artifact as a private key#100celesteanglm wants to merge 1 commit into
celesteanglm wants to merge 1 commit into
Conversation
The first backfill dry run had the reviewer tell PR #95 that raw private keys were committed, calling it a hard blocker and suggesting a git-history rewrite. All six hits were false positives: 0x94fa44b1... EAS attestation UID, inside a public easscan.org URL 0x740e289a... EAS schema UID 0x82e3fd52... Basescan settlement transaction hash 0xdb8b92ee... deliverableHash 0x41707072... hex-encoded ASCII, literally the word "Approved" The pattern was /0x[a-fA-F0-9]{64}/, which is the shape of a private key and equally the shape of a transaction hash, attestation UID, block hash or content hash. Those are the entire point of this repo, so matching on shape alone flags every genuine proof artifact — a ~100% false-positive rate on exactly the content a showcase submission is expected to contain. Posting that would have falsely accused a contributor of leaking a key. - require key-ish wording (private key, privkey, secret key, seed phrase, mnemonic) near the value, and stand down when the value sits inside a URL or the surrounding text names a public identifier (tx, hash, uid, attestation, schema, deliverable, ...) - tighten the PRIVATE_KEY and mnemonic patterns to require a key-shaped value rather than any assignment - tell the model in the prompt that this scan is an unverified heuristic, to check the actual value before mentioning it at all, and if it does raise one, to ask the author to confirm rather than assert a leak — and never to recommend rewriting history Verified: PR #95 now yields zero hits; a PRIVATE_KEY assignment, a key introduced as "private key", and a 12-word mnemonic are all still caught; and tx hashes, attestation UIDs, schema UIDs, deliverable hashes and URL-embedded identifiers all stay silent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Collaborator
Author
|
Closed per maintainer decision — not merging this for now. For the record: with this unmerged, |
This was referenced Aug 3, 2026
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.
What happened
The first backfill dry run (
pr_numbers: all,dry_run: true) had the reviewer tell PR #95:All six hits were false positives. What they actually were:
0x94fa44b1…easscan.orgURL0x740e289a…0x82e3fd52…0xdb8b92ee…deliverableHash0x41707072…Why
The pattern was
/0x[a-fA-F0-9]{64}/. That is the shape of a private key and the shape of a transaction hash, attestation UID, block hash, or content hash — indistinguishable. Those artifacts are the entire point of a showcase submission, so matching on shape alone gives roughly a 100% false-positive rate on exactly the content this repo exists to collect.Caught only because the backfill was dry-run first. Posting it would have falsely accused a contributor of leaking a key.
Fix
private key,privkey,secret key,seed phrase,mnemonic) near the value; stand down when the value is inside a URL or the surrounding text names a public identifier (tx,hash,uid,attestation,schema,deliverable, …).PRIVATE_KEY/ mnemonic patterns to require a key-shaped value, not any assignment.Verification
PRIVATE_KEY=0x…, a key introduced as "private key: 0x…", a 12-word mnemonicdeliverableHash, URL-embedded identifiersMerge this before posting any reviews
The backfill has only ever run in dry-run mode, so nothing was published. This should land before
dry_run: false.🤖 Generated with Claude Code