From 64d2a8aa0ceb0b4640630666a57ffffa7e185110 Mon Sep 17 00:00:00 2001 From: Brad Murray Date: Wed, 12 Feb 2025 17:15:38 -0500 Subject: [PATCH] Only accept secret shares from verified devices --- crypto/sharing.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/crypto/sharing.go b/crypto/sharing.go index c0f3e209..4e13edc8 100644 --- a/crypto/sharing.go +++ b/crypto/sharing.go @@ -173,6 +173,22 @@ func (mach *OlmMachine) receiveSecret(ctx context.Context, evt *DecryptedOlmEven return } + // https://spec.matrix.org/v1.10/client-server-api/#msecretsend + // "The recipient must ensure... that the device is a verified device owned by the recipient" + if senderDevice, err := mach.GetOrFetchDevice(ctx, evt.Sender, evt.SenderDevice); err != nil { + log.Err(err).Msg("Failed to get or fetch sender device, rejecting secret") + return + } else if senderDevice == nil { + log.Warn().Msg("Unknown sender device, rejecting secret") + return + } else if trustLevel, err := mach.ResolveTrustContext(ctx, senderDevice); err != nil { + log.Err(err).Msg("Failed to resolve trust for sender device, rejecting secret") + return + } else if trustLevel < id.TrustStateCrossSignedTOFU { + log.Warn().Msg("Sender device is not verified, rejecting secret") + return + } + mach.secretLock.Lock() secretChan := mach.secretListeners[content.RequestID] mach.secretLock.Unlock()