Skip to content

vuln-scanner: prior-art check + verification block before public filing - #29

Merged
Svector-anu merged 7 commits into
mainfrom
feat/vuln-scanner-prior-art-check
Aug 9, 2026
Merged

vuln-scanner: prior-art check + verification block before public filing#29
Svector-anu merged 7 commits into
mainfrom
feat/vuln-scanner-prior-art-check

Conversation

@Svector-anu

Copy link
Copy Markdown
Owner

fixes the gap that let tafia/calamine#705 land as a duplicate of aeonfun#696 last week.

  • checked every other skill that files/creates something externally or internally (create-skill, search-skill, skill-repair, repo-scanner, feature) - all already gate on "does this exist already." vuln-scanner never got it, and it's the one skill filing into repos with zero history.
  • adds a prior-art check before any public PR/issue: one gh search call against the target's own open+closed+merged issues/PRs, keyed on the exact function/symbol name, judged not just counted. verified against the real calamine case before writing this - one call surfaces chore(scripts): remove 2 dead scripts; wire validate-config into CI aeonfun/aeon#696 and the original bug report fix(workflow): don't fail Commit/cron steps on a non-main-ref dispatch aeonfun/aeon#694, in that order.
  • adds a required "Verification" block (repro command, before/after, environment) for any public filing that isn't a plain CVE lockfile bump, so a maintainer can confirm a finding fast instead of re-deriving it.
  • dropped the "Filed by Aeon" footer from the PR template - no branding in something a maintainer is trying to verify.

single file: skills/vuln-scanner/SKILL.md.

Svector-anu and others added 7 commits August 8, 2026 07:36
Ran Trident stateful fuzzing per the bug-hunt playbook's step-1 tool
priority. Key finding: every fund-moving instruction is gated by
Groth16 proof verification before any state mutation, and the circuit/
proving-key artifacts are intentionally excluded from the repo — so no
fuzzer can forge a valid proof to reach the nullifier/merkle/vault
logic. Fuzzed the reachable non-proof-gated admin surface instead
(~100k instruction invocations, 0 panics, 0 invariant violations).

- memory/vuln-scanned.json: new scan entry with full methodology/results
- memory/topics/veilo-bug-hunt-playbook.md: scoping finding + reusable
  toolchain notes (deref_nullptr lint fix, trident fuzz run CWD
  requirement, TridentSVM signature-verification behavior)
- memory/logs/2026-08-08.md: run log

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLaHamXr14e2qDnNNd5gnS
Corrected course from ad-hoc cargo tooling to a plain git compare
against the last-audited commit, which surfaced that the clone was 3
commits ahead of every prior pass. Of those: one docs fix, one trivial
config change, and one is the Veilo team's own hardening commit for
exactly the close_position gap the 2026-07-31 scan had flagged as a
non-exploitable observation — corrected the playbook's framing to
credit that as their fix, not an independent finding.

Re-ran Aeon's actual vuln-scanner Arm A stack (osv-scanner, semgrep,
trufflehog — see scripts/prefetch-vuln-scanner.sh) fresh against
current HEAD: still 0 new findings. Still 0 confirmed exploitable bugs
overall after 5 manual passes, a Trident fuzz campaign, 2 targeted
manual sweeps, and this diff-and-rescan pass.

- memory/vuln-scanned.json: new scan entry, corrected framing
- memory/topics/veilo-bug-hunt-playbook.md: git-diff-first lesson +
  sanctioned-stack results
- memory/logs/2026-08-08.md: run log

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLaHamXr14e2qDnNNd5gnS
… fuzzing

Ran the sanctioned Arm A stack (semgrep/trufflehog/osv-scanner) against
firecrawl/anydoc, then its own pre-built cargo-fuzz targets seeded from
its test fixtures.

- RUSTSEC-2026-0187 (public stack-overflow DoS, lopdf 0.41.0) is reachable
  through anydoc's PDF path via pdf-inspector 0.1.7. The fix exists
  upstream but was never released — filed firecrawl/pdf-inspector#310
  and firecrawl/anydoc#67 (cross-linked).
- The xlsx fuzz target crashed within seconds on a genuine, previously
  unknown integer-overflow panic in calamine 0.36.1's range parser.
  DoS-only (no memory-safety impact), root-caused, fixed with checked
  arithmetic matching the file's own existing convention, regression
  test added, verified against the exact crash artifact. Opened
  tafia/calamine#705.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLaHamXr14e2qDnNNd5gnS
ran the actual skill (POST /match with real capabilities, not a raw
bounty list dump). 25 matches, 13 already seen in the last 14 days
(veilo-bounty included, still open but not new), 12 new IDs all
triaged out as content/engagement work in disguise - none map to
real code/security/dependency work. no notification, per the skill's
own silence rule.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLaHamXr14e2qDnNNd5gnS
…ty triage

osv-scanner flagged 31 vuln rows across 10 packages, several looking
severe (better-auth account-takeover GHSAs, drizzle-orm SQL injection).
none survived tracing actual reachability: better-auth's vulnerable
copy is isolated to a devDependency CLI tool, never shipped to
production, while the real runtime dependency is already on the patched
version; drizzle-orm/hono/dompurify/mermaid have zero source-level
imports anywhere in the app and are dead transitive weight from an
unused better-auth adapter (this app actually uses prisma); sharp is
a plausible-but-unconfirmed lead, not filed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLaHamXr14e2qDnNNd5gnS
maintainer flagged it; aeonfun#696 predates mine by two weeks and is already
further along (reworked once per their feedback). closed aeonfun#705 rather
than making them choose between two PRs for the same bug. added the
lesson to memory: check a target's own open PRs/issues for the exact
bug class before filing, not just its advisory history.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLaHamXr14e2qDnNNd5gnS
…c filing

tafia/calamine#705 got closed as a duplicate of aeonfun#696 (predated ours by two
weeks, same root cause) - the maintainer had to catch it, we should have.
checked every other skill that files/creates something (create-skill,
search-skill, skill-repair, repo-scanner, feature) and all of them already
gate on "does this exist already" - vuln-scanner was the one skill in the
security pipeline that never got it, and it's the one filing into repos it
has zero history with.

adds:
- a prior-art check before any public PR/issue: one gh search call against
  the target's own open+closed+merged issues/PRs, keyed on the exact
  function/symbol name, judged (not just counted) before treating a hit as
  a duplicate. verified the mechanism against the real calamine case before
  writing this - one call surfaces aeonfun#696 and the original bug report aeonfun#694.
- a required "Verification" block (repro command, before/after, environment)
  for any public filing that isn't a plain CVE lockfile bump, so a
  maintainer can confirm a finding in under a minute instead of re-deriving
  it.
- dropped the "Filed by Aeon" footer from the PR template - branding has no
  place in a finding a maintainer is trying to verify.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DLaHamXr14e2qDnNNd5gnS
@Svector-anu
Svector-anu merged commit 75bd48b into main Aug 9, 2026
3 checks passed
@Svector-anu
Svector-anu deleted the feat/vuln-scanner-prior-art-check branch August 9, 2026 07:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant