AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Informational 20 Bitcoin

fix(common): correct wire direction for Monero *Request messages

Public commit record

What the developer wrote

Authored by Martin Varmuza

93/100 · Strong
fix(common): correct wire direction for Monero *Request messages

The 11 stateful Monero *Request messages (transaction signing and
key-image sync) were tagged (wire_out) even though the host sends them
device-bound; they should be (wire_in). The firmware reads each one as
input (workflow entry points in workflow_handlers.py, subsequent steps
via ctx.read()/call() in apps/monero/sign_tx.py and key_image_sync.py)
and answers with the matching *Ack, which correctly stays (wire_out).

The Monero live-refresh requests (552/554/556), MoneroGetTxKeyRequest
and DebugMoneroDiagRequest were already correct; only the tx-signing
(501-517) and key-image-sync (530-534) request branches were wrong.

Regenerated both checked-in host descriptors that embed the wire
direction: rust/trezor-client/src/protos/generated/messages.rs (via
rust/trezor-client/scripts/build_protos) and
rust/trezor-thp/examples/host-cli/pb/messages.rs (via
`cargo run --example gen-protobuf examples/host-cli/pb/`). Each flips
the same 11 EnumValueOptions tags from field 50003 (wire_out) to 50002
(wire_in); no message IDs, *Ack values, or unrelated entries change.

No functional firmware change: the on-device protobuf blobs
(proto_*.data, consumed by core/embed/rust/src/protobuf/defs.rs) are
generated by common/protob/pb2py from the integer wire_type only --
wire_in/wire_out are never read -- and runtime dispatch is keyed on the
integer message type, so core behavior is byte-identical. The generated
Python does not encode wire direction either. Legacy (T1) is unaffected
(Monero is in SKIPPED_MESSAGES).

Upstream fix for the wire-direction inconsistency worked around in
trezor/trezor-suite#28859.

[no changelog]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
The short version

What changed, and why it matters

This commit fixes a labeling mistake in the Trezor firmware's protocol definition: eleven Monero request messages were incorrectly marked as traveling from the device to the host, when in reality the host sends them to the device. The change only updates metadata in generated host-side descriptors; the firmware itself does not use this metadata, so on-device behavior is unchanged. It is a correctness fix for host libraries, not a patch for an exploitable device bug.

Recommended action

Treat as a low-risk metadata consistency fix. Verify that host libraries consuming the regenerated descriptors handle the corrected direction tags correctly and that the trezor-suite workaround can be removed. No firmware-side hardening is indicated.

Security signals we found

01

Metadata-only correction of message direction tags

02

No functional firmware change asserted by commit message

03

Host-side generated descriptors regenerated to match corrected proto

04

On-device protobuf definitions ignore wire direction field

05

Referenced upstream workaround in trezor-suite#28859

Risk score

Why this scored 20/100

Our methodology →
Potential impact 2/30
Exploitability 1/25
Stealth signal 1/15
Affected reach 3/15
Confidence 9/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.