Skip to content

Commit f132072

Browse files
author
Cerberus Merlin
committed
fix: Blind-signing bypass in EIP-712 FULL filtering activation
1 parent d0275cf commit f132072

3 files changed

Lines changed: 8 additions & 1 deletion

File tree

src/features/sign_message_eip712/commands_712.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ uint16_t handle_eip712_sign(const uint8_t *cdata, uint8_t length, uint32_t *flag
291291
(path_get_field() != NULL)) {
292292
apdu_response_code = SWO_INCORRECT_DATA;
293293
} else if ((ui_712_get_filtering_mode() == EIP712_FILTERING_FULL) &&
294-
(ui_712_remaining_filters() != 0)) {
294+
(!ui_712_message_info_received() || (ui_712_remaining_filters() != 0))) {
295295
PRINTF("%d EIP712 filters are missing\n", ui_712_remaining_filters());
296296
apdu_response_code = SWO_REFERENCED_DATA_NOT_FOUND;
297297
} else if (!all_calldata_info_processed() || (get_tx_ctx_count() != 0)) {

src/features/sign_message_eip712/ui_logic.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ typedef struct {
6363
bool end_reached;
6464
e_eip712_filtering_mode filtering_mode;
6565
uint8_t filters_to_process;
66+
bool message_info_received;
6667
uint8_t field_flags;
6768
uint8_t structs_to_review;
6869
s_amount_context amount;
@@ -1171,6 +1172,7 @@ e_eip712_filtering_mode ui_712_get_filtering_mode(void) {
11711172
*/
11721173
void ui_712_set_filters_count(uint8_t count) {
11731174
ui_ctx->filters_to_process = count;
1175+
ui_ctx->message_info_received = true;
11741176
}
11751177

11761178
/**
@@ -1182,6 +1184,10 @@ uint8_t ui_712_remaining_filters(void) {
11821184
return ui_ctx->filters_to_process - flist_size((flist_node_t **) &ui_ctx->filters_crc);
11831185
}
11841186

1187+
bool ui_712_message_info_received(void) {
1188+
return ui_ctx->message_info_received;
1189+
}
1190+
11851191
/**
11861192
* Reset all the UI struct field flags
11871193
*/

src/features/sign_message_eip712/ui_logic.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ void ui_712_set_filtering_mode(e_eip712_filtering_mode mode);
9191
e_eip712_filtering_mode ui_712_get_filtering_mode(void);
9292
void ui_712_set_filters_count(uint8_t count);
9393
uint8_t ui_712_remaining_filters(void);
94+
bool ui_712_message_info_received(void);
9495
void ui_712_queue_struct_to_review(void);
9596
void ui_712_token_join_prepare_addr_check(uint8_t index);
9697
bool ui_712_token_join_prepare_amount(uint8_t index, const char *name, uint8_t name_length);

0 commit comments

Comments
 (0)