fix(core): allow cross-sign with ETH mainnet
What changed, and why it matters
This commit changes how Trezor hardware wallets pick which private key to use when signing Ethereum-style transactions on non-Ethereum networks. Previously, only testnet-like or alt-networks could fall back to the standard Ethereum key (the one derived from path m/44'/60'/...). Now every network except Ethereum mainnet itself is allowed to use that same Ethereum key. The stated reason is to support newer networks such as Hyperliquid that share a chain ID with an already-registered network and therefore cannot get their own SLIP-44 coin type. The change is described as a workaround, not as a security fix, and it slightly relaxes the boundary between alt-network keys and the main Ethereum key.
Treat this as a functional change with security implications rather than a vulnerability patch. Wallet software and users should understand that the same Ethereum mainnet private key may now be used to sign transactions on additional EVM networks. Review whether this key-reuse increases replay-attack or phishing risks for chains that share address formats, and ensure that chain-id-based replay protection remains enforced in the signing code. No immediate patch or CVE is indicated by the commit itself.
Security signals we found
Relaxation of derivation-path validation for EVM networks
Cross-signing now permitted between Ethereum mainnet keys and all non-mainnet networks
Workaround for SLIP-44 registration conflicts rather than a cryptographic fix
Potential key-reuse across chains that previously had distinct coin types
No explicit security advisory, CVE, or bug bounty attribution in commit
Evidence from the diff
In core/src/apps/ethereum/keychain.py, _schemas_from_network() decides the allowed SLIP-44 identifiers for a given EVM chain. The old code allowed cross-signing with Ethereum (SLIP-44 60) only when the chain’s own SLIP-44 was neither 60 (Ethereum mainnet) nor 1 (Bitcoin testnet). The new code allows cross-signing for every network whose SLIP-44 is not exactly 60. In practice, this means Ethereum mainnet paths are now accepted for all non-mainnet EVM networks, including those that previously had their own registered coin type. The changelog frames this as enabling access to networks with conflicting chain IDs that lack official SLIP-44 registration.
Changed components
Trezor Core firmwarecore/src/apps/ethereum/keychain.pyEthereum app key derivation logicEVM multi-network transaction signingInspect captured patch +3 / −2
diff --git a/core/.changelog.d/5134.changed b/core/.changelog.d/5134.changed
new file mode 100644
index 000000000..8f8bc88b0
--- /dev/null
+++ b/core/.changelog.d/5134.changed
@@ -0,0 +1 @@
+Allow using Ethereum mainnet addresses on all non-Ethereum networks. This enables access to networks like Hyperliquid that use conflicting chain IDs and cannot obtain official SLIP-44 registration.
diff --git a/core/src/apps/ethereum/keychain.py b/core/src/apps/ethereum/keychain.py
index b0c7aecfb..605442985 100644
--- a/core/src/apps/ethereum/keychain.py
+++ b/core/src/apps/ethereum/keychain.py
@@ -104,8 +104,8 @@ def _schemas_from_network(
if network_info is networks.UNKNOWN_NETWORK:
# allow Ethereum or testnet paths for unknown networks
slip44_id = (60, 1)
- elif network_info.slip44 not in (60, 1):
- # allow cross-signing with Ethereum unless it's testnet
+ elif network_info.slip44 != 60:
+ # allow cross-signing with Ethereum for all non-mainnet networks
slip44_id = (network_info.slip44, 60)
else:
slip44_id = (network_info.slip44,)
Why this scored 39/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.