Correctly verify that the reply to a secrets request is actually coming
from a verified device. While we did verify that it was us who replied,
we didn't properly cancel storing the secret if the sending device was
one of ours but was maliciously inserted by the homeserver and
unverified. We only send secret requests to verified devices in the
first place, so only the homeserver could abuse this issue.
Additionally we protected against malicious secret poisoning by
verifying that the secret is actually the reply to a request. This means
the server only has 2 places where it can poison the secrets:
- After a verification when we automatically request the secrets
- When the user manually hits the request button
It also needs to prevent other secret answers to reach the client first
since we ignore all replies after that one.
The impact of this might be quite severe. It could allow the server to
replace the cross-signing keys silently and while we might not trust
that key, we possibly could trust it in the future if we rely on the
stored secret. Similarly this could potentially be abused to make the
client trust a malicious online key backup.
If your deployment is not patched yet and you don't control your
homeserver, you can protect against this by simply not doing any
verifications of your own devices and not pressing the request button in
the settings menu.
This reverts commit e6b6a76437,
because it broke compatibility with clang-format 11 (which is current
on some linux distros) and because it didn't achieve its original
goal. See PR #1166 for discussion.
This addresses a few problems with reaction colors:
- The state-checking conditionals for reaction text, background, and border
were inconsistent, making it difficult to choose colors for each state
(normal, hovered, and self reactions) that worked well in all themes.
- The QPalette::Highlight color was being misused as a text/foreground color.
This color role is intended for background areas. It has little contrast
against the background in themes like KDE Plasma's Breeze High Contrast,
so using it for text and icons makes those things difficult to read.
https://doc.qt.io/qt-5/qpalette.html#ColorRole-enum
- The reaction border was drawn in the same color as normal text, making it
so bright in some dark themes that it distracted from reading nearby text.
FixesNheko-Reborn/nheko#1159