feat(legacy,core): add make.me.blink U2F dummy app ID
What changed, and why it matters
This commit is a small user-experience fix, not a security patch. Firefox's U2F support sends a special dummy registration request to check whether a security key is present. Trezor previously recognized two such dummy IDs, but Firefox's newer authenticator code uses a third one ('make.me.blink'). Without this change, Trezor would prompt the user to register the device, which is confusing. The fix makes Trezor show a simple 'not registered / already registered' message instead. It does not fix a vulnerability that lets an attacker steal funds or bypass protection.
No urgent action needed. Treat as a normal firmware improvement. Users who rely on U2F/FIDO2 with Firefox may appreciate the smoother experience after updating, but there is no security exposure from remaining on older firmware.
Security signals we found
Adds a known browser dummy U2F AppID to an existing allow/deny-style check
Prevents an unexpected user prompt during a benign browser probing flow
No change to signature, authentication, or key-handling logic
No bounds-checking, parsing, or memory allocation changes
Evidence from the diff
The patch adds the SHA-256 hash of the string ‘make.me.blink’ to the list of bogus U2F AppIDs in both the modern (core) and legacy Trezor firmware. When a U2F registration request arrives with this AppID, the device now follows the same ‘bogus AppID’ path already used for Chrome and older Firefox dummy checks, avoiding a misleading registration prompt. The change is purely a UX hardening/behavioral correction; no cryptographic, authorization, or memory-safety code is modified.
Changed components
core/src/apps/webauthn/fido2.pylegacy/firmware/u2f.cInspect captured patch +11 / −2
### core/.changelog.d/3331.fixed
@@ -0,0 +1 @@
+Show "not registered" message instead of a registration prompt when Firefox sends its dummy U2F register request.
### core/src/apps/webauthn/fido2.py
@@ -169,7 +169,9 @@
_BOGUS_RP_ID = ".dummy"
_BOGUS_APPID_CHROME = b"A" * 32
_BOGUS_APPID_FIREFOX = b"\0" * 32
-_BOGUS_APPIDS = (_BOGUS_APPID_CHROME, _BOGUS_APPID_FIREFOX)
+# SHA-256 of "make.me.blink", used by Firefox's authenticator-rs.
+_BOGUS_APPID_FIREFOX_BLINK = b"\xe8\x45\x41\xea\xf2\x07\xf7\xd7\x5a\xd0\x51\x43\x47\x70\xf6\xd1\xa9\xbf\x62\xf7\xea\x9b\xe5\x14\xfd\x4e\x0c\xa8\x27\x2b\x1d\xeb"
+_BOGUS_APPIDS = (_BOGUS_APPID_CHROME, _BOGUS_APPID_FIREFOX, _BOGUS_APPID_FIREFOX_BLINK)
_AAGUID = b"\xd6\xd0\xbd\xc3b\xee\xc4\xdb\xde\x8dzenJD\x87" # First 16 bytes of SHA-256("TREZOR 2")
# authentication control byte
### legacy/firmware/.changelog.d/3331.fixed
@@ -0,0 +1 @@
+Show "not registered" message instead of a registration prompt when Firefox sends its dummy U2F register request.
### legacy/firmware/u2f.c
@@ -70,6 +70,10 @@ static uint8_t u2f_out_packets[U2F_OUT_PKT_BUFFER_LEN][HID_RPT_SIZE];
#define BOGUS_APPID_CHROME "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
#define BOGUS_APPID_FIREFOX \
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+// SHA-256 of "make.me.blink", used by Firefox's authenticator-rs.
+#define BOGUS_APPID_FIREFOX_BLINK \
+ "\xe8\x45\x41\xea\xf2\x07\xf7\xd7\x5a\xd0\x51\x43\x47\x70\xf6\xd1" \
+ "\xa9\xbf\x62\xf7\xea\x9b\xe5\x14\xfd\x4e\x0c\xa8\x27\x2b\x1d\xeb"
// Auth/Register request state machine
typedef enum {
@@ -560,7 +564,8 @@ void u2f_register(const APDU *a) {
// error: testof-user-presence is required
buttonUpdate(); // Clear button state
if (0 == memcmp(req->appId, BOGUS_APPID_CHROME, U2F_APPID_SIZE) ||
- 0 == memcmp(req->appId, BOGUS_APPID_FIREFOX, U2F_APPID_SIZE)) {
+ 0 == memcmp(req->appId, BOGUS_APPID_FIREFOX, U2F_APPID_SIZE) ||
+ 0 == memcmp(req->appId, BOGUS_APPID_FIREFOX_BLINK, U2F_APPID_SIZE)) {
if (cid == last_good_auth_check_cid) {
layoutDialog(&bmp_icon_warning, NULL, _("OK"), NULL,
_("Already registered."), NULL, _("This U2F device is"),Why this scored 21/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.