CVE-2026-65058 Overview
CVE-2026-65058 is a confirmation-binding flaw in Trezor Safe 3, Safe 5, and Safe 7 firmware. The vulnerability affects the Ethereum sign_tx and sign_tx_eip1559 flows used for contract interactions. The device displays only the initial calldata chunk for user confirmation, while the cryptographic signature commits to the full streamed calldata. An attacker can present benign calldata to the victim for on-device review, then supply a different calldata tail that alters the signed transaction. The issue is tracked under [CWE-358: Improperly Implemented Security Check for Standard] and was fixed in commit 70c9b0c.
Critical Impact
An attacker with control of the host can obtain a valid Ethereum transaction signature for calldata that was never fully shown to the user, defeating the hardware wallet's What-You-See-Is-What-You-Sign guarantee for contract interactions.
Affected Products
- Trezor Safe 3 firmware prior to commit 70c9b0c
- Trezor Safe 5 firmware prior to commit 70c9b0c
- Trezor Safe 7 firmware prior to commit 70c9b0c
Discovery Timeline
- 2026-07-21 - CVE-2026-65058 published to NVD
- 2026-07-22 - Last updated in NVD database
Technical Details for CVE-2026-65058
Vulnerability Analysis
The flaw lives in the Ethereum signing flow of Trezor firmware. When a user signs a contract interaction, calldata is streamed from the host to the device in chunks. The device hashes every chunk into the transaction digest that gets signed. However, only the first calldata chunk is rendered on the display and included in the user confirmation prompt. Subsequent chunks are hashed silently. This decoupling of confirmation from signing breaks the trust boundary the hardware wallet is designed to enforce.
A malicious host application can exploit this by presenting one payload for confirmation and streaming a different tail after the user approves. The resulting signature is valid for the tampered transaction. Recipients, token amounts, function selectors placed later in calldata, and ABI-encoded parameters can all be altered without the user's knowledge.
Root Cause
The pre-patch implementation invoked require_confirm_other_data on the initial calldata blob only, then continued hashing further chunks without a matching user prompt. The signing state machine did not require confirmation to cover the same bytes that fed the Keccak digest. The fix in commit 70c9b0c07748 restructures core/src/apps/ethereum/layout.py so calldata is confirmed during hashing, ensuring the displayed bytes and the signed bytes are the same.
Attack Vector
Exploitation requires an attacker-controlled host application, such as a compromised wallet interface or a malicious dApp connector. User interaction is required to approve the transaction. No network reachability to the device itself is needed beyond the standard USB or NFC channel used by the wallet software.
)
-def require_confirm_other_data(data: AnyBytes, data_total: int) -> Awaitable[None]:
- return confirm_blob(
- "confirm_data",
- TR.ethereum__title_input_data,
- data,
- description=TR.ethereum__data_size_template.format(data_total),
- subtitle=TR.ethereum__title_all_input_data_template.format(data_total),
- verb=TR.buttons__confirm,
- verb_cancel=TR.send__cancel_sign,
- br_code=ButtonRequestType.SignTx,
- ask_pagination=True,
- )
-
-
async def confirm_message_hash(message_hash: bytes) -> None:
from ubinascii import hexlify
Source: Trezor firmware commit 70c9b0c07748. The patch removes the standalone require_confirm_other_data helper and moves calldata confirmation inline with hashing, closing the gap between displayed and signed bytes.
Detection Methods for CVE-2026-65058
Indicators of Compromise
- Unexpected Ethereum transactions signed from a Trezor device where on-chain calldata length exceeds what was reviewed on the device screen.
- Contract interactions whose function selector or parameter values on-chain differ from the wallet UI shown at signing time.
- Wallet host software making multiple EthereumTxAck streaming calls without corresponding user confirmation prompts on the device.
Detection Strategies
- Reconcile signed transactions against wallet UI logs to identify divergence between presented and broadcast calldata.
- Monitor endpoints that host Trezor Suite or third-party wallet software for unauthorized modifications, browser extension tampering, or malicious dApp connectors.
- Track firmware versions across managed devices and flag any Trezor Safe 3, 5, or 7 endpoint that has not applied the 70c9b0c fix.
Monitoring Recommendations
- Ingest wallet host process telemetry and USB device events into a centralized data lake for correlation with on-chain outcomes.
- Alert on Ethereum contract calls with large calldata payloads originating from hardware wallet workflows on unpatched firmware.
- Review outbound transactions from custodial and treasury wallets against expected recipients and function signatures.
How to Mitigate CVE-2026-65058
Immediate Actions Required
- Update Trezor Safe 3, Safe 5, and Safe 7 devices to a firmware build that includes commit 70c9b0c07748 or later.
- Restrict Ethereum contract signing to hosts running vetted wallet software until firmware updates are confirmed installed.
- Verify every character of contract calldata on the device display before approving, and reject transactions whose data length exceeds the confirmed chunk.
Patch Information
The fix is committed in the Trezor firmware repository at commit 70c9b0c07748. It reworks core/src/apps/ethereum/layout.py so calldata confirmation occurs during hashing, binding the displayed payload to the signed digest. Additional vendor context is available in the CISA CSAF advisory and the CVE.org record for CVE-2026-65058.
Workarounds
- Avoid signing Ethereum contract interactions with unpatched Trezor Safe 3, 5, or 7 devices; use plain value transfers only until firmware is updated.
- Use a second independent tool to decode and verify calldata against what the device displays before approving contract calls.
- Enforce transaction policy controls such as allowlisted recipients and function selectors at the wallet or custody layer.
# Verify installed Trezor firmware includes the fix commit
trezorctl get-features | grep -E 'revision|version'
# Compare revision against upstream commit 70c9b0c07748
# If older, apply firmware update via Trezor Suite before signing contract transactions
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

