chore(core): send MCU attestation only when streaming is supported
What changed, and why it matters
This commit changes the Trezor hardware wallet so that a large secondary device-attestation proof (the MCU attestation) is only sent when the caller explicitly requests streaming support. The goal is to avoid sending one oversized response. It is a defensive hardening change rather than a fix for an active vulnerability, and the commit message does not claim it resolves a security issue.
Treat as a routine hardening change. Review whether any host software relies on receiving MCU attestation without streaming and update callers if needed. No urgent security action is indicated by the commit itself.
Security signals we found
Behavior change that suppresses a large attestation payload in non-streaming responses
Defensive size-management / protocol compatibility hardening
No mention of vulnerability, CVE, bug bounty, or researcher attribution in commit or supplied references
Evidence from the diff
In core/src/apps/management/authenticate_device.py the condition for including mcu_certificates and mcu_signature in the AuthenticateDevice response is tightened from utils.USE_MCU_ATTESTATION to utils.USE_MCU_ATTESTATION and msg.stream. A new test asserts that when chunk_size is 0 (no streaming), the MCU fields are empty. This prevents a large MCU attestation payload from being returned in a single response, likely to avoid buffer-size or protocol issues on hosts that do not support streaming.
Changed components
core/src/apps/management/authenticate_device.pytests/device_tests/test_authenticate_device.pyInspect captured patch +10 / −1
diff --git a/core/src/apps/management/authenticate_device.py b/core/src/apps/management/authenticate_device.py
index 454333f2..11d74e0b 100644
--- a/core/src/apps/management/authenticate_device.py
+++ b/core/src/apps/management/authenticate_device.py
@@ -65,7 +65,8 @@ async def authenticate_device(msg: AuthenticateDevice) -> AuthenticityProof | Su
mcu_certificates = None
mcu_signature = None
- if utils.USE_MCU_ATTESTATION:
+ # Following https://github.com/trezor/trezor-firmware/pull/6893, don't send MCU attestation in one large response.
+ if utils.USE_MCU_ATTESTATION and msg.stream:
from trezor.crypto import mcu
try:
diff --git a/tests/device_tests/test_authenticate_device.py b/tests/device_tests/test_authenticate_device.py
index 057b2080..5d1e2d94 100644
--- a/tests/device_tests/test_authenticate_device.py
+++ b/tests/device_tests/test_authenticate_device.py
@@ -43,6 +43,10 @@ def test_authenticate_device_optiga(
# Issue an AuthenticateDevice challenge to Trezor.
proof = device.authenticate(session, challenge, chunk_size)
+ if chunk_size == 0:
+ # MCU attestation is sent only when streaming is supported.
+ assert proof.mcu_signature is None
+ assert proof.mcu_certificates == []
data = b"\x13AuthenticateDevice:" + compact_size(len(challenge)) + challenge
check_signature_optiga(
@@ -61,6 +65,10 @@ def test_authenticate_device_tropic(
# Issue an AuthenticateDevice challenge to Trezor.
proof = device.authenticate(session, challenge, chunk_size)
+ if chunk_size == 0:
+ # MCU attestation is sent only when streaming is supported.
+ assert proof.mcu_signature is None
+ assert proof.mcu_certificates == []
data = b"\x13AuthenticateDevice:" + compact_size(len(challenge)) + challenge
check_signature_tropic(
Why this scored 30/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.