What changed, and why it matters
This commit fixes a UI label mix-up in the COLDCARD's 'SSSP' (Seed Safe Spending Policy) menu. Two settings were swapped: the menu item called 'Word Check' was actually controlling access to secure notes, while 'Allow Notes' was actually controlling the seed-word challenge. The fix swaps their labels and underlying setting keys so each toggle controls the feature its name describes. There is no direct evidence this is a security vulnerability, but mislabeled security controls can mislead users and cause unintended access grants.
Treat as a low-severity UI/UX bug with possible security implications. Users relying on SSSP should verify their 'Allow Notes' and 'Word Check' settings after updating. No immediate exploit code is evident, but a security advisory noting the mislabeling would be prudent if prior firmware versions exposed sensitive features contrary to user expectations.
Security signals we found
Mislabeled security control: UI label does not match the permission it toggles
Potential for unintended access grant or policy bypass due to user confusion
Fix is a simple key/label swap with no additional hardening
Evidence from the diff
In shared/ccc.py, two SSSPCheckedMenuItem entries had their display labels and configuration keys crossed: the ‘Word Check’ item used key ‘notes’, and the ‘Allow Notes’ item used key ‘words’. The patch swaps them so ‘Word Check’ maps to ‘words’ and ‘Allow Notes’ maps to ‘notes’. A test fixture in testing/test_ccc.py adds goto_home to a test that already calls it, likely to satisfy a new dependency or ensure a clean state.
Changed components
shared/ccc.py (SSSPConfigMenu)testing/test_ccc.py (test_c_key_from_seed_vault)Inspect captured patch +3 / −3
diff --git a/shared/ccc.py b/shared/ccc.py
index 3dfd1b5..397b7ce 100644
--- a/shared/ccc.py
+++ b/shared/ccc.py
@@ -1205,8 +1205,8 @@ class SSSPConfigMenu(MenuSystem):
# xxxxxxxxxxxxxxxx
MenuItem('Edit Policy...',
menu=lambda *a: SpendingPolicyMenu.be_a_submenu(SSSPFeature.get_policy())),
- SSSPCheckedMenuItem('Word Check', 'notes', 'Allow (read-only) access to secure notes and passwords? Otherwise, they are inaccessible.'),
- SSSPCheckedMenuItem('Allow Notes', 'words', 'To change Spending Policy, in addition to special PIN, you must provide the first and last seed words.'),
+ SSSPCheckedMenuItem('Word Check', 'words', 'To change Spending Policy, in addition to special PIN, you must provide the first and last seed words.'),
+ SSSPCheckedMenuItem('Allow Notes', 'notes', 'Allow (read-only) access to secure notes and passwords? Otherwise, they are inaccessible.'),
SSSPCheckedMenuItem('Related Keys', 'okeys', 'Allow access to BIP-39 passphrase wallets based on master seed, or Seed Vault (if any). Same spending Policy applies to all.'),
#MenuItem('Test Word Challenge', f=sssp_word_challenge), # XXX test only?
]
diff --git a/testing/test_ccc.py b/testing/test_ccc.py
index 18142c5..ca44de7 100644
--- a/testing/test_ccc.py
+++ b/testing/test_ccc.py
@@ -1167,7 +1167,7 @@ def test_remove_ccc(settings_set, setup_ccc, ccc_ms_setup, settings_get, policy_
@pytest.mark.parametrize("has_candidates", [True, False])
def test_c_key_from_seed_vault(has_candidates, setup_ccc, build_test_seed_vault, settings_set,
goto_ccc_menu, pick_menu_item, press_select, need_keypress, cap_menu,
- cap_story, press_cancel, enter_enabled_ccc):
+ cap_story, press_cancel, enter_enabled_ccc, goto_home):
goto_home()
settings_set("ccc", None)
settings_set("multisig", [])
Why this scored 35/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.