Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.
Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.
58/100 average clarity
68Strong · 80–100
321Adequate · 60–79
302Thin · 40–59
88Opaque · 0–39
26security candidates with opaque commit messaging
This commit adds a new 'session reset' command to the BitBox02 hardware wallet's USB protocol. It lets the host computer cleanly reset the device connection if a previous operation was interrupted, instead of leaving the device stuck mid-t…
New USB control command added to host-wallet protocolReset path cancels async task, resets Noise state, unlocks USB processing, and clears output queueU2F UI ownership check prevents reset from interrupting an active U2F workflow
This is a routine Python code refactor. It moves an existing 'reset session' command from one internal class to another and adds a version check so older firmware simply skips it. There is no security bug being fixed here; it is purely org…
This commit fixes a bug in the BitBox02 hardware wallet where unplugging the USB cable at the wrong moment could leave a half-finished operation running. If the device stayed powered and a new host reconnected, the new host's first message…
Fixes cross-session state confusion on USB reconnectAdds explicit session reset command to cancel stale async workflowsResets Noise cryptographic session to prevent old-key encrypted responses
This commit adds a new recovery-word entry screen for the upcoming BitBox03 hardware wallet. It is a large feature patch: it introduces a dedicated BIP39 wordlist keyboard, a new recovery-words review screen, and changes how the device han…
New UI workflow distinguishes 'back' from 'cancel' during seed restoration, reducing accidental aborts.Cancel actions still require an explicit confirmation prompt before the restore is abandoned.Wordlist keyboard disables keys that cannot lead to a valid BIP39 word, preventing invalid-word compositions at the widget level.
This commit improves the BitBox02 hardware wallet's Ethereum token-approval screen. When a user signs an ERC20 token transfer, the device now also shows the token's smart-contract address if the token symbol is ambiguous (the same ticker, …
UI hardening: adds contract-address confirmation for ERC20 tokens with ambiguous or unknown symbolsRegistry validation: rejects payment requests for tokens not present in the firmware's ERC20 registryBuild-time ambiguity detection: generates a sorted list of units shared by multiple contracts
This commit relaxes a version check in the BitBox02 bootloader upgrade code. Previously, the firmware installer required that a stage0 bootloader descriptor's version exactly matched the currently expected image version. Now it accepts des…
Strict version equality check removed from bootloader descriptor parsingChange located in bootloader upgrade / firmware installer verification pathNo bounds, length, or pointer validation changes observed
This commit hardens the BitBox02 firmware so it stops trusting that incoming text strings are valid UTF-8 or plain ASCII. It replaces risky C string copies with length-checked, UTF-8-aware helpers, rejects non-ASCII characters at UI bounda…
Replaced snprintf-based string copies with length-bounded UTF-8-aware copiesAdded explicit length parameter to memory_set_device_name and reject embedded/invalid nullsAdded printable-ASCII enforcement at Rust UI boundary before C rendering
This commit fixes a coding guideline violation in the BitBox02 factory setup code. A 32-byte buffer that receives output from a Rust function was not initialized to zeroes before use. The accompanying documentation now explicitly requires …
Uninitialized stack buffer used as output buffer for Rust/C FFI callDefensive zero-initialization added to prevent use of stale stack data on error or partial write pathsProject coding guidelines updated to mandate zero-initialization for rust_util_bytes_mut buffers
This commit fixes a display behavior issue during startup of the BitBox02 hardware wallet. Previously, when the device turned on, the screen's reset pin was left in a state that could allow leftover images or text from an earlier session t…
Information disclosure via residual display content during bootOLED reset pin sequencing hardeningDefense against stale/misleading UI state before verified firmware initializes display
This commit trims the BitBox02 factory-setup firmware image by switching stored root attestation public keys from 65-byte uncompressed to 33-byte compressed secp256k1 keys, and by using a smaller static secp256k1 verification context inste…
Change in trusted public-key table format and derivation logicSwitch to static/no-precomp secp256k1 verification contextAddition of secp256k1 self-test at boot
This commit adds extra safety checks in the BitBox02 Python library for ECDSA signatures used in Bitcoin and Ethereum signing. It now validates that signatures have the correct length, use valid numbers, and use the safer low-S form. It al…
Defensive validation added for ECDSA signature format and low-S encodingRecovery ID range validation added for recoverable signaturesAnti-Klepto verification now rejects malformed/malleable signatures before nonce verification
This commit tweaks how the BitBox02 hardware wallet displays a payment-request memo on screen. It changes the label from 'Memo from\n\nMerchant' to 'Memo from: Merchant' and makes the screen scrollable so long merchant names don't get cut …
No security-relevant signal in commit message or diffUI/UX change only: text formatting and scrollabilityNo memory-safety, cryptographic, or authorization changes observed
This commit is a hardening and size-optimization change for the BitBox02 factory-setup firmware. It stores the 110 built-in root attestation public keys in compressed (33-byte) form instead of uncompressed (65-byte) form, and marks the tab…
Data table moved from writable RAM to read-only flash (const)Public-key table size reduced from 65 to 33 bytes per keyNew Rust helper normalizes compressed/uncompressed keys before hashing
This commit swaps one internal cryptography library for another when computing HMAC-SHA256 in the factory-setup code. The goal is to reduce firmware size by reusing an existing SHA-256 implementation, not to fix a security bug. New test ve…
Cryptographic implementation change in HMAC-SHA256 helperUse of `.unwrap()` on `new_from_slice`, which can panic if key length is unsupported; for HMAC-SHA256 the RustCrypto `new_from_slice` accepts any key length, so this is effectively safe but still a panic pathNo removal of existing call sites; normal firmware still uses `bitcoin_hashes` for other callers
This commit changes how the BitBox02 factory-setup program checks digital signatures. It switches from a dynamically created crypto context to a built-in, read-only verification context, which makes the factory-setup firmware about 35 KB s…
Cryptographic context change in verification pathRemoval of dynamic secp256k1 context creation in factory setupExplicit addition of secp256k1_selftest() to compensate for skipped implicit self-test
This commit is a performance optimization in the BitBox02 factory setup process. It changes how the device picks which trusted root public key to use when verifying an attestation certificate. Previously, the device tried verifying the sig…
No removal of cryptographic verification: rust_secp256k1_verify is still performed after key selection.No change to accepted inputs: any certificate accepted before is still accepted, and any rejected before is still rejected.Identifier comparison uses MEMEQ over the full 32-byte SHA-256 digest, so collision resistance is standard.
This commit is a large feature merge that adds initial support for a new hardware variant, the BitBox03 (STM32U5-based development kit). It introduces new bootloader and firmware binaries, board support crates, vendored Rust dependencies (…
This commit adds a progress bar that appears while the BitBox02 is loading large Ethereum transaction data from a connected computer. It is a user-experience improvement, not a security fix. The code only changes how progress is displayed …
This commit adds a configuration file for OpenOCD, a debugging tool used during hardware development and testing. It tells the debugger how to connect to an STM32U5 test board using a J-Link adapter. There is no change to firmware code, no…
This commit only adds explanatory comments to Python type-stub files describing what happens when an optional anti-klepto host nonce commitment is left out. It does not change any firmware logic, cryptographic code, or default behavior. Th…
Documentation-only change in generated Python stubsMentions anti-klepto / S2C nonce commitment fallback behaviorNo logic, default, or cryptographic implementation change
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 14/100
This commit only adds a new test to the firmware's Bitcoin transaction-signing code. The new test takes existing test vectors, injects the signatures produced by the firmware, and then verifies that the resulting transaction is valid and its scripts pass. It does not change any production signing logic, fix a bug, or alter behavior visible to users.
Move the USB bootloader fallback into a nested helper to satisfy pylint's return-count limit without changing behavior.
50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
update trust
AI analysis · Informational 15/100
This commit is a minor code cleanup in a Python helper script. It moves existing bootloader connection logic into a small nested helper function to satisfy a style checker (pylint's limit on the number of return statements). No behavior changes, no security fixes, and no new functionality were introduced.
Set v9.26.5 and move its release fixes into a dedicated changelog section.
Keep BitBoxSync documented as unreleased.
43/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body
AI analysis · Informational 15/100
This commit is a routine release bookkeeping change. It updates the version number from v9.27.0 to v9.26.5 and reorganizes the changelog so that two bug fixes are listed under the new v9.26.5 release section instead of 'Unreleased'. The actual bug fixes were made in earlier commits and are not shown here. There is no code change that could directly affect device security.
Gate the BitBoxSync API behind a disabled-by-default Cargo feature while API changes are pending.
Requests now return the standard disabled error unless the feature is explicitly enabled.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 30/100
This commit turns off a feature called BitBoxSync by default. Unless a developer explicitly enables it during build, any request to use BitBoxSync will now receive a standard 'disabled' error. The change is framed as temporary while API changes are pending. It is a defensive gating change, not a fix for a known active attack.
Replace the unbounded concurrent queue with a fixed-capacity ring buffer storing 16 Runnable slots inline. Scheduling no longer allocates, including when wakers run in interrupt context.
Limit active tasks to the queue capacity so exhaustion is reported from spawn rather than from a waker. Protect queue access with critical sections because wakers and the main loop may access it concurrently.
The executor currently has three normally serialized root-task sources, so 16 slots leave room for future concurrency and consume 64 bytes on the 32-bit firmware target.
Cover repeated slot reuse and enforcement of the task limit. Remove the now-unused concurrent-queue dependency.
This commit replaces an unbounded task queue inside the BitBox02 firmware's Rust executor with a fixed 16-slot ring buffer. It also adds a hard limit of 16 active tasks and protects queue access with critical sections so interrupt-driven code and the main loop don't corrupt the queue. The change removes a third-party queue dependency and adds unit tests. It is a defensive hardening patch: it prevents memory exhaustion from an ever-growing queue and removes allocation from interrupt paths, but it does not by itself fix a known exploitable bug.
Add a readable source of Bitcoin transaction signing vectors, authored as PSBTs with the metadata needed by signing APIs. Derive firmware requests in memory, exercise them in signtx.rs, and remove overlapping bespoke tests.
The generated fixtures are meant to be consumed by client libraries so firmware and clients can cover the same transactions and versioned expectations without repo-specific vector sources. They will also be useful when adding the Bitcoin API to the new bitbox-api-ts library.
Keep the generated JSON synchronized with its Rust source through a drift test.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 15/100
This commit is a large test-infrastructure change. It adds a new Rust crate that generates shared Bitcoin transaction test vectors as PSBTs, updates firmware tests to use those vectors, and removes some older overlapping tests. There is no change to production firmware code, no new feature exposed to users, and no fix for a security bug.
The polling executor ignores wake notifications and is polled on every main-loop iteration. Use core's static no-op waker so ISR callbacks cannot free an Arc while the heap allocator is active.
Remove the now-unused heap-backed waker helper.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Moderate 57/100
This commit replaces a custom-built notification helper (a 'waker') inside the BitBox02 firmware's Rust code with a built-in, memory-safe no-op version. The old helper used heap memory and reference counting (Arc), which could be freed by interrupt routines while the memory allocator was already busy. The change removes that helper entirely and uses a static no-op waker instead, preventing a potential use-after-free or heap corruption issue during asynchronous task polling.
Track detached U2F workflow lifetimes independently of their public result state. Return HWW_RSP_BUSY before starting an HWW request while a U2F workflow can still own the shared UI.
This prevents HWW session reset and cancellation paths from invalidating live U2F UI objects. Add regressions for the lifetime guard and busy response.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Moderate 59/100
This commit fixes a concurrency bug in the BitBox02 hardware wallet's USB handling. When a U2F (two-factor authentication) workflow is still running on the device's screen, a new hardware wallet request could previously start and reset or cancel the U2F workflow, potentially corrupting its user-interface state. The fix makes new hardware wallet requests return 'busy' while any U2F workflow is active, and tracks U2F workflow lifetimes independently of their public result state.
Wrap the transition style setter around LvStyleTransition so callers use the safe wrapper instead of raw descriptors.
Remove the local transition style property when None is passed, matching the behavior of other optional style setters.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Low 35/100
This commit fixes a bug in how the BitBox02 hardware wallet's user-interface library clears style transitions. Previously, passing 'None' for a transition style would store a null pointer in LVGL's style state, which could later be dereferenced during state changes and crash or corrupt the UI. The patch now removes the local transition property instead of storing a null pointer, and wraps the transition setter in a safer Rust type. It also tightens other optional pointer-style setters and grid-template inputs so null pointers cannot be silently stored. The change is defensive hardening rather than a demonstrated remote exploit, but on a security device any UI crash or memory corruption is relevant.
Async operations can leave the screen stack temporarily empty between two UI calls. This caused the waiting screen to flash, unlike the old synchronous securechip behavior.
Treat locally processing USB requests as active UI work and keep the last frame when no component is stacked. Host waits, screensavers, and explicit components continue to render normally.
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 18/100
This commit fixes a visual glitch on the BitBox02 hardware wallet screen. During some asynchronous security operations, the screen briefly showed the 'waiting' screen between two user-interface steps, causing an annoying flash. The change tells the device to keep showing the previous screen frame while it is still busy processing a USB request locally, instead of redrawing the waiting screen. It is a user-experience fix, not a cryptographic or access-control fix.
AI review queuedWarn before truncated value displaysby benma's agent · 5b3aee6f · Jul 14, 2026 · 10 filesMessage 78 · AdequateLow 42Details
Commit message · benma's agent
Warn before truncated value displays
Show the existing large-value warning before value confirmation bodies that exceed the UI label limit.
Apply it to shared message verification, Ethereum transaction and typed-data values, and BTC policy name/policy displays.
78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · Low 42/100
This commit adds a warning screen to the BitBox02 hardware wallet whenever a long message or value is about to be shown in a truncated form. Previously, the device could silently cut off the end of very long transaction details, message data, or policy names, potentially hiding important information from the user before they approve an action. The fix shows a 'Warning: the next value is too large to display in full' screen first, so users know they are not seeing the complete content.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Informational 12/100
This commit is a routine release-management update. It adds signed build assertions for three new BitBox02 firmware versions (9.26.2, 9.26.3, 9.26.4) and updates the release documentation and build helper script. The build script now deletes the v9.26.3 git tag after fetching because the released binaries accidentally included pre-release metadata, so the exact released binary can only be reproduced from the unsigned commit hash, not from the final tag. There is no code change to the firmware itself in this commit, and nothing in the materials suggests a security vulnerability.
Allow ':' in EIP-712 type names used by some dapps as a namespace separator
Co-Authored-By: Tomas Vrba <vrba.tomas@pm.me>
68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 21/100
This firmware update relaxes the rules for valid Ethereum typed-data (EIP-712) names so they can contain a colon (:), which some decentralized apps use as a namespace separator. Member names still cannot contain colons. The change is presented as safe because a colon cannot be confused with the punctuation that separates type names, fields, and arrays in EIP-712 encoding.
Reject files larger than SD_MAX_FILE_SIZE before the erase path overwrites them. The read path already enforced this limit; applying it to erase prevents a malformed FAT directory entry from causing an excessive overwrite loop.
This mitigates the BitBox impact of CVE-2026-6682 in the stale-backup cleanup path without changing vendored FatFs code.
69/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
explicit security language
AI analysis · Moderate 59/100
This commit fixes a bug in how the BitBox02 hardware wallet wipes files from its SD card. Before erasing a file, the device now checks the file's reported size against a safe maximum. Without this check, a tampered SD card could claim a file is gigantic, causing the device to get stuck in a long overwrite loop. The fix prevents a denial-of-service style attack where a malicious or corrupted SD card could make the device hang or behave unexpectedly during cleanup of old backups. The commit says it mitigates the impact of CVE-2026-6682 without changing the third-party FAT filesystem code.
Reject mounted FAT volumes whose FAT area extends past the computed data area. This catches crafted FAT32 BPB values where the FatFs mount calculation can wrap `BPB_FATSz32 * NumFATs` and place the data area inside attacker-controlled FAT sectors.
Addresses CVE-2026-6682 at the BitBox SD integration boundary without changing vendored FatFs code.
66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
explicit security languagedefensive validation
AI analysis · High 70/100
This update adds a safety check when the BitBox02 hardware wallet mounts a microSD card. A malicious or deliberately malformed FAT filesystem could trick the device's file-system library into placing user data inside attacker-controlled bookkeeping sectors, potentially leading to code execution or data corruption when the device later reads or writes files. The fix validates that the filesystem's internal layout is sane before using it, and leaves the third-party library code unchanged.
Security candidateUpdate FatFs to R0.16by Marko Bencun · 9f2b493d · Jul 7, 2026 · 79 filesMessage 69 · AdequateLow 27Details
Commit message · Marko Bencun
Update FatFs to R0.16
Update the vendored FatFs copy from R0.14b to R0.16 plus upstream patch 1.
- Base archive: https://elm-chan.org/fsw/ff/arc/ff16.zip - https://elm-chan.org/fsw/ff/patch/ff16p1.diff
Keep the existing BitBox configuration choices for LFN, tiny mode, mkfs support, code page 850, fixed timestamps, and disabled exFAT, labels, and LBA64.
69/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
boot or update path
AI analysis · Low 27/100
This commit updates the third-party FatFs file-system library inside the BitBox02 firmware from version R0.14b to R0.16 plus an upstream patch. The change is a routine dependency refresh: it replaces the vendored source files with the newer upstream release while keeping BitBox's existing configuration (long-file-name support, tiny mode, code page 850, fixed timestamps, no exFAT, no labels, no 64-bit LBA). Most of the visible diff is documentation and metadata; the actual C source files (ff.c, ff.h, ffconf.h, diskio.c, etc.) are updated wholesale. The commit message does not claim to fix any security issue, and no independent security advisory or CVE is supplied.
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Moderate 59/100
This commit fixes two memory-handling bugs in the BitBox02 hardware wallet's Rust LVGL UI bindings. First, line widgets were storing point data in dynamically allocated memory attached to the LVGL object and freeing it when the object was deleted; if the same points were shared or the attachment logic failed, this could lead to crashes or memory corruption. The fix requires callers to pass only statically allocated, never-freed point slices. Second, style-transition property lists were accepted without checking for a required terminator marker; an unterminated list could cause LVGL to read past the end of the array, leading to crashes or undefined behavior. The commit adds validation that panics at construction time if the terminator is missing.
- adds navigation buttons for back, next, confirm, and cancel, replacing existing text buttons. The icons are PNG bitmaps whereas the button borders are vector drawn.
- on press, the frame fills white and the icon color inverts.
- Adds bitbox-lvgl support (LvStyleTransition, ObjExt add_state/add_flag/ child, LvObjFlag),
- icon assets are located in bitbox03/icons/
- adds a demo screen (ui/demo.rs, reachable in the simulator via the set_device_name "__demo_nav__" sentinel)
73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 19/100
This commit is a user-interface redesign for the BitBox03 hardware wallet: text buttons like 'Yes/No' and 'Back/Next' are replaced with icon buttons. It also adds a hidden demo screen that can only be opened in the simulator by setting the device name to a special test value. There is no direct security vulnerability visible in the code change, but it touches code that handles user confirmation and cancellation, so any bug here could affect whether a user correctly approves or rejects a sensitive action.
AI review queuedpy: add BitBoxSyncby Marko Bencun · 851ed04b · Jul 1, 2026 · 12 filesMessage 28 · OpaqueInformational 15Details
Commit message · Marko Bencun
py: add BitBoxSync
28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100
This commit adds a new Python client feature called BitBoxSync to the BitBox02 Python library. It introduces generated protobuf code, new API methods to request identity keys, sign various sync-related intents, and unwrap an encrypted namespace key, plus a demo menu in the developer test tool send_message.py. There is no indication in the commit that this fixes a security bug; it appears to be a normal feature addition.
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Low 34/100
This commit adds a brand-new firmware feature called BitBoxSync, which lets the BitBox02 hardware wallet participate in a sync service by proving its identity, signing login/admin intents, and decrypting namespace encryption keys. The code introduces new cryptographic operations (Ed25519 signatures, X25519 key exchange, HKDF, ChaCha20-Poly1305) and new user-confirmation prompts. It is a large feature addition, not a documented security fix. There is no direct evidence of a vulnerability in the diff, but any new crypto API surface carries implementation risk and should be reviewed carefully.
Security candidateblupgrade: update stage1 binaries to v1.2.2by Marko Bencun · 5940a800 · Jun 29, 2026 · 6 filesMessage 45 · ThinInformational 0Details
Commit message · Marko Bencun
blupgrade: update stage1 binaries to v1.2.2
45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathboot or update path
AI analysis · Informational 0/100
This commit simply swaps in newer pre-built bootloader stage1 binary files (version 1.2.2 replacing 1.2.1) for four BitBox02 hardware variants and updates the corresponding checksum list. The actual code inside the new binary files is not shown in the diff, and no description of why the update was made is provided. There is no visible evidence in the commit that this fixes or introduces a security problem.
Security candidatebootloader/stage1: fix erase handling for partially erased blocksby Marko Bencun · b31206a8 · Jun 28, 2026 · 3 filesMessage 50 · ThinModerate 59Details
Commit message · Marko Bencun
bootloader/stage1: fix erase handling for partially erased blocks
50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
update trustboot or update path
AI analysis · Moderate 59/100
This update fixes the BitBox02 bootloader's firmware-erase routine. Previously, when erasing leftover padding after a firmware update, the bootloader started erasing at the exact page where the firmware ended. Because flash memory can only be erased in larger fixed-size blocks, this could leave the final firmware chunk sharing an erase block with padding. That shared block might be erased unintentionally, potentially corrupting the newly written firmware. The fix aligns the erase start to a full erase-block boundary and re-checks whether pages are already erased before acting. The changelog explicitly calls this a fix for 'partially erased flash blocks.'
Security candidateblupgrade: add stage0/stage1 production binariesby Marko Bencun · 8db4b0dc · Jun 25, 2026 · 20 filesMessage 45 · ThinInformational 15Details
Commit message · Marko Bencun
blupgrade: add stage0/stage1 production binaries
45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet pathboot or update path
AI analysis · Informational 15/100
This commit adds production bootloader upgrade files for the BitBox02 hardware wallet and updates build scripts to use them. It is a routine asset-management change: replacing placeholder development hashes with real signed production binaries and enabling previously disabled build targets. There is no code change to how the device operates, no reported vulnerability, and no indication of a security incident.
Security candidateblupgrade: keep dev stage1 unsignedby Marko Bencun · 476b90e3 · Jun 25, 2026 · 9 filesMessage 83 · StrongInformational 20Details
Commit message · Marko Bencun
blupgrade: keep dev stage1 unsigned
Regenerate the development stage1 payloads from the unsigned build outputs so their signature slots stay zeroed.
Keep production payload validation on signature verification while development payload validation uses the existing unsigned-image path.
This is to make `make bootloader-upgrade-assets-development` work again after removing the dummy pubkeys from the bootloader_update.py verification.
83/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundaryupdate trustdefensive validationcryptography-sensitive pathsigning or wallet pathboot or update path
AI analysis · Informational 20/100
This commit fixes a build script used only for development/testing versions of the BitBox02 bootloader upgrade. It makes the development-stage1 bootloader images unsigned again, while keeping production images fully signature-verified. The change is a build/development tooling fix, not a security patch for shipped devices.
Security candidatesecurity improvementsby Marko Bencun · cbb40634 · Jun 25, 2026 · 21 filesMessage 23 · OpaqueHigh 76Details
Commit message · Marko Bencun
security improvements
23/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names security-relevant behavior explicitly! Too few words to establish purpose! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
signing or wallet pathboot or update path
AI analysis · High 76/100
This BitBox02 firmware update is a broad security patch that fixes several independent bugs: it prevents a maliciously oversized USB report from overflowing memory, stops a corrupted Bluetooth pairing database from being read or written with invalid lengths, allows full-size firmware images in the bootloader, hardens how Bitcoin, Cardano, Ethereum, and typed-data (EIP-712) transactions are parsed and shown to the user, and adds a user confirmation before creating backups. The changes are defensive and reduce the chance that an attacker could trick the device into signing something the user did not intend.