Fix the open security issues: web-ext 10, scopes, shared copies from chromium a1967a610, forget token #17
No reviewers
Labels
No labels
bug
documentation
enhancement
security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo-thunderbird!17
Loading…
Reference in a new issue
No description provided.
Delete branch "sec2-fixes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What and why
#13 (SEC2-053) dev chain.
web-ext8.10.0 -> 10.8.0,npm audit fix: 13 advisories (3 critical) become 1,node-forge(high, GHSA-86w9-cpqp-85rv), which has no fixed release and is reached only through web-ext's Android bridge, not by lint or build.scripts/audit.mjs(the script postulo-chromium runs) fails CI on any other high or critical advisory and names that one; CI runs it afternpm ci(npm run audit). Plainnpm audit --audit-level=highwould be red today for something nobody can fix.#14 (SEC2-085) scopes. The settings no longer say "
capturesand nothing more". The extension names the two scopes it can use (src/lib/scopes.js):capturesandlistings:bind; the hint says to tick only the ones the person wants it to use; Test warns (error style) when the token holds any other scope ("can do more than this extension needs (read, ...)") or neither of ours; README names both. Taken as the issue's second branch in spirit (one token, either or both scopes) without choosing for the user, because neither call exists yet (#1, #9 not built).#15 (SEC2-086) shared copies.
shared.jsonref7998de37-> postulo-chromiuma1967a61052d11996100acad860356b7abf6b419;languages.jsandmessages.jsadded to the shared files (the newi18n.jsimports them).api.jsnow throwsRefusal("notPostulo")for a 2xx that is not JSON (test:test/token.test.mjs). English sentences the new shared code asks for (notPostulo,noCredentialsInAddress,storageFull) added, worded for Thunderbird (the "no sentence speaks of a browser" test passes).#16 (SEC2-087) token at rest. README ("Privacy") and the options page say the token is stored unencrypted, Thunderbird's primary password does not cover it, and it works until revoked in Postulo. New Forget token button removes
tokenfromstorage.local(address kept); tested against a storage stub that notokenkey is left.Decision for the user (the core is not edited)
postulo/docs/THREAT-MODEL.md:21, the row "Someone with the token of a mail client", says its token holdslistings:bindand nothing else. This extension will also usecapturesfor #1 (and #9's recommendation is one token with both). The extension is now honest about both scopes and warns when a token is wider than them, but the row and the extension agree only if you either change the row to "listings:bind, andcapturesonce the extension captures" with the union of the worst cases, or decide on two tokens (one per scope), which needs a code change when #1 and #9 land. I did not pick; nothing in the extension calls either scope today.Translations
Weblate-only rule kept: only English was written.
frandpt-PTlosetokenHintandlacksCaptures(removal is allowed by the guard) and lack the new sentences, so the build leaves them out of the package until Weblate has filled them (scripts/build.mjswarns). The next Weblate sync should cover: tokenHintScopes, tokenStored, tokenNeither, tokenTooWide, forgetToken, tokenForgotten, notPostulo, noCredentialsInAddress, storageFull.Tests
npm test: 31 pass (25 before; 6 new intest/token.test.mjs, the scope-name test intest/i18n.test.mjsrewritten).node scripts/guard.mjs,shared:checkandnpm run lintpass (0 errors; 2 warnings:messagesRead, known, and web-ext 10's newdata_collection_permissionsnotice, left alone: declaring "none" would be false once capturing exists). Not proven here, only in a real Thunderbird: that the options page renders the new paragraphs and the Forget button works against the realstorage.local, that Test shows the warning against a real token, and that the build with web-ext 10 installs.Closes #13, #14, #15, #16
🤖 Generated with Claude Code