COLDCARD vulnerability what happened, and what to do
Informational only, and this site never asks for your recovery words. details

Informational only. This is independent analysis and an evidence-backed explainer, not financial, security or legal advice, and not a substitute for professional advice about your own situation. It is not affiliated with, endorsed by, or speaking for Coinkite, Block, or any other party named here. Published estimates are attributed, and differing scenarios are kept separate with their assumptions. Act on your own judgement. Editorial standards and corrections.

Do not disclose recovery material to a website, form, message or support account. This site never asks for it. Deliberate recovery on independently verified offline equipment is a separate operation. Seed-word safety.

COLDCARD firmware PR #691: pass the full secure-element digest

coldcard-firmware-pr-691

https://github.com/Coldcard/firmware/pull/691

Organisation
Coinkite
Evidence role
Repository pull request
Published
not established
Source changes
3
Detected differences
3
Unreviewed
0
Copies held
4

Open incident-response proposal to remove the firmware-side four-byte truncation. Depends on the libngu PR #60 change.

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 2 Aug 2026, 00:58 UTC.

  1. source content difference between 1 Aug 2026, 16:08 UTC and 1 Aug 2026, 17:41 UTC Current source content +17 -9

    The author marked the pull request as a draft at 16:13 and rewrote its description. The submodule bump note became a re-pin to the companion RNG fix, and the stated dependency moved from switck/libngu#60 to #61, described as replacing the generator with a SHA-256 Hash-DRBG and making reseed() require a seed of at least 32 bytes, so this firmware change becomes a prerequisite for #61 booting on-device. GitHub edited-comment and loading-error chrome appeared in the same capture.

    seen 1 Aug 2026, 17:41 UTC · Captured here text sha256 c437ec82ac556770ff261d6b 8,356 chars
    What changed from the previous capture 26 lines
     Insights
     fix: feed full SE digest to PRNG reseed (drop 32-bit truncation) - #691
     #691
    -Open
    +Draft
     ballance wants to merge 1 commit into
     Coldcard:masterColdcard/firmware:masterfrom
     ballance:fix/se-reseed-32bit-truncationballance/firmware:fix/se-reseed-32bit-truncationCopy head branch name to clipboard
     ConversationCommits1 (1)ChecksFiles changed
    -Open
    +Draft
     fix: feed full SE digest to PRNG reseed (drop 32-bit truncation)#691
     ballance wants to merge 1 commit into
     Coldcard:masterColdcard/firmware:masterfrom
     ballance
     commented
     Aug 1, 2026
    +•
    +edited
    +Loading
    +Uh oh!
    +There was an error while loading. Please reload this page.
     Copy link
     Copy Markdown
     Summary
     This change passes the full 32-byte digest to reseed().
     Change
     shared/mk4.py: drop the 4-byte truncation; feed the whole SHA256d digest.
    -Bump external/libngu to the companion fix that makes reseed() absorb a
    -full-width seed into all generator state words.
    +Re-pin external/libngu to the companion RNG fix.
     Dependency / CI note
    -Requires switck/libngu#60 (the reseed() rework). Until that merges, the bumped
    -submodule commit exists only on the libngu fork, so firmware CI cannot fetch it
    -from upstream. Options for maintainers: merge switck/libngu#60 first and re-pin, or
    -I can temporarily point .gitmodules at the fork branch for CI — happy to do
    -whichever you prefer.
    +Draft — depends on switck/libngu#61; will re-pin on merge. #61 replaces the
    +generator with a SHA-256 Hash-DRBG and makes reseed() require a ≥32-byte seed
    +(it now rejects the old 4-byte int call), so this mk4.py change is required for
    +#61 to boot on-device. Until #61 merges, the pinned submodule commit lives only on
    +the fork and firmware CI cannot fetch it from upstream; the pin will move to the
    +merged #61 SHA.
     Context
     Public disclosure: Block engineering, "Predictable RNG fallback and 32-bit reseed in
     COLDCARD firmware." This addresses the 32-bit-reseed half. (The predictable-fallback
     Sorry, something went wrong.
     Uh oh!
     There was an error while loading. Please reload this page.
    +ballance
    +marked this pull request as draft
    +August 1, 2026 16:13
     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
     Show hidden characters
    
    Extracted text as captured
    Skip to content
    Navigation Menu
    Toggle navigation
    Sign in
    Appearance settings
    Platform
    AI CODE CREATION
    GitHub CopilotWrite better code with AI
    GitHub Copilot appDirect agents from issue to merge
    MCP RegistryIntegrate external tools
    DEVELOPER WORKFLOWS
    ActionsAutomate any workflow
    CodespacesInstant dev environments
    IssuesPlan and track work
    Code ReviewManage code changes
    Code QualityEnforce quality at merge
    APPLICATION SECURITY
    GitHub Advanced SecurityFind and fix vulnerabilities
    Code securitySecure your code as you build
    Secret protectionStop leaks before they start
    EXPLORE
    Why GitHub
    Documentation
    Blog
    Changelog
    Marketplace
    View all features
    Solutions
    BY COMPANY SIZE
    Enterprises
    Small and medium teams
    Startups
    Nonprofits
    BY USE CASE
    App Modernization
    DevSecOps
    DevOps
    CI/CD
    View all use cases
    BY INDUSTRY

    Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.

  2. source content difference between 1 Aug 2026, 07:34 UTC and 1 Aug 2026, 16:08 UTC source content +12 -0

    The pull request gained a further comment repeating the request to raise the libngu changes as a separate pull request against the libngu repository, linking switck/libngu#60; reaction totals were normalized in the same capture.

    seen 1 Aug 2026, 16:08 UTC · Captured here text sha256 586d6b3da2ac07507166b0d4 8,204 chars
    What changed from the previous capture 12 lines
     Sorry, something went wrong.
     Uh oh!
     There was an error while loading. Please reload this page.
    +<github-reactions>
    +ballance
    +commented
    +Aug 1, 2026
    +Copy link
    +Copy Markdown
    +Author
    +Can you please open libngu changes as separate PR against libngu repo? thanks
    +switck/libngu#60
     All reactions
    +Sorry, something went wrong.
    +Uh oh!
    +There was an error while loading. Please reload this page.
     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
     Show hidden characters
    
    Extracted text as captured
    Skip to content
    Navigation Menu
    Toggle navigation
    Sign in
    Appearance settings
    Platform
    AI CODE CREATION
    GitHub CopilotWrite better code with AI
    GitHub Copilot appDirect agents from issue to merge
    MCP RegistryIntegrate external tools
    DEVELOPER WORKFLOWS
    ActionsAutomate any workflow
    CodespacesInstant dev environments
    IssuesPlan and track work
    Code ReviewManage code changes
    Code QualityEnforce quality at merge
    APPLICATION SECURITY
    GitHub Advanced SecurityFind and fix vulnerabilities
    Code securitySecure your code as you build
    Secret protectionStop leaks before they start
    EXPLORE
    Why GitHub
    Documentation
    Blog
    Changelog
    Marketplace
    View all features
    Solutions
    BY COMPANY SIZE
    Enterprises
    Small and medium teams
    Startups
    Nonprofits
    BY USE CASE
    App Modernization
    DevSecOps
    DevOps
    CI/CD
    View all use cases
    BY INDUSTRY

    Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.

  3. source content difference between 1 Aug 2026, 06:21 UTC and 1 Aug 2026, 07:34 UTC source content +31 -2

    A COLDCARD firmware collaborator asked the author to move the libngu changes into a separate pull request; GitHub review metadata and navigation chrome also changed.

    seen 1 Aug 2026, 07:34 UTC · Captured here text sha256 1941393f45c1f8b7240b265a 7,881 chars
    What changed from the previous capture 33 lines
     Thirty-two silent bytes,
     all but four were cast aside —
     now the seed stays whole.
    +scgbckbone
    +reviewed
    +Aug 1, 2026
    +View reviewed changes
    +scgbckbone
    +left a comment
    +Copy link
    +Copy Markdown
    +Collaborator
    +There was a problem hiding this comment.
    +Choose a reason for hiding this comment
    +The reason will be displayed to describe this comment to others. Learn more.
    +Choose a reason
    +Spam
    +Abuse
    +Off Topic
    +Outdated
    +Duplicate
    +Resolved
    +Low Quality
    +Hide comment
    +Can you please open libngu changes as separate PR against libngu repo? thanks
    +Sorry, something went wrong.
    +Uh oh!
    +There was an error while loading. Please reload this page.
    +All reactions
     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
     Show hidden characters
     Already have an account?
     Sign in to comment
     Reviewers
    -No reviews
    +1 more reviewer
    +scgbckbone
    +scgbckbone left review comments
    +Reviewers whose approvals may not affect merge requirements
     Assignees
     No one assigned
     Labels
     Successfully merging this pull request may close these issues.
     Uh oh!
     There was an error while loading. Please reload this page.
    -1 participant
    +2 participants
     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.
     Footer
     © 2026 GitHub, Inc.
    
    Extracted text as captured
    Skip to content
    Navigation Menu
    Toggle navigation
    Sign in
    Appearance settings
    Platform
    AI CODE CREATION
    GitHub CopilotWrite better code with AI
    GitHub Copilot appDirect agents from issue to merge
    MCP RegistryIntegrate external tools
    DEVELOPER WORKFLOWS
    ActionsAutomate any workflow
    CodespacesInstant dev environments
    IssuesPlan and track work
    Code ReviewManage code changes
    Code QualityEnforce quality at merge
    APPLICATION SECURITY
    GitHub Advanced SecurityFind and fix vulnerabilities
    Code securitySecure your code as you build
    Secret protectionStop leaks before they start
    EXPLORE
    Why GitHub
    Documentation
    Blog
    Changelog
    Marketplace
    View all features
    Solutions
    BY COMPANY SIZE
    Enterprises
    Small and medium teams
    Startups
    Nonprofits
    BY USE CASE
    App Modernization
    DevSecOps
    DevOps
    CI/CD
    View all use cases
    BY INDUSTRY

    Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.

  4. Earliest copy held
    seen 1 Aug 2026, 06:21 UTC · Captured here text sha256 7b187229548807922aff3fd1 7,220 chars
    Extracted text as captured
    Skip to content
    Navigation Menu
    Toggle navigation
    Sign in
    Appearance settings
    Platform
    AI CODE CREATION
    GitHub CopilotWrite better code with AI
    GitHub Copilot appDirect agents from issue to merge
    MCP RegistryIntegrate external tools
    DEVELOPER WORKFLOWS
    ActionsAutomate any workflow
    CodespacesInstant dev environments
    IssuesPlan and track work
    Code ReviewManage code changes
    Code QualityEnforce quality at merge
    APPLICATION SECURITY
    GitHub Advanced SecurityFind and fix vulnerabilities
    Code securitySecure your code as you build
    Secret protectionStop leaks before they start
    EXPLORE
    Why GitHub
    Documentation
    Blog
    Changelog
    Marketplace
    View all features
    Solutions
    BY COMPANY SIZE
    Enterprises
    Small and medium teams
    Startups
    Nonprofits
    BY USE CASE
    App Modernization
    DevSecOps
    DevOps
    CI/CD
    View all use cases
    BY INDUSTRY

    Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.

How to check this yourself

Each copy above is identified by the SHA-256 of its extracted text, shown beside it, and the diffs are plain unified diffs. 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.