{"results": [{"sha": "82ced47a8cfec13af5c497554526e20e2eab19b3", "project": "COLDCARD firmware", "vendor": "Coinkite", "title": "bugfix: detect RNG_SR_SEIS and RNG_SR_SECS, retry safely, and fail closed on persistent faults", "committed_at": "2026-08-05T12:31:26+00:00", "severity": "moderate", "risk_score": 66, "summary": "This update fixes how the COLDCARD hardware wallet's random-number generator (RNG) handles rare hardware faults. Previously, the device could silently continue using weak or repeated random numbers if the RNG reported a seed error. Now it detects those error flags, tries a safe recovery a few times, and if the problem persists it stops with an error instead of producing bad randomness. Two keyboard drivers were also updated so a temporary RNG failure does not lock the user out before login.", "author": "scgbckbone", "commit_message": "bugfix: detect RNG_SR_SEIS and RNG_SR_SECS, retry safely, and fail closed on persistent faults", "message_quality_score": 50, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/coldcard-firmware/82ced47a8cfec13af5c497554526e20e2eab19b3/"}, {"sha": "1818553e9ac665277391f5d843c436a10800d548", "project": "Core Lightning", "vendor": "Elements Project", "title": "add a test for downgrading askrene datastore", "committed_at": "2026-08-04T21:51:43+00:00", "severity": "informational", "risk_score": 16, "summary": "This commit adds a regression test for Core Lightning's database downgrade path. It ensures that when a user downgrades from an upcoming v26.09 release to an older version (v26.06), the new 'impressions' data added by the askrene routing subsystem is cleanly removed while other askrene data survives. The code change itself is purely a test and a marker comment in the migration list; it does not fix an active security vulnerability.", "author": "Lagrang3", "commit_message": "add a test for downgrading askrene datastore\n\nAlso trigger a db upgrade in the v26.09 so that impressions can be\nremoved by the downgrade tool.\n\nSigned-off-by: Lagrang3 <lagrang3@protonmail.com>", "message_quality_score": 90, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/core-lightning/1818553e9ac665277391f5d843c436a10800d548/"}, {"sha": "fa0d48415f3945e9d1ccccb68ac7f6b41cf3fdc0", "project": "Sparrow Wallet", "vendor": "Sparrow", "title": "reject extended private keys when creating a terminal watch only wallet, and show import errors", "committed_at": "2026-08-04T13:55:45+00:00", "severity": "low", "risk_score": 42, "summary": "This commit fixes a bug in Sparrow Wallet's terminal (command-line) watch-only wallet creation. Previously, a user could accidentally paste an extended private key (xprv) into a dialog meant only for public keys or output descriptors, and the wallet would silently fail or create an empty wallet. Now the app rejects xprv keys with a clear error message and also shows import errors to the user instead of logging them silently.", "author": "Craig Raw", "commit_message": "reject extended private keys when creating a terminal watch only wallet, and show import errors", "message_quality_score": 50, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/sparrow-wallet/fa0d48415f3945e9d1ccccb68ac7f6b41cf3fdc0/"}, {"sha": "1a810c062044d3d432ec8e2cccd7eb5752d71221", "project": "Sparrow Wallet", "vendor": "Sparrow", "title": "add bitbox02 attestation failed dialog", "committed_at": "2026-08-04T12:54:50+00:00", "severity": "low", "risk_score": 25, "summary": "This commit adds a user-facing warning dialog when a BitBox02 hardware wallet fails an attestation check. Attestation is a process that helps verify the device is genuine and not a counterfeit or tampered unit. Previously, a failed attestation may not have been clearly communicated to the user. The change improves security by warning users not to store funds on a device that failed verification until they confirm it externally. It is a defensive hardening change, not an active vulnerability fix.", "author": "Craig Raw", "commit_message": "add bitbox02 attestation failed dialog", "message_quality_score": 45, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/sparrow-wallet/1a810c062044d3d432ec8e2cccd7eb5752d71221/"}, {"sha": "32f7e58f9eb5a9bb89fc9db6d1125fe3e26b2099", "project": "Sparrow Wallet", "vendor": "Sparrow", "title": "improve validation of payjoin proposals, and accept a substituted payment output where a change output is present", "committed_at": "2026-08-04T11:14:56+00:00", "severity": "moderate", "risk_score": 56, "summary": "This commit strengthens how Sparrow Wallet checks Payjoin proposals received from a payment receiver. Payjoin lets a receiver add their own inputs to a transaction to improve privacy. The changes add missing checks that could previously let a malicious or buggy receiver: (1) silently lower the transaction fee rate, (2) add key-path or signature data that leaks wallet information, (3) substitute the payment output even when no change output exists, or (4) return arbitrary error text that the wallet would show to the user. The patch also fixes handling for modern Taproot (P2TR) transactions, which were not being copied or validated correctly. A new set of unit tests confirms these protections.", "author": "Craig Raw", "commit_message": "improve validation of payjoin proposals, and accept a substituted payment output where a change output is present", "message_quality_score": 50, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/sparrow-wallet/32f7e58f9eb5a9bb89fc9db6d1125fe3e26b2099/"}, {"sha": "a4af9107d8d69c2ce4bf00b405031d34b30e0e36", "project": "Trezor firmware", "vendor": "Trezor", "title": "fix(python/trezorlib): enable entropy check on T1 by default", "committed_at": "2026-08-04T10:47:08+00:00", "severity": "low", "risk_score": 33, "summary": "This commit changes the Trezor Python library so that, when setting up a Trezor Model One (the original Trezor 1 device), it now performs an entropy check by default if the device runs firmware 1.13.1 or newer. Previously, the library only enabled this check on newer Trezor models and treated all Model One devices as not supporting it. An entropy check helps verify the device is generating randomness properly during wallet setup. The change is a defensive fix to enable a security feature on a previously excluded device line, not a patch for an active vulnerability.", "author": "Andrew Kozlik", "commit_message": "fix(python/trezorlib): enable entropy check on T1 by default", "message_quality_score": 67, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/a4af9107d8d69c2ce4bf00b405031d34b30e0e36/"}, {"sha": "43b2139227149c281141d08c612afd13c434d456", "project": "COLDCARD firmware", "vendor": "Coinkite", "title": "rng: discard 12 words after SEIS clear per RM0432 32.3.7", "committed_at": "2026-08-04T09:16:19+00:00", "severity": "moderate", "risk_score": 61, "summary": "This commit changes how the COLDCARD hardware wallet's random-number generator (RNG) recovers from a rare 'seed error' condition. The manufacturer is now following an STMicroelectronics guideline to throw away the first 12 random numbers after clearing the error, because those values could be left over from before the error and might be predictable. Random numbers are critical for creating private keys and transaction signatures, so using weak or stale randomness could in theory weaken security. The patch is defensive and does not by itself prove an attack exists.", "author": "scgbckbone", "commit_message": "rng: discard 12 words after SEIS clear per RM0432 32.3.7", "message_quality_score": 50, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/coldcard-firmware/43b2139227149c281141d08c612afd13c434d456/"}, {"sha": "866e98938062a56c5139c58c720253dc0e69d717", "project": "Sparrow Wallet", "vendor": "Sparrow", "title": "remove unused signature verification results in satochip and keycard signers, note where signatures are verified", "committed_at": "2026-08-04T08:49:22+00:00", "severity": "informational", "risk_score": 18, "summary": "This commit removes leftover code that checked whether signatures from hardware card signers were valid, but then threw away the result. The signatures are still verified later by a different part of the wallet when the signed transaction is combined. The change is essentially a cleanup with no known security flaw, though it slightly reduces defense-in-depth by removing an early, unused sanity check.", "author": "Craig Raw", "commit_message": "remove unused signature verification results in satochip and keycard signers, note where signatures are verified", "message_quality_score": 65, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/sparrow-wallet/866e98938062a56c5139c58c720253dc0e69d717/"}, {"sha": "6e403982898528db911fc89717d10787ed87218f", "project": "COLDCARD firmware", "vendor": "Coinkite", "title": "docs: why RNG clock errors don't invalidate RNG_DR", "committed_at": "2026-08-04T08:42:38+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit only adds explanatory comments to two source files about why the COLDCARD firmware ignores certain hardware random-number-generator clock-error flags. It does not change any code behavior. The comments cite ST documentation saying these clock errors do not affect the quality of random numbers and that a dead clock is still caught by a data-ready timeout. There is no security-relevant code change.", "author": "scgbckbone", "commit_message": "docs: why RNG clock errors don't invalidate RNG_DR", "message_quality_score": 74, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/coldcard-firmware/6e403982898528db911fc89717d10787ed87218f/"}, {"sha": "eab5bad366c580a386c765670f9ce8bd1ce76836", "project": "Hardware Wallet Interface", "vendor": "Bitcoin Core", "title": "test: make device signing cases more granular", "committed_at": "2026-08-04T08:42:09+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit only changes test code. It makes the automated test suite more flexible by letting device simulators opt out of one specific test case involving unusual key derivation paths, while still running the rest of the tests. There is no change to the actual wallet software that users run, and no security fix or vulnerability is present in the diff.", "author": "Sjors Provoost", "commit_message": "test: make device signing cases more granular\n\nMost device simulators accept arbitrary keypool paths, so keep testing\nthat behavior by default.\n\nSome devices enforce their own derivation path policies. Let those\nemulators opt out of the arbitrary-path portion while still running the\nremaining keypool checks.", "message_quality_score": 90, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/bitcoin-core-hwi/eab5bad366c580a386c765670f9ce8bd1ce76836/"}, {"sha": "17c78e301b897827cffa6babcb41cc2c43a34a8b", "project": "Keystone 3 firmware", "vendor": "Keystone", "title": "fix: remove insecure PRNG fallback", "committed_at": "2026-08-04T08:04:48+00:00", "severity": "moderate", "risk_score": 64, "summary": "This commit removes a weak, predictable random-number generator that was bundled as a backup inside the firmware's SLIP-39 code. Previously, if the device's proper hardware random source was accidentally left out of a build, the firmware could silently fall back to the weak generator, which would make wallet backup seeds predictable. Now the weak generator is gone for hardware builds, so a missing proper random source causes the build to fail instead of silently producing insecure seeds. The simulator still keeps a simple software-only stub for testing.", "author": "ww3512687", "commit_message": "fix: remove insecure PRNG fallback\n\nRemove trezor-crypto's unused LCG and weak fallback so device builds must link the platform random_buffer implementation. Keep a simulator-only standard library stub.\n\nCo-authored-by: Nikolaus Heger <nheger@gmail.com>", "message_quality_score": 80, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/keystone3-firmware/17c78e301b897827cffa6babcb41cc2c43a34a8b/"}, {"sha": "44aa469eeeddc9b37ded29184a068bdc21d5b471", "project": "Trezor firmware", "vendor": "Trezor", "title": "refactor(core): replace hexlify with bytes.hex()", "committed_at": "2026-08-03T18:44:04+00:00", "severity": "informational", "risk_score": 15, "summary": "This is a large but straightforward internal cleanup: the project switched from using the MicroPython `ubinascii` module's `hexlify`/`unhexlify` functions to the standard Python `bytes.hex()` and `bytes.fromhex()` methods. The change removes the `ubinascii` module from the firmware build and updates many source and test files to use the new built-in methods. There is no security fix or vulnerability being patched here.", "author": "Martin Milata", "commit_message": "refactor(core): replace hexlify with bytes.hex()\n\nRelevant micropython commits:\n  28aaab95909aab092cc8c16188fec157142f18a9 py/objstr: Add hex/fromhex to bytes/memoryview/bytearray.\n\n[no changelog]", "message_quality_score": 80, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/44aa469eeeddc9b37ded29184a068bdc21d5b471/"}, {"sha": "7ea111919be842449ef8590cae1b2f00fb35b51e", "project": "Trezor firmware", "vendor": "Trezor", "title": "refactor(core): use mp_obj_new_str_from_vstr", "committed_at": "2026-08-03T18:44:04+00:00", "severity": "informational", "risk_score": 17, "summary": "This is a code cleanup change in Trezor's firmware that swaps one MicroPython internal helper for another. It replaces calls that create byte or string objects from a vstr buffer with newer, purpose-built helpers. The commit message says the new string helper also does UTF-8 validation, which can be skipped where performance matters. The change itself does not introduce a known vulnerability; it is a refactor to match upstream MicroPython conventions.", "author": "Martin Milata", "commit_message": "refactor(core): use mp_obj_new_str_from_vstr\n\nThe str variant now also does UTF-8 validation which can be removed to\nimprove performance where justified.\n\nRelevant micropython commits:\n  0b9ee86133a2a0524691c6cdac209dbfcb3bf116 py: Add mp_obj_new_str_from_vstr, and use it where relevant.\n  88864587f5af292d7f86aceb6bf40e8331e9a8d6 py/objstr: Always ensure mp_obj_str_from_vstr is unicode-safe.\n\n[no changelog]", "message_quality_score": 70, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/7ea111919be842449ef8590cae1b2f00fb35b51e/"}, {"sha": "e1edbee0f49c902920d9fb26b0b0d4420a64cfd3", "project": "Trezor firmware", "vendor": "Trezor", "title": "refactor(core): fix renamed micropython modules", "committed_at": "2026-08-03T18:44:04+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit is a routine code cleanup that updates Trezor firmware to match a newer MicroPython version where built-in module names dropped the 'u' prefix (for example, 'uos' became 'os' and 'ustruct' became 'struct'). It renames imports, configuration flags, and source file references, and removes old mock files. There is no security fix or vulnerability here.", "author": "Martin Milata", "commit_message": "refactor(core): fix renamed micropython modules\n\nE.g. uos was renamed to os, uerrno to errno.\n\nRelevant micropython commits:\n  45ac651d1a2801bccbdc32fddaa9b029ed4ce879 all: Rename *umodule*.c to remove the \"u\" prefix.\n  f5f9edf6457624bf32e71b0c2fdcfbfa5d5753a6 all: Rename UMODULE to MODULE in preprocessor/Makefile vars.\n\n[no changelog]", "message_quality_score": 80, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/e1edbee0f49c902920d9fb26b0b0d4420a64cfd3/"}, {"sha": "053def4c1833f832519c6f64f98b7a8aebfc5bad", "project": "Trezor firmware", "vendor": "Trezor", "title": "refactor(core): get rid of the STATIC macro", "committed_at": "2026-08-03T18:44:04+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit is a large but purely mechanical code cleanup: it replaces the custom STATIC macro with the standard C keyword static across many MicroPython module files. There is no change to program logic, security boundaries, or behavior. It also removes build-system workarounds that were only needed because the old macro was being abused to expose internal functions.", "author": "Martin Milata", "commit_message": "refactor(core): get rid of the STATIC macro\n\nRelevant micropython changes:\n  decf8e6a8bb940d5829ca3296790631fcece7b21 all: Remove the \"STATIC\" macro and just use \"static\" instead.\n\n[no changelog]", "message_quality_score": 80, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/053def4c1833f832519c6f64f98b7a8aebfc5bad/"}, {"sha": "8c42be35c16f279fcadf3c934b2dc63d3aed2450", "project": "Core Lightning", "vendor": "Elements Project", "title": "tests: add regression test for hsmtool commands with passphrase", "committed_at": "2026-08-03T17:04:13+00:00", "severity": "informational", "risk_score": 12, "summary": "This commit only adds and updates a regression test in the project's test suite. It checks that the hsmtool utility correctly handles both empty and non-empty passphrases when working with BIP39 mnemonic-based wallet secrets. There is no change to the actual hsmtool or wallet code, so it does not introduce or fix a live security vulnerability on its own.", "author": "ekzyis", "commit_message": "tests: add regression test for hsmtool commands with passphrase", "message_quality_score": 60, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/core-lightning/8c42be35c16f279fcadf3c934b2dc63d3aed2450/"}, {"sha": "4c3064f56293ee11302359e7f86b1dc13d9d2c98", "project": "Electrum", "vendor": "Electrum", "title": "wallet: sign_message: strip whitespaces in GUIs, do not strip in CLI", "committed_at": "2026-08-03T14:46:45+00:00", "severity": "informational", "risk_score": 19, "summary": "This commit tidies up how Electrum handles extra spaces around Bitcoin addresses, messages, and signatures when signing or verifying messages. Previously, different parts of the program (desktop GUI, mobile-style GUI, command line) behaved inconsistently\u2014some trimmed spaces automatically, others did not. The change moves the trimming into the shared wallet code and makes it the default for GUIs, while the command-line tool now explicitly keeps spaces untouched. It is a user-experience and consistency fix, not a patch for an active security vulnerability.", "author": "SomberNight", "commit_message": "wallet: sign_message: strip whitespaces in GUIs, do not strip in CLI\n\n- stripping whitespaces leads to better UX for GUIs IMO, but it's counter-productive for CLI\n- our previous behaviour was unintentionally inconsistent:\n  - qt stripped the message in both sign and verify\n  - qml stripped the message in verify but not in sign (until #10787)\n  - cli stripped the message in both sign and verify\n  - qml also stripped the signature in verify, which was not done anywhere else\n- now this code is de-duped, and the default becomes stripping both message and signature; with the CLI explicitly opting out of that\n\nref https://github.com/spesmilo/electrum/issues/4327\ncloses https://github.com/spesmilo/electrum/pull/10787\ncloses https://github.com/spesmilo/electrum/pull/10788", "message_quality_score": 96, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/electrum/4c3064f56293ee11302359e7f86b1dc13d9d2c98/"}, {"sha": "37526ca430f00d74a77757260ab5f6191aa6314d", "project": "Core Lightning", "vendor": "Elements Project", "title": "wally: update libwally to v1.5.6", "committed_at": "2026-08-03T07:52:43+00:00", "severity": "low", "risk_score": 33, "summary": "This commit updates the bundled libwally library to version 1.5.6. The practical effect is that calling the JSON-RPC `signpsbt` command on a PSBT that is already signed now succeeds as a harmless no-op, instead of returning an error on Bitcoin networks. The underlying bug was in libwally's handling of duplicate Taproot keypath entries and was fixed in libwally v1.5.2.", "author": "daywalker90", "commit_message": "wally: update libwally to v1.5.6\n\nThis got fixed in libwally v1.5.2: https://github.com/ElementsProject/libwally-core/commit/7e483c049b0a4405801f010e60c9f0335d2a617f\n\n```\n    def test_sign_signed_psbt(node_factory, bitcoind, chainparams):\n        l1 = node_factory.get_node()\n        l1.fundwallet(10**6)\n\n        psbt = l1.rpc.txprepare([{l1.rpc.newaddr('bech32')['bech32']: 10000}])['psbt']\n        signed_psbt = l1.rpc.signpsbt(psbt)['signed_psbt']\n\n        if TEST_NETWORK != 'liquid-regtest':\n            # FIXME: ideally this would succeed, as a noop.  But it shouldn't crash\n>           with pytest.raises(RpcError):\n                 ^^^^^^^^^^^^^^^^^^^^^^^\nE           Failed: DID NOT RAISE <class 'pyln.client.lightning.RpcError'>\n```\n\nChangelog-Changed: Update libwally to v1.5.6\nChangelog-Fixed: JSON-RPC: `signpsbt` on an already-signed PSBT with taproot paths now succeeds as a no-op instead of failing.", "message_quality_score": 76, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/core-lightning/37526ca430f00d74a77757260ab5f6191aa6314d/"}, {"sha": "72507328fb3d3dd6972e5e1a38f87f3ea6cfbfa3", "project": "Electrum", "vendor": "Electrum", "title": "qml: strip whitespace from message before signing, as in qt gui", "committed_at": "2026-08-01T22:03:25+00:00", "severity": "informational", "risk_score": 19, "summary": "This commit fixes a minor consistency bug in Electrum's newer QML (mobile-style) user interface. When signing a message, the app now removes accidental spaces at the start or end of the message and address, just like the older desktop Qt interface already did. Without this fix, a message signed in the QML interface could fail verification because of stray whitespace. It is a usability/reliability fix, not a serious security vulnerability.", "author": "Ferdinando Ametrano", "commit_message": "qml: strip whitespace from message before signing, as in qt gui\n\nThe qt gui strips leading/trailing whitespace from the message (and\naddress) both when signing and when verifying (see #4327). The qml gui\nalready strips in verifyMessage (qedaemon.py), but not in signMessage:\na message with leading/trailing whitespace signed in the qml gui would\nproduce a signature that fails verification even in the same dialog.\n\nStrip in signMessage too, replicating the qt gui behaviour.\n\nrelated: https://github.com/spesmilo/electrum/issues/4327\nrelated: https://github.com/btclib-org/btclib/issues/200\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>", "message_quality_score": 96, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/electrum/72507328fb3d3dd6972e5e1a38f87f3ea6cfbfa3/"}, {"sha": "fc808059ff50d20dca510f3c9d3fa60b8bd24699", "project": "Krux", "vendor": "Krux", "title": "fix: verify PSBT input amounts before showing the fee", "committed_at": "2026-07-31T21:13:29+00:00", "severity": "high", "risk_score": 78, "summary": "This commit fixes a security flaw in Krux, a Bitcoin signing device. Before the fix, an attacker could trick the device into showing a low transaction fee on screen while actually signing a much higher fee. The fix makes the device verify that any attached previous transaction really matches the input being spent, and forces legacy (non-Segwit) inputs to include that previous transaction. It also makes sure the amount shown to the user is always the same amount the signature commits to. A small residual risk remains for multi-input Segwit transactions where previous transactions are not required.", "author": "odudex", "commit_message": "fix: verify PSBT input amounts before showing the fee\n\nDisplay, policy and sighash now all read inp.utxo, so the amount on the\nreview screen is the amount the signer commits to. Any attached previous\ntransaction must hash to the outpoint being spent, and legacy inputs\nrequire one since their sighash does not commit to the amount.", "message_quality_score": 95, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/krux/fc808059ff50d20dca510f3c9d3fa60b8bd24699/"}, {"sha": "d6813d88bd320d3806f91dd76a24a909eb86583c", "project": "Krux", "vendor": "Krux", "title": "fix: reject a PSBT whose outputs exceed its inputs", "committed_at": "2026-07-31T21:13:29+00:00", "severity": "moderate", "risk_score": 66, "summary": "This commit fixes a bug in Krux, a Bitcoin signing device, where a malformed transaction whose outputs spend more than its inputs could be loaded and shown to the user. Normally such a transaction is impossible on the Bitcoin network, but Krux would display it with a tiny negative fee and skip the high-fee warning, potentially tricking a user into approving a transaction that can never be mined. The fix now rejects these PSBTs immediately when loading them.", "author": "odudex", "commit_message": "fix: reject a PSBT whose outputs exceed its inputs\n\nSuch a transaction is invalid on chain, and it used to render as a small\nnegative fee with fee_percent clamped to 0.1, so the high fee warning\ndid not fire either. Fail at load instead.", "message_quality_score": 85, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/krux/d6813d88bd320d3806f91dd76a24a909eb86583c/"}, {"sha": "518b3314f9d0d6bbccf755b04f79034e19dbff0f", "project": "Krux", "vendor": "Krux", "title": "feat: warn when PSBT input amounts cannot be verified", "committed_at": "2026-07-31T21:13:29+00:00", "severity": "moderate", "risk_score": 62, "summary": "This commit adds a warning screen to Krux, a hardware signing device, when it is asked to sign a multi-input Bitcoin transaction where the amounts of some inputs cannot be independently verified. The risk is that a malicious transaction coordinator could trick a user into paying a much higher fee than shown, or into signing away more money than intended, by lying about input amounts during separate signing sessions. The patch does not block signing; it only warns the user and asks whether to proceed. It also does not fix the underlying cryptographic gap in older SegWit (BIP143) signatures, which is why the warning is needed.", "author": "odudex", "commit_message": "feat: warn when PSBT input amounts cannot be verified\n\nBIP143 commits only to the amount of the input being signed, so a\ncoordinator can declare a different input truthfully in each of two\nsessions and combine one valid signature per input. Warn when a\nnon-taproot PSBT has more than one input and any amount is unbacked\nby its previous transaction.\n\nThe warning states the risk rather than instructing the user, since a\nmalicious retry request is indistinguishable from a failed transfer,\nand signing the same transaction twice is legitimate when one person\nholds more than one key of a multisig.\n\nTranslations for the two new strings are still pending.", "message_quality_score": 90, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/krux/518b3314f9d0d6bbccf755b04f79034e19dbff0f/"}, {"sha": "5c4ece9a235892f052e585c246c84719c7d3a9d6", "project": "Krux", "vendor": "Krux", "title": "chore: bump MaixPy with Shannon changes and RNG removal", "committed_at": "2026-07-31T21:07:58+00:00", "severity": "moderate", "risk_score": 55, "summary": "This commit updates a bundled firmware component called MaixPy. The commit message says it fixes a 'Shannon heap overflow,' removes an unused random-number binding, and drops support for one hardware variant (Maix Bit). A heap overflow is a memory corruption bug that can sometimes be exploited to run attacker-controlled code, but the actual code change is just a one-line version bump of a submodule, so we cannot verify the fix from the diff alone.", "author": "odudex", "commit_message": "chore: bump MaixPy with Shannon changes and RNG removal\n\nFixes the shannon heap overflow, removes the unused os.urandom binding,\nand drops the Maix Bit build project.", "message_quality_score": 82, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/krux/5c4ece9a235892f052e585c246c84719c7d3a9d6/"}, {"sha": "8090ac73c0618b8fc319efe8ece1c4ec1e81a2b0", "project": "Krux", "vendor": "Krux", "title": "fix: remove Maix Bit and CIF camera support", "committed_at": "2026-07-31T20:52:19+00:00", "severity": "moderate", "risk_score": 52, "summary": "This commit removes support for an old, discontinued hardware device called the Maix Bit from the Krux Bitcoin wallet firmware. The commit message says the Maix Bit's camera resolution (CIF) was the only one that fed frames larger than QVGA into a 'shannon entropy' module, overflowing that module's scratch buffer by 49,152 bytes. In plain terms, this is a fix for a buffer overflow bug, but the fix is to delete the only hardware configuration that triggered it rather than enlarge the buffer. Because the device was already discontinued and reportedly has no users, the practical risk is low, but the underlying overflow condition is a real memory-safety issue.", "author": "odudex", "commit_message": "fix: remove Maix Bit and CIF camera support\n\nThe device was discontinued in 25.09.0 and has no known users. Its CIF\nframesize was the only caller that fed the shannon entropy module a frame\nlarger than QVGA, overflowing that module's scratch buffer by 49152 bytes.\n\nAlso drops the OV5642 sensor handling, which only the Maix Bit used.", "message_quality_score": 85, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/krux/8090ac73c0618b8fc319efe8ece1c4ec1e81a2b0/"}, {"sha": "1af862798a107e3339310de0b5ba1da2fb72deee", "project": "Ledger Bitcoin app", "vendor": "Ledger", "title": "Type consistency in psbt_parse_rawtx, and some other hardenings", "committed_at": "2026-07-31T12:44:04+00:00", "severity": "moderate", "risk_score": 59, "summary": "This commit hardens a Bitcoin transaction parser in Ledger's app. It changes some numeric fields to safer types, adds bounds checks on transaction counts and sizes, rejects extra trailing bytes after a transaction, checks a previously-ignored internal buffer operation, and zeroes out result memory before use. These are defensive fixes that could prevent memory corruption, incorrect parsing, or information leakage, but the commit does not describe a specific active exploit.", "author": "Salvatore Ingala", "commit_message": "Type consistency in psbt_parse_rawtx, and some other hardenings\n\nChange key_len and output_index to size_t for consistency with\nother APIs, add some extra bounds checks.\n\nAlso adds:\n- missing return value check on parser_consolidate_buffers\n- reject trailing data during parsing\n- zero txid_parser_outputs_t before starting parsing", "message_quality_score": 73, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/ledger-bitcoin-app/1af862798a107e3339310de0b5ba1da2fb72deee/"}, {"sha": "e86440ae2fec4f87573dc16c1ed786c2bccba6a2", "project": "Hardware Wallet Interface", "vendor": "Bitcoin Core", "title": "ledger: have sign_psbt return SignPsbtYieldedObject", "committed_at": "2026-07-31T07:49:34+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit is a straightforward internal code refactor for Ledger hardware wallet support. It changes the data structure returned when signing a Bitcoin transaction from a simple tuple of raw bytes to a more descriptive object that can carry extra context for newer Taproot-style signatures. There is no indication this fixes a security bug or introduces a vulnerability; it is a compatibility and maintainability update taken from Ledger's own upstream code.", "author": "Sjors Provoost", "commit_message": "ledger: have sign_psbt return SignPsbtYieldedObject\n\nTaken from LedgerHQ/app-bitcoin-new at 2.4.1", "message_quality_score": 65, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/bitcoin-core-hwi/e86440ae2fec4f87573dc16c1ed786c2bccba6a2/"}, {"sha": "fc206450e71cf07b2211a06d606ca7567bcc9170", "project": "Hardware Wallet Interface", "vendor": "Bitcoin Core", "title": "ledger: handle script path signatures", "committed_at": "2026-07-31T07:49:34+00:00", "severity": "low", "risk_score": 40, "summary": "This commit updates the Ledger hardware wallet driver in HWI so it can correctly store Taproot script-path signatures in a PSBT, not just key-path signatures. Previously, the code had a placeholder that always treated any Taproot signature as a key-path signature. For users spending via a Taproot script path (for example, a multisig or timelock branch), the signature would have been placed in the wrong field, likely causing the PSBT to be invalid or incomplete. There is no direct evidence in the commit of an exploitable vulnerability; it appears to be a correctness/functional fix for an unimplemented feature.", "author": "Sjors Provoost", "commit_message": "ledger: handle script path signatures", "message_quality_score": 45, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/bitcoin-core-hwi/fc206450e71cf07b2211a06d606ca7567bcc9170/"}, {"sha": "511018ea272470da921ef74fcd501723465e3825", "project": "BitBox02 firmware", "vendor": "BitBox", "title": "rust: initialize C output buffers", "committed_at": "2026-07-31T07:11:52+00:00", "severity": "low", "risk_score": 39, "summary": "This commit fixes a class of low-level memory-safety bugs where Rust code was given buffers containing uninitialized bytes. Rust's rules require every byte of a slice to be initialized, even if the function will overwrite them. Passing uninitialized memory could let the compiler make unsafe assumptions, but the commit message says no actual exploit or data leak was observed. The fix initializes buffers before handing them to Rust and switches some helpers to use raw pointers so they can legally write into uninitialized memory.", "author": "benma's agent", "commit_message": "rust: initialize C output buffers\n\nRust slices require every byte in their backing storage to be initialized,\neven when a function only intends to overwrite the bytes. Several C callers\npassed uninitialized output buffers through BytesMut, and SHA/HMAC created\nmutable slices directly from such pointers. This was formal UB and could\nallow optimizer-dependent behavior.\n\nIn practice, these paths only wrote their outputs before C consumed them, and\ncurrent builds emitted the expected stores. No secret disclosure, corrupted\noutput, or control-flow impact was observed. This is hardening rather than a\nfix for a demonstrated exploit.\n\nInitialize C storage before constructing BytesMut. Keep output-only helpers on\nraw pointers so they can legally initialize storage, and document the FFI\ninvariant. Raw-pointer APIs that already used direct stores remain valid.", "message_quality_score": 73, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/bitbox02-firmware/511018ea272470da921ef74fcd501723465e3825/"}, {"sha": "ca72463709f4e3f8964952039d5caf955f566a87", "project": "COLDCARD firmware", "vendor": "Coinkite", "title": "fixes rng", "committed_at": "2026-07-31T05:15:38+00:00", "severity": "critical", "risk_score": 91, "summary": "This commit fixes a critical random-number bug in COLDCARD hardware wallets. The device was accidentally using a weak, software-based fallback random generator instead of its secure hardware one when creating Bitcoin seed phrases. Because the fallback generator had very little real randomness, attackers who captured a public transaction or signature could potentially figure out the wallet's private keys and steal funds. The patch forces the build to use the hardware random source and adds a build-time check to make sure the weak fallback is never linked in again. Coinkite issued an emergency hotfix and warned users to move funds from wallets created with affected firmware.", "author": "Peter D. Gray", "commit_message": "fixes rng", "message_quality_score": 0, "message_quality_label": "Opaque", "message_quality_flags": ["Very short subject", "Too few words to establish purpose", "No meaningful explanatory body", "Opaque security-relevant change"], "url": "https://www.commitwatch.org/watch/coldcard-firmware/ca72463709f4e3f8964952039d5caf955f566a87/"}, {"sha": "e7894ee6c16290b3dfdd6018407aa3ecb5e917e8", "project": "libwally-core", "vendor": "Elements Project", "title": "sign: disallow overlong der encodings and zero r or s values", "committed_at": "2026-07-31T01:38:55+00:00", "severity": "moderate", "risk_score": 62, "summary": "This commit tightens signature validation in a cryptographic library. It now rejects malformed DER-encoded signatures that are longer than allowed, or where one of the signature numbers (R or S) is zero. Previously, the underlying secp256k1 library would accept these invalid forms silently, which could lead to later failures or unexpected behavior when the signatures are used in Bitcoin/Elements transactions.", "author": "Jon Griffiths", "commit_message": "sign: disallow overlong der encodings and zero r or s values\n\nlibsecp will happily parse and return such signatures without error,\nhowever they can never be valid (in the overlong case, because libsecp\ninternally sets R to zero). Reject them up-front when parsing rather\nthan failing when attempting to use them later.", "message_quality_score": 85, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/libwally-core/e7894ee6c16290b3dfdd6018407aa3ecb5e917e8/"}, {"sha": "071b1e24c4c4703b65e4112cefa41d112bcc4968", "project": "Electrum", "vendor": "Electrum", "title": "trezor: drop session after closing it", "committed_at": "2026-07-30T10:18:19+00:00", "severity": "low", "risk_score": 25, "summary": "This commit fixes a bug in Electrum's support for Trezor hardware wallets. After a Trezor session times out or is closed, Electrum now forgets the old session ID. Previously it kept the stale session ID, so the next attempt to sign a transaction would crash with an InvalidSessionError instead of asking the user for their PIN again. It is a usability/reliability fix, not a direct theft-of-funds vulnerability, because the failure mode was a crash rather than an unauthorized transaction.", "author": "f321x", "commit_message": "trezor: drop session after closing it\n\nSet `TrezorClientBase._session = None` after closing a session\n(e.g. after session timeout) so the next session access will prompt\nfor the pin on the device instead of throwing an `InvalidSessionError`\nwhen trying to access the device.\n\nE.g. when trying to sign a tx after the session timed out:\n```\n 80.64 | I | plugins.trezor.clientbase.TrezorClientBase | timed out\n 80.64 | I | plugins.trezor.clientbase.TrezorClientBase | clear session: <electrum.plugins.trezor.clientbase.TrezorClientBase object at 0x7f24cd34f080>\n 80.64 | I | plugins.trezor.clientbase.TrezorClientBase | locking: <trezorlib.protocol_v1.TrezorClientV1 object at 0x7f24cd34e160>\n 80.90 | I | plugins.trezor.clientbase.TrezorClientBase | closing: SessionV1(id=d5e6015e501acf4b10b3a3e50f1f9307768e434330568e7d5e7b1babed066438)\n112.83 | I | plugin.DeviceMgr | getting client for keystore\n112.83 | I | plugin.DeviceMgr | end client for keystore\n113.10 | I | plugin.DeviceMgr | getting client for keystore\n113.10 | I | plugin.DeviceMgr | end client for keystore\n113.11 | E | gui.qt.main_window.[trezor] | on_error\nTraceback (most recent call last):\n  File \"/var/home/user/code/code_vm/electrum/electrum/gui/common_qt/util.py\", line 165, in run\n    result = task.task()\n  File \"/var/home/user/code/code_vm/electrum/electrum/wallet.py\", line 2822, in sign_transaction\n    k.sign_transaction(tmp_tx, password)\n    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^\n  File \"/var/home/user/code/code_vm/electrum/electrum/plugins/trezor/trezor.py\", line 100, in sign_transaction\n    self.plugin.sign_transaction(self, tx, prev_tx)\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^\n  File \"/var/home/user/code/code_vm/electrum/electrum/plugin.py\", line 1000, in wrapper\n    return run_in_hwd_thread(partial(func, *args, **kwargs))\n  File \"/var/home/user/code/code_vm/electrum/electrum/plugin.py\", line 993, in run_in_hwd_thread\n    return fut.result()\n           ~~~~~~~~~~^^\n  File \"/usr/lib64/python3.14/concurrent/futures/_base.py\", line 454, in result\n    return self.__get_result()\n           ~~~~~~~~~~~~~~~~~^^\n  File \"/usr/lib64/python3.14/concurrent/futures/_base.py\", line 396, in __get_result\n    raise self._exception\n  File \"/usr/lib64/python3.14/concurrent/futures/thread.py\", line 86, in run\n    result = ctx.run(self.task)\n  File \"/usr/lib64/python3.14/concurrent/futures/thread.py\", line 73, in run\n    return fn(*args, **kwargs)\n  File \"/var/home/user/code/code_vm/electrum/electrum/plugins/trezor/trezor.py\", line 344, in sign_transaction\n    signatures, _ = client.sign_tx(self.get_coin_name(),\n                    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^\n                                   inputs, outputs,\n                                   ^^^^^^^^^^^^^^^^\n    ...<3 lines>...\n                                   serialize=False,\n                                   ^^^^^^^^^^^^^^^^\n                                   prev_txes=prev_tx)\n                                   ^^^^^^^^^^^^^^^^^^\n  File \"/var/home/user/code/code_vm/electrum/electrum/plugin.py\", line 1000, in wrapper\n    return run_in_hwd_thread(partial(func, *args, **kwargs))\n  File \"/var/home/user/code/code_vm/electrum/electrum/plugin.py\", line 990, in run_in_hwd_thread\n    return func()\n  File \"/var/home/user/code/code_vm/electrum/electrum/plugins/trezor/clientbase.py\", line 356, in sign_tx\n    return trezorlib.btc.sign_tx(self.session, *args, **kwargs)\n           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/var/home/user/code/code_vm/electrum/env/lib64/python3.14/site-packages/trezorlib/tools.py\", line 379, in wrapper\n    result = self.func(session, *args, **kwargs)\n  File \"/var/home/user/code/code_vm/electrum/env/lib64/python3.14/site-packages/trezorlib/btc.py\", line 329, in sign_tx\n    res = session.call(signtx, expect=messages.TxRequest)\n  File \"/var/home/user/code/code_vm/electrum/env/lib64/python3.14/site-packages/trezorlib/client.py\", line 113, in call\n    raise exceptions.InvalidSessionError(self.id)\ntrezorlib.exceptions.InvalidSessionError: b'\\xd5\\xe6\\x01^P\\x1a\\xcfK\\x10\\xb3\\xa3\\xe5\\x0f\\x1f\\x93\\x07v\\x8eCC0V\\x8e}^{\\x1b\\xab\\xed\\x06d8'\n```", "message_quality_score": 68, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/electrum/071b1e24c4c4703b65e4112cefa41d112bcc4968/"}, {"sha": "cf797ea0f4f5f94f2dc4e8429259159b2a1eb8a1", "project": "Sparrow Wallet", "vendor": "Sparrow", "title": "add option to ignore dust on private key sweep", "committed_at": "2026-07-29T10:31:28+00:00", "severity": "informational", "risk_score": 19, "summary": "This commit adds a user-facing checkbox labeled 'Ignore dust' to the private-key sweep feature in Sparrow Wallet. When enabled, very small ('dust') unspent outputs linked to the swept key are excluded from the transaction. This is a usability and privacy improvement, not a security fix, because dust outputs are often sent by third parties to track wallets or to make sweeps uneconomical due to fees. There is no evidence in the commit or supplied references that this addresses a vulnerability or was disclosed as a security issue.", "author": "nroktib", "commit_message": "add option to ignore dust on private key sweep", "message_quality_score": 50, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/sparrow-wallet/cf797ea0f4f5f94f2dc4e8429259159b2a1eb8a1/"}, {"sha": "5f756282f2593b826b188f7813c06eb6c256e39f", "project": "Trezor firmware", "vendor": "Trezor", "title": "fix(core/bootloader): correct \"Change FW vendor\" title", "committed_at": "2026-07-29T06:08:23+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit changes a single on-screen label in the Trezor bootloader from lowercase 'Change fw vendor' to uppercase 'Change FW vendor'. It is purely a cosmetic wording fix with no security relevance.", "author": "Roman Zeyde", "commit_message": "fix(core/bootloader): correct \"Change FW vendor\" title\n\n[no changelog]", "message_quality_score": 62, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/5f756282f2593b826b188f7813c06eb6c256e39f/"}, {"sha": "0feb0b96dacc9b9efb6d6e2595b50a9f3de73d79", "project": "Trezor firmware", "vendor": "Trezor", "title": "feat(clear_signing): calldata array support", "committed_at": "2026-07-29T00:38:10+00:00", "severity": "low", "risk_score": 30, "summary": "This commit adds support in Trezor's Ethereum clear-signing feature for transactions that contain multiple embedded subcalls (like a multicall). Previously, only a single embedded call could be clearly displayed. The change lets the device show each subcall separately with labels like \"(Subcall #1)\" and handles both a single shared recipient address or a parallel list of recipients. It is a feature addition, not a fix for a known vulnerability.", "author": "PrisionMike", "commit_message": "feat(clear_signing): calldata array support", "message_quality_score": 57, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/0feb0b96dacc9b9efb6d6e2595b50a9f3de73d79/"}, {"sha": "0de94b8aa39567743d354076fa9c1567cde2e29b", "project": "Trezor firmware", "vendor": "Trezor", "title": "test(clear signing): multiple calldata", "committed_at": "2026-07-29T00:38:10+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit only adds new automated tests for Trezor's Ethereum 'clear signing' feature. It includes a test case for an Aave multi-call transaction, a matching test data blob, and expected screen snapshots for different device models and languages. There are no changes to the actual firmware code that runs on the device, so this commit does not introduce or fix a security vulnerability.", "author": "PrisionMike", "commit_message": "test(clear signing): multiple calldata\n\n[no changelog]", "message_quality_score": 67, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/0de94b8aa39567743d354076fa9c1567cde2e29b/"}, {"sha": "e66522375b5eb4a69926716585d5b9006de0669f", "project": "rust-lightning", "vendor": "Lightning Dev Kit", "title": "Include to_self_delay size in DelayedPaymentOutput weight calculation", "committed_at": "2026-07-28T22:12:12+00:00", "severity": "low", "risk_score": 26, "summary": "This commit fixes a small accounting bug in how the Lightning wallet estimates the size (and therefore transaction fee) of a special Bitcoin transaction that sweeps funds back to the user after a channel closes. The old code always assumed the largest possible 4-byte encoding of a delay value, even when the real value used only 1 byte. That could make the fee estimate slightly too high and, in rare cases with a short digital signature, trigger an internal debug-only assertion failure. The fix computes the exact size based on the actual delay value and adds a regression test. It is not a remote exploit and does not risk loss of funds.", "author": "Matt Morehouse", "commit_message": "Include to_self_delay size in DelayedPaymentOutput weight calculation\n\nSpendableOutputDescriptor::create_spendable_outputs_psbt estimated the\nwitness weight of a to_local (DelayedPaymentOutput) input using\nMAX_WITNESS_LENGTH, which assumes the maximum 4-byte OP_CSV push of\nto_self_delay in the redeemscript.  The real push can be as small as 1\nbyte for small to_self_delays, causing the estimate to overshoot by up\nto 3 WU.  If this overshoot occurred in addition to a short signature,\nthe max-overshoot debug_assert in KeysManager::spend_spendable_outputs\nwould fail.\n\nAdd DelayedPaymentOutput::max_witness_length, which computes the witness\nlength from the descriptor's actual to_self_delay, and use it in place\nof the MAX_WITNESS_LENGTH constant.  This produces a more accurate\nweight estimate so that the debug_assert in spend_spendable_outputs\nnever fails.\n\nThis bug was discovered using Smite.", "message_quality_score": 90, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/rust-lightning/e66522375b5eb4a69926716585d5b9006de0669f/"}, {"sha": "4b25321c6ba8a4e2ddce585a3e40f5940a4eac32", "project": "Trezor firmware", "vendor": "Trezor", "title": "feat(clear_signing): Add enum formatter - core", "committed_at": "2026-07-28T20:36:36+00:00", "severity": "informational", "risk_score": 21, "summary": "This commit adds a new display formatter for Ethereum clear signing. It lets a transaction descriptor map numeric enum values (like 1 or 2) to human-readable labels (like 'stable' or 'variable') on the Trezor screen. The change is purely additive and includes tests. There is no indication it fixes a security bug or introduces a vulnerability; it is a feature implementation.", "author": "PrisionMike", "commit_message": "feat(clear_signing): Add enum formatter - core\n\n[no changelog]", "message_quality_score": 57, "message_quality_label": "Thin", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/4b25321c6ba8a4e2ddce585a3e40f5940a4eac32/"}, {"sha": "b2d824356ffdbd9fbd78dc18e83028d3124cdedb", "project": "Trezor firmware", "vendor": "Trezor", "title": "test(clear_signing): add enum formatter device test.", "committed_at": "2026-07-28T20:36:36+00:00", "severity": "informational", "risk_score": 23, "summary": "This commit is a test-only addition for Trezor's Ethereum 'clear signing' feature. It adds new test cases and makes a small production-code tweak so that enum display-formatters can accept byte values (converted to integers). The change is not described as a security fix, and the production change is minor and defensive: it broadens accepted input types rather than fixing a crash or bypass. There is no evidence of a disclosed vulnerability or exploit.", "author": "PrisionMike", "commit_message": "test(clear_signing): add enum formatter device test.\n\n[no changelog]", "message_quality_score": 72, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/b2d824356ffdbd9fbd78dc18e83028d3124cdedb/"}, {"sha": "ce2282bd2f630fc2211b06f9954d5e76e88b5a81", "project": "Trezor firmware", "vendor": "Trezor", "title": "fix(clear_signing): double display of amount.", "committed_at": "2026-07-28T20:36:36+00:00", "severity": "informational", "risk_score": 19, "summary": "This commit fixes a user-interface bug in Trezor's Ethereum 'clear signing' flow where the transaction's native ETH amount could be shown twice on the device screen. The old code tried to avoid duplication by checking whether an 'AmountFormatter' field was present, but that check missed cases where the same amount was rendered by other field types. The new code compares the actual rendered strings and suppresses the summary amount only when it exactly matches a field already displayed. There is no security vulnerability here; it is purely a display-quality fix.", "author": "PrisionMike", "commit_message": "fix(clear_signing): double display of amount.\n\n- compare rendered strings now.\n- small typo in a test fixture name.\n\n[no changelog]", "message_quality_score": 82, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/ce2282bd2f630fc2211b06f9954d5e76e88b5a81/"}, {"sha": "701624d38f31a16410a3ffe4a02d22b8f8067f50", "project": "Trezor firmware", "vendor": "Trezor", "title": "test(clear_signing): add device test for calldata formatter.", "committed_at": "2026-07-28T20:36:36+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit only adds a new automated test case for an existing Ethereum transaction display feature. It does not change any production firmware code, so it cannot introduce a security vulnerability or fix one. It is purely a test-data addition.", "author": "PrisionMike", "commit_message": "test(clear_signing): add device test for calldata formatter.", "message_quality_score": 72, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/701624d38f31a16410a3ffe4a02d22b8f8067f50/"}, {"sha": "570eb8682ce9edcdf6979204f08de4621ead414d", "project": "Trezor firmware", "vendor": "Trezor", "title": "feat(clear_signing): support for calldata formatter. - core changes", "committed_at": "2026-07-28T20:36:36+00:00", "severity": "low", "risk_score": 39, "summary": "This commit adds a new Trezor firmware feature called 'clear signing' for nested Ethereum calls. It lets the device understand when a transaction wraps another contract call (like a router or multicall) and tries to show the user readable details about the inner call instead of just a blob of hex. The change is a feature addition with built-in safeguards: nested parsing is limited to one level, ambiguous fields like sender and value are blocked inside nested calls, and failures fall back to showing raw hex rather than aborting the whole transaction. There is no indication in the commit that this fixes a known security bug; it reads as a defensive new capability.", "author": "PrisionMike", "commit_message": "feat(clear_signing): support for calldata formatter. - core changes\n\n[no changelog]", "message_quality_score": 62, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/570eb8682ce9edcdf6979204f08de4621ead414d/"}, {"sha": "0d2cc2acabbce0c548944600dfac376140c290f7", "project": "Trezor firmware", "vendor": "Trezor", "title": "feat(common,core,python,tests): migrate Soroban authorization to SOROBAN_CREDENTIALS_ADDRESS_V2.", "committed_at": "2026-07-28T13:45:26+00:00", "severity": "low", "risk_score": 29, "summary": "This commit updates Trezor's Stellar/Soroban smart-contract support to match a newer Stellar protocol version (Protocol 27). It renames the credential type from the older SOROBAN_CREDENTIALS_ADDRESS to SOROBAN_CREDENTIALS_ADDRESS_V2 and updates the related field name from address to address_v2 across the firmware, Python library, Rust client, and tests. The older credential type is intentionally no longer supported. There is no direct evidence in the commit of a security vulnerability being fixed; it reads as a routine protocol compatibility update.", "author": "Jun Luo", "commit_message": "feat(common,core,python,tests): migrate Soroban authorization to SOROBAN_CREDENTIALS_ADDRESS_V2.\n\n[no changelog]", "message_quality_score": 77, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/0d2cc2acabbce0c548944600dfac376140c290f7/"}, {"sha": "6008cc2538c2862181ef2a525e4610a468b51364", "project": "Trezor firmware", "vendor": "Trezor", "title": "feat(common,core,python,tests): support signing Stellar Soroban authorization entries.", "committed_at": "2026-07-28T13:45:26+00:00", "severity": "low", "risk_score": 36, "summary": "This commit adds a new Trezor feature that lets users sign Stellar Soroban smart-contract authorization entries. The device now supports a new message type where it derives the user's Stellar address, shows confirmation screens, and produces an Ed25519 signature over a protocol-defined authorization payload. The change is a feature addition rather than a bug fix, and the signing flow includes user confirmation steps.", "author": "Jun Luo", "commit_message": "feat(common,core,python,tests): support signing Stellar Soroban authorization entries.\n\nFixes: https://github.com/trezor/trezor-firmware/issues/7312", "message_quality_score": 100, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/6008cc2538c2862181ef2a525e4610a468b51364/"}, {"sha": "7251192703a5c9e38e859f6b80866070e9e10e7e", "project": "Trezor firmware", "vendor": "Trezor", "title": "test(stellar): add Soroban authorization signing tests.", "committed_at": "2026-07-28T13:45:26+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit only adds new automated tests for signing Stellar Soroban authorizations. It does not change any production firmware, wallet logic, or cryptographic code. There is no security vulnerability here.", "author": "Jun Luo", "commit_message": "test(stellar): add Soroban authorization signing tests.\n\n[no changelog]", "message_quality_score": 77, "message_quality_label": "Adequate", "message_quality_flags": ["No meaningful explanatory body"], "url": "https://www.commitwatch.org/watch/trezor-firmware/7251192703a5c9e38e859f6b80866070e9e10e7e/"}, {"sha": "5f24e1572bbae8a4710459ad218e0e42916494e0", "project": "Trezor firmware", "vendor": "Trezor", "title": "refactor(core/stellar): move generic Soroban writers to writers.py.", "committed_at": "2026-07-28T13:45:26+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit is a straightforward code cleanup: it moves several Stellar Soroban serialization helper functions from an operation-specific file into a shared writers module so both transaction signing and standalone authorization signing can use the same code. No behavior changes, bug fixes, or security fixes are visible in the diff.", "author": "Jun Luo", "commit_message": "refactor(core/stellar): move generic Soroban writers to writers.py.\n\nSCVal, SCAddress and authorized-invocation writers are used by both the\ntransaction flow and the standalone authorization signing flow, so they\nare no longer operation-specific.\n\n[no changelog]", "message_quality_score": 90, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/5f24e1572bbae8a4710459ad218e0e42916494e0/"}, {"sha": "9ce451bd29f143d57515dc934ac9e7fd71e4c288", "project": "Trezor firmware", "vendor": "Trezor", "title": "refactor(core/stellar): move generic Soroban layout helpers to layout.py.", "committed_at": "2026-07-28T13:45:26+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit is a straightforward code cleanup: it moves helper functions for formatting Stellar Soroban smart-contract values and showing confirmation screens from one file to another shared file. No security behavior changes are visible in the diff. The only functional tweak is narrowing an exception handler from a broad 'except Exception' to 'except OverflowError' when formatting timestamps, which is a minor hardening improvement, not a vulnerability.", "author": "Jun Luo", "commit_message": "refactor(core/stellar): move generic Soroban layout helpers to layout.py.\n\nSCVal formatting and invocation confirmation helpers are used by both\nthe transaction flow and the standalone authorization signing flow, so\nthey are no longer operation-specific.\n\n[no changelog]", "message_quality_score": 90, "message_quality_label": "Strong", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/trezor-firmware/9ce451bd29f143d57515dc934ac9e7fd71e4c288/"}, {"sha": "bc02101173c89bc34f572926ed5868dabb0e4908", "project": "Core Lightning", "vendor": "Elements Project", "title": "wallet: record bwatch-discovered wallet outputs", "committed_at": "2026-07-27T23:30:11+00:00", "severity": "low", "risk_score": 32, "summary": "This commit adds new wallet bookkeeping code for Core Lightning. It records Bitcoin deposits found by a new chain-watcher ('bwatch') into database tables and handles blockchain reorganizations by demoting transactions back to unconfirmed rather than deleting them. It is a feature/refactoring commit, not a fix for a known vulnerability, and the commit message does not describe any security issue.", "author": "Sangbida Chaudhuri", "commit_message": "wallet: record bwatch-discovered wallet outputs\n\nAdd the wallet helpers and watch handlers that turn a bwatch\nscriptpubkey match into our_txs and our_outputs rows.  They validate\nthe matching output, notify invoice accounting, record confirmed\ndeposits, and install watches for later spends.\n\nThe watch_revert handler demotes the rows back to unconfirmed (the 0\nsentinel) rather than deleting them: a row also carries state a\nrediscovery cannot restore (reserved_til, onchaind close metadata),\nand the still-armed watches re-promote it if the tx confirms again.\nThis matches the legacy tables, whose blocks(height) foreign keys\ndemote rows to NULL when the block row is removed.\n\nUnlike got_utxo(), this path does not write transaction_annotations:\nnothing reads per-transaction annotations anymore, so only the legacy\nscanner keeps populating them (for downgrade, like the other legacy\ntables).\n\nThe watchman dispatch entry is wired in the following commit.  Keep this\npath alongside got_utxo() and wallet_transaction_add(): the legacy\nscanner must continue populating outputs and transactions for one release\nso downgrades do not require a rescan.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>", "message_quality_score": 68, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/core-lightning/bc02101173c89bc34f572926ed5868dabb0e4908/"}, {"sha": "b8a605791f37265a9798b627e61d2597e92bd09f", "project": "Core Lightning", "vendor": "Elements Project", "title": "wallet: rename b32script to scriptpubkey in PSBT change paths", "committed_at": "2026-07-27T23:30:11+00:00", "severity": "informational", "risk_score": 15, "summary": "This commit is a simple variable rename inside a Bitcoin/Lightning wallet file. The old name 'b32script' suggested all change addresses were bech32 format, but the project now uses a newer address type (p2tr) by default. The developer renamed the variable to 'scriptpubkey' to avoid confusion and removed an unused header file. No behavior of the program changes.", "author": "Sangbida Chaudhuri", "commit_message": "wallet: rename b32script to scriptpubkey in PSBT change paths\n\nChange addresses are no longer bech32-only (p2tr is the default form),\nso the old name was misleading.  Pure rename, no functional change;\nalso drop the unused txfilter.h include.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>", "message_quality_score": 73, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/core-lightning/b8a605791f37265a9798b627e61d2597e92bd09f/"}, {"sha": "4a951d659a42be2f8ed2b6c6ff36a14559bc90f4", "project": "Core Lightning", "vendor": "Elements Project", "title": "wallet: register scriptpubkey watches at startup", "committed_at": "2026-07-27T23:30:11+00:00", "severity": "low", "risk_score": 44, "summary": "This change makes Core Lightning register long-lasting 'watches' for all wallet deposit addresses when the node starts up, so the new bwatch plugin can spot incoming payments from the first block it scans. It also removes a now-redundant per-transaction watch on unconfirmed change outputs. The patch is a functional improvement for the experimental bwatch feature, not a clear-cut security fix, but a missing or incomplete watch could in principle cause deposits to be overlooked.", "author": "Sangbida Chaudhuri", "commit_message": "wallet: register scriptpubkey watches at startup\n\ninit_wallet_scriptpubkey_watches walks every HD key (BIP32 + BIP86) up\nto {bip32,bip86}_max_index + keyscan_gap and arms a watch for each\nform, so bwatch can report deposits from the very first block it\nscans.  wallet_get_newindex does the same for fresh keys, keeping\ncoverage as the wallet grows.\n\nThe per-UTXO watch on unconfirmed change is now redundant (the\nperennial per-key watch already covers that scriptpubkey), so drop it.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>", "message_quality_score": 78, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/core-lightning/4a951d659a42be2f8ed2b6c6ff36a14559bc90f4/"}, {"sha": "ea4d1fca084750ecff674876cf11476a9bc03dbb", "project": "Core Lightning", "vendor": "Elements Project", "title": "wallet: add our_outputs + our_txs schema migrations", "committed_at": "2026-07-27T23:30:11+00:00", "severity": "informational", "risk_score": 18, "summary": "This commit only adds two new empty database tables (our_outputs and our_txs) to Core Lightning's wallet. It is a preparatory schema change for a future feature; no code reads from or writes to these tables yet, and no existing behavior is changed. There is no direct security vulnerability here, though any new table design could later affect how safely wallet data is tracked.", "author": "Sangbida Chaudhuri", "commit_message": "wallet: add our_outputs + our_txs schema migrations\n\nThe next commits move wallet UTXO and tx tracking off chaintopology and\nonto bwatch.  bwatch doesn't maintain a blocks table, but the legacy\nutxoset, transactions and channeltxs tables all have FOREIGN KEY\nreferences into blocks(height) (CASCADE / SET NULL), so we can't just\nretarget the existing tables.\n\nInstead, introduce parallel tables (our_outputs, our_txs) without the\nblocks(height) FK.  The new bwatch-driven code writes only to these,\nthe legacy tables stay populated by the existing code path during this\nrelease so downgrade still works, and a future release can drop them\nonce we're past the downgrade window.\n\nLosing the FK also changes what NULL means.  In the legacy tables a\nNULL blockheight was never written by hand: the ON DELETE SET NULL\ntrigger produced it when a reorg deleted the block row.  These tables\nhave no such trigger, so unconfirmed is stored as blockheight 0\n(NOT NULL) instead, for three reasons:\n\n- everything feeding these tables already speaks u32-with-0: watchman\n  notifications carry blockheight as a required JSON number, and\n  wallet_transaction_height() has always returned 0 for unconfirmed,\n  so values bind straight through without a NULL/non-NULL branch at\n  every read and write site;\n\n- integer comparisons keep working: the unconfirmed->confirmed\n  promotion is a single \"WHERE blockheight < ?\" (0 sorts below any\n  real height) and reorg rollback is \"SET blockheight = 0 WHERE\n  blockheight >= ?\", where a NULL row would match neither;\n\n- it removes the footgun the legacy code warned about (\"Note:\n  blockheight=NULL is not the same as is NULL!\"), where lookups had\n  to branch between \"= ?\" and \"IS NULL\".\n\nThe same logic gives txindex 0 = unconfirmed/unknown (a *confirmed*\ntxindex of 0 means coinbase, which blockheight disambiguates) and\nreserved_til 0 = not reserved.  NULL survives only where 0 is a real\nvalue or genuinely ambiguous: spendheight (NULL = unspent),\nchannel_dbid, commitment_point.\n\nSchema only here \u2014 wallet handlers that write into these tables and the\nbackfill from outputs/transactions land in subsequent commits.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>", "message_quality_score": 73, "message_quality_label": "Adequate", "message_quality_flags": [], "url": "https://www.commitwatch.org/watch/core-lightning/ea4d1fca084750ecff674876cf11476a9bc03dbb/"}]}