BB
← All projectsBitBox

BitBox02 firmware

Firmware and bootloader for BitBox02 signing devices.

BitcoinHardware walletsNormal
Repository coverage

779 commits in the local evidence base

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.

231security candidates161second-pass queue719AI analyses
65commits · 30 days
136commits · 60 days
308commits · 180 days
692commits · 365 days
Backfill bands
Aug 5 → Feb 6335 seen28 candidatesComplete
Feb 6 → Jun 6265 seen19 candidatesComplete
Jun 6 → Jul 619 seen5 candidatesComplete
Jul 6 → Aug 526 seen3 candidatesComplete
Commit communication

Does the history explain itself?

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
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Marko Bencun450131422357
benma's agent11240106164
Niklas Dusenlund15139130057
cedwies12512063
Tomas Vrba10410071
Cedric Wiese12312049
Jad14210060
Sebastian Sutter222050
thisconnect212072
benma212074
Yasser Aziza111070
Niklas111035
Analysis record

Published AI watches

Last scanned 4 minutes ago

Low 34 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/hww-start-session'

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
04302490by Marko Bencun+485−1713 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

py: make session reset an API setup helper

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…

50a9e76aby benma's agent+28−163 files
No security note in commit
Moderate 62 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

hww: reset sessions on host reconnect

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
6679936fby benma's agent+473−1712 files
Vendor flagged security relevance
Informational 17 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge commit 'refs/pull/2073/head' of https://github.com/BitBoxSwiss/bitbox02-firmware

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.
6b04e006by Marko Bencun+7010−24621 files
No security note in commit
Low 47 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/show-erc20-contract'

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
410df562by Marko Bencun+203−123 files
No security note in commit
Low 26 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/bootloader-descriptor-compat'

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
6dccfd24by Marko Bencun+19−72 files
No security note in commit
Moderate 53 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'nickez/bb02-utf8-safe'

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
0bbdf6f0by Niklas Dusenlund+338−9625 files
No security note in commit
Low 41 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'benma/ub'

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
8a6fd97bby Marko Bencun+3−12 files
No security note in commit
Low 35 AI analysisMessage 68 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

oled: hold display in reset during startup

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
cdb27835by Niklas Dusenlund+2−11 file
Vendor flagged security relevance
Informational 18 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/factorysetup-trim-unused'

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
554a0558by Marko Bencun+457−5647 files
No security note in commit
Low 37 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/validate-py-antiklepto-signatures'

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
0d1a7997by Marko Bencun+152−65 files
Vendor flagged security relevance
Informational 19 AI analysisMessage 50 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge remote-tracking branch 'agent/benma-agent/scroll-payment-request-memo-name'

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
be375664by Marko Bencun+115−66 files
No security note in commit
Informational 19 AI analysisMessage 91 · Strong
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: compress constant root keys

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
e2273c1fby benma's agent+407−5552 files
No security note in commit
Informational 18 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: reuse SHA-256 for HMAC

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
a790a7f0by benma's agent+24−55 files
No security note in commit
Informational 21 AI analysisMessage 78 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: use static secp context

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
2756aca4by benma's agent+26−42 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
BB BitBoxBitBox02 firmware BitcoinHardware wallets

factorysetup: speed up certificate setup

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.
d5617112by benma's agent+10−81 file
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'nickez/bb03-binaries'

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 (…

1a648595by Niklas Dusenlund+17103−5779170 files
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge commit 'refs/pull/1976/head' of https://github.com/BitBoxSwiss/bitbox02-firmware

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 …

386d86f5by Marko Bencun+139−134 files
No security note in commit
Informational 15 AI analysisMessage 35 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Add testboard openocd config

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…

c5984b41by Niklas Dusenlund+16−01 file
No security note in commit
Informational 19 AI analysisMessage 28 · Opaque
BB BitBoxBitBox02 firmware BitcoinHardware wallets

Merge branch 'py-proto'

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
926a5885by Marko Bencun+28−62 files
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Security candidatetest: verify firmware transaction signaturesby benma's agent · a17390f8 · Jul 28, 2026 · 1 fileMessage 67 · AdequateInformational 14Details
Commit message · benma's agent

test: verify firmware transaction signatures

67/100 · AdequateMessage clarity
✓ 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.

Security candidatepy: extract bootloader connectionby benma's agent · 886113d0 · Jul 28, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · benma's agent

py: extract bootloader connection

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.

Lower-priorityprepare v9.26.5by benma's agent · 51ce24e6 · Jul 28, 2026 · 2 filesMessage 43 · ThinInformational 15Details
Commit message · benma's agent

prepare v9.26.5

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.

Lower-priorityapi: disable BitBoxSync by defaultby benma's agent · 93d36fc8 · Jul 28, 2026 · 2 filesMessage 68 · AdequateLow 30Details
Commit message · benma's agent

api: disable BitBoxSync by default

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.

AI review queuedrust: bound executor queueby benma's agent · b99e200a · Jul 28, 2026 · 5 filesMessage 70 · AdequateLow 42Details
Commit message · benma's agent

rust: bound executor queue

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.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
second-pass: broader security terminology
AI analysis · Low 42/100

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.

Security candidateAdd shared Bitcoin transaction vectorsby benma's agent · 3bdaf583 · Jul 21, 2026 · 17 filesMessage 78 · AdequateInformational 15Details
Commit message · benma's agent

Add shared Bitcoin transaction vectors

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.

Lower-priorityrust: use static no-op wakerby benma's agent · 5be42f61 · Jul 20, 2026 · 3 filesMessage 68 · AdequateModerate 57Details
Commit message · benma's agent

rust: use static no-op waker

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.

Lower-priorityusb: block HWW during U2F workflowsby benma's agent · 0014300b · Jul 19, 2026 · 5 filesMessage 68 · AdequateModerate 59Details
Commit message · benma's agent

usb: block HWW during U2F workflows

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.

Lower-priorityFix LVGL transition style clearingby Niklas Dusenlund · 5b6092f4 · Jul 15, 2026 · 6 filesMessage 68 · AdequateLow 35Details
Commit message · Niklas Dusenlund

Fix LVGL transition style clearing

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.

Lower-priorityui: keep frame during async processingby benma's agent · c6b1ffa3 · Jul 14, 2026 · 9 filesMessage 68 · AdequateInformational 18Details
Commit message · benma's agent

ui: keep frame during async processing

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.

Security candidatereleases: add v9.26.2, v9.26.3 and v9.26.4by Marko Bencun · eed2e68e · Jul 10, 2026 · 16 filesMessage 45 · ThinInformational 12Details
Commit message · Marko Bencun

releases: add v9.26.2, v9.26.3 and v9.26.4

45/100 · ThinMessage clarity
✓ 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.

AI review queuedeth: loosen EIP-712 identifier validationby Marko Bencun · 9703d8d9 · Jul 9, 2026 · 3 filesMessage 68 · AdequateInformational 21Details
Commit message · Marko Bencun

eth: loosen EIP-712 identifier validation

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.

Security candidateLimit SD erase file sizeby Marko Bencun · 2453f528 · Jul 7, 2026 · 1 fileMessage 69 · AdequateModerate 59Details
Commit message · Marko Bencun

Limit SD erase file size

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.

Security candidateValidate mounted FAT geometryby Marko Bencun · 01c017d6 · Jul 7, 2026 · 1 fileMessage 66 · AdequateHigh 70Details
Commit message · Marko Bencun

Validate mounted FAT geometry

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.

Lower-priorityFix some memory handling issuesby Niklas Dusenlund · 3a7143f4 · Jul 6, 2026 · 3 filesMessage 45 · ThinModerate 59Details
Commit message · Niklas Dusenlund

Fix some memory handling issues

45/100 · ThinMessage clarity
✓ 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.

Lower-prioritybb03 ui: navigation icon buttons (Back/Next/Confirm/Cancel)by Jad · facb1e73 · Jul 1, 2026 · 19 filesMessage 73 · AdequateInformational 19Details
Commit message · Jad

bb03 ui: navigation icon buttons (Back/Next/Confirm/Cancel)

- 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.

Security candidateapi: add BitBoxSyncby Marko Bencun · 54cdb54d · Jul 1, 2026 · 30 filesMessage 59 · ThinLow 34Details
Commit message · Marko Bencun

api: add BitBoxSync

Implements the BitBoxSync firmware API expected by the bitboxsync-client-go raw.Identity interface:

https://github.com/BitBoxSwiss/bitboxsync-client-go/blob/3c0f1462ac0d647285a75c48227eb8d9f567fc67/raw/identity.go#L27-L69

59/100 · ThinMessage clarity
✓ 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.