Rob Hamilton spends $10k scanning Bitcoin projects, finds multiple vulns
stackernews-robhamilton-scanning
- Organisation
- Stacker News
- Evidence role
- Community discussion
- Published
- 2026-08-03
- Source changes
- 0
- Detected differences
- 1
- Unreviewed
- 0
- Copies held
- 2
Scoresby on Rob Hamilton spending $10k scanning Bitcoin projects and finding multiple vulnerabilities, with the poster noting Hamilton's AnchorWatch markets a related service. The disclosure of that conflict in the thread itself is part of the record. Captured through the site's public GraphQL API: the rendered pages crash the capture tab, and the API answers POST from this host. The query fixes the captured surface to the item's title, text and two levels of comments, each with author and absolute timestamp.
Every check is recorded, including checks that found no text change. A detected edit is therefore bounded between two checks. The publisher's exact save time is not observable from this record. Last checked .
This post is held twice: here, with this project's own note on why it matters, and again as part of the conversation captured at , which is polled for changes. Both copies are the same post; neither is a separate event.
Snapshot and diff bodies for this chain monitor are held in the local evidence archive but withheld from the public site because they can contain the addresses of people who published nothing themselves. Capture times and reviewed change summaries remain available below.
Held captures
-
Recovered from the Internet Archive rather than captured by this project. The row records that third-party provenance separately from captures made by this project.
What changed from the previous capture 0 lines
Extracted text as captured
{ "data": { "item": { "comments": { "comments": [ { "createdAt": "2026-08-03T13:07:43.809Z", "text": "> Rob seems like a pretty cool guy, but he is also really, really good at marketing\n\nI'm so tired of the \"we found vulns, but we're not gonna tell you anything except we found it\" gimmick", "user": { "name": "SimpleStacker" } }, { "createdAt": "2026-08-03T14:20:25.061Z", "text": "Odell and Bent know now's not the time to pump their own book, but Rob is a nice, smiling fresh faced surrogate. Has he NOT been on any podcasts the past few days? He's ticked all the boxes. Pomp is waiting", "user": { "name": "siggy47" } }, { "createdAt": "2026-08-03T15:36:27.618Z", "text": "Is it possible to self-host anchorwatch? Seems like it's just a daemon that checks a PSBT before automatically signing it in a multisig.\n\nWhat if I don't want a third-party key holder but I still want to restrict spending without covenants? And I don't care about insurance?", "user": { "name": "nullcount" } }, { "createdAt": "2026-08-03T12:57:00.513Z", "text": "https://twiiit.com/Rob1Ham/status/2084140242915782743", "user": { "name": "nitter" } }, { "createdAt": "2026-08-03T15:48:03.697Z", "text": "Worth calibrating what this kind of scanning buys, because the Coldcard bug is a useful negative example and the vendor said so themselves.\n\n**Their own AI-assisted review, weeks earlier, missed it.** That is in Coinkite's technical backgrounder, and they were blunt about it: both sides have the same tools, and this time it helped the attacker and not them. So \"AI scanning finds vulns\" and \"AI scanning would have found *this* vuln\" are different claims, and the second one has already been tested and failed.\n\n**Why this particular bug is scanner-resistant.** Read the wallet's own source and you see a call to a random-bytes function from a crypto library. It looks correct. It *is* correct as written. The defect is which implementation that name binds to at build time — `ngu.random.bytes()` resolving to MicroPython's software fallback instead of the hardware RNG, inside a submodule. The vendor's phrasing: the PRNG \"is from a submodule that I didn't know was actually in the source code base.\"\n\nA scanner pointed at the application repo sees correct code, because the code *is* correct. The bug lives in the resolution, one layer down, in a dependency nobody listed as security-critical.\n\n**And the output gives you nothing.** This is what makes RNG bugs a category of their own. Feed well-seeded and badly-seeded CSPRNG output into dieharder, NIST STS, any entropy estimator — both pass. A PRNG's entire job is producing output that looks random. There is no test on the bytes that separates 40 bits of real entropy from 256.\n\n**What the $10k does buy**, and it is genuinely worth having: memory safety, injection, auth logic, key handling mistakes visible in the code under review. That is a real class and real money saved. I am not dismissing it.\n\n**What actually catches the Coldcard class** is runtime instrumentation, not review: a boot self-test that asserts the TRNG was *read* during seed generation and fails loudly if it contributed nothing. That is a different discipline, rarely commissioned, and nobody sells it as a scanning product because it requires the device.\n\n**And the user-side version of the same idea**, which is why I keep repeating it: dice. `printf '<rolls>' | sha256sum` compared against the entropy hex the device displays proves your rolls were used and nothing else. It does not test the RNG — that is impossible from outside — it removes the RNG from the trust chain. That works whether or not anyone audited anything.\n\nOn the marketing point in the post: probably fair, and it can be simultaneously true that he is good at promotion and that the scanning is worth doing. The thing to be skeptical of is not the service, it is the inference that this class of tooling would have caught the thing that just happened. The vendor already ran that experiment.", "user": { "name": "b6fec473d4" } },Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
1 presentation-noise difference. Sidebar, ticker and other page chrome churn that our review classified as not being a change to what the source says.
- +7 -7 The GraphQL response reordered an existing comment without changing its text.
The excerpts and plain unified diffs above show the text this project held and how it changed. To verify a quotation, compare it against the page itself or against the Internet Archive's copies, which are independent of this project.
Complete captures are held offline rather than mirrored here, so this page shows diffs and excerpts. If a quotation is ever disputed, the full copy can be produced. Ask.
Compare the screenshot or a quotation against the original while it is available.