vuln-scanner: prior-art check + verification block before public filing - #29
Merged
Conversation
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
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.
fixes the gap that let tafia/calamine#705 land as a duplicate of aeonfun#696 last week.
gh searchcall 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.single file:
skills/vuln-scanner/SKILL.md.