Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assume per-user deviceID uniqueness in encryptAndSendKeysToDevices #2136

Merged

Conversation

ShadowJonathan
Copy link
Contributor

@ShadowJonathan ShadowJonathan commented Jan 26, 2022

Fixes #2135

Notes: Make sure encryptAndSendKeysToDevices assumes devices are unique per-user.

Type: defect

Signed-off-by: Jonathan de Jong <[email protected]>


Here's what your changelog entry will look like:

🐛 Bug Fixes

@ShadowJonathan ShadowJonathan requested a review from a team as a code owner January 26, 2022 17:13
@t3chguy t3chguy requested review from JordanHancock-NV and a team and removed request for JordanHancock-NV February 2, 2022 10:36
Copy link
Member

@turt2live turt2live left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ideally we try and construct a better data type, per comments already made.

@turt2live turt2live requested a review from a team April 14, 2022 22:13
Copy link
Member

@dkasak dkasak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR looks functionally correct and will fix the issue, but see my PR comments.

To expand on the reasoning from #2135, I agree this bug shouldn't have security consequences, though the reasoning is more subtle; I don't think this would lead to a ratchet corruption and undecryptable messages.

Rather, it allows a malicious server to confuse Element Web into recording the wrong device identity key for re-sharing (forwarding) purposes. However it can only confuse it into recording the key of another device present in the room at the time the message was sent, so that device would've received the message and the message key anyway, even without this trick.

src/crypto/algorithms/megolm.ts Outdated Show resolved Hide resolved
src/crypto/algorithms/megolm.ts Outdated Show resolved Hide resolved
@ShadowJonathan ShadowJonathan force-pushed the globally-unique-deviceids branch from 0361645 to ea6bd5d Compare May 14, 2022 13:16
@ShadowJonathan
Copy link
Contributor Author

Reviewers, I have reset this PR to @dkasak's suggested commit, as I believe that is a better approach. Approval got granted via DM.

@t3chguy
Copy link
Member

t3chguy commented May 14, 2022

(Sonar didn't run due to missing sonar-project.properties file in this old PR)

@ShadowJonathan
Copy link
Contributor Author

Sonar now ants 80% coverage on this new code, while I'm not sure how to achieve that. Any suggestions? Adding specific tests for this?

@MadLittleMods MadLittleMods added the Z-Community-PR Issue is solved by a community member's PR label Jun 2, 2022
@MadLittleMods MadLittleMods removed their request for review June 4, 2022 18:21
Copy link
Member

@t3chguy t3chguy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks sane to me, thanks!

@t3chguy t3chguy merged commit aa94d5d into matrix-org:develop Jun 6, 2022
su-ex added a commit to SchildiChat/matrix-js-sdk that referenced this pull request Jul 7, 2022
* Remove unused sessionStore ([\matrix-org#2455](matrix-org#2455)).
* Implement MSC3827: Filtering of `/publicRooms` by room type ([\matrix-org#2469](matrix-org#2469)).
* expose latestLocationEvent on beacon model ([\matrix-org#2467](matrix-org#2467)). Contributed by @kerryarchibald.
* Live location share - add start time leniency ([\matrix-org#2465](matrix-org#2465)). Contributed by @kerryarchibald.
* Log real errors and not just their messages, traces are useful ([\matrix-org#2464](matrix-org#2464)).
* Various changes to `src/crypto` files for correctness ([\matrix-org#2137](matrix-org#2137)). Contributed by @ShadowJonathan.
* Update MSC3786 implementation: Check the `state_key` ([\matrix-org#2429](matrix-org#2429)).
* Timeline needs to refresh when we see a MSC2716 marker event  ([\matrix-org#2299](matrix-org#2299)). Contributed by @MadLittleMods.
* Try to load keys from key backup when a message fails to decrypt ([\matrix-org#2373](matrix-org#2373)). Fixes element-hq/element-web#21026. Contributed by @duxovni.
* Send call version `1` as a string ([\matrix-org#2471](matrix-org#2471)). Fixes element-hq/element-web#22629.
* Fix issue with `getEventTimeline` returning undefined for thread roots in main timeline ([\matrix-org#2454](matrix-org#2454)). Fixes element-hq/element-web#22539.
* Add missing `type` property on `IAuthData` ([\matrix-org#2463](matrix-org#2463)).
* Clearly indicate that `lastReply` on a Thread can return falsy ([\matrix-org#2462](matrix-org#2462)).
* Fix issues with getEventTimeline and thread roots ([\matrix-org#2444](matrix-org#2444)). Fixes element-hq/element-web#21613.
* Live location sharing - monitor liveness of beacons yet to start ([\matrix-org#2437](matrix-org#2437)). Contributed by @kerryarchibald.
* Refactor Relations to not be per-EventTimelineSet ([\matrix-org#2412](matrix-org#2412)). Fixes matrix-org#2399 and element-hq/element-web#22298.
* Add tests for sendEvent threadId handling ([\matrix-org#2435](matrix-org#2435)). Fixes element-hq/element-web#22433.
* Make sure `encryptAndSendKeysToDevices` assumes devices are unique per-user. ([\matrix-org#2136](matrix-org#2136)). Fixes matrix-org#2135. Contributed by @ShadowJonathan.
* Don't bug the user while re-checking key backups after decryption failures ([\matrix-org#2430](matrix-org#2430)). Fixes element-hq/element-web#22416. Contributed by @duxovni.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T-Defect Z-Community-PR Issue is solved by a community member's PR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

encryptAndSendKeysToDevices assumes device IDs are globally unique
5 participants