From bdcf390e6eb6eb9af08f127277c8e41ab3c6756c Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 4 Aug 2021 10:55:44 -0400 Subject: [PATCH] Verify a member is still in the group before using sender key. --- .../securesms/messages/GroupSendUtil.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index 441cc9e5fa..7b5ecc108a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -10,6 +10,8 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.SenderKeyUtil; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.DatabaseFactory; +import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; import org.thoughtcrime.securesms.database.MessageSendLogDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -138,18 +140,21 @@ public final class GroupSendUtil { @Nullable CancelationSignal cancelationSignal) throws IOException, UntrustedIdentityException { - RecipientData recipients = new RecipientData(context, allTargets); + RecipientData recipients = new RecipientData(context, allTargets); + Optional groupRecord = groupId != null ? DatabaseFactory.getGroupDatabase(context).getGroup(groupId) : Optional.absent(); List senderKeyTargets = new LinkedList<>(); List legacyTargets = new LinkedList<>(); for (Recipient recipient : allTargets) { - Optional access = recipients.getAccessPair(recipient.getId()); + Optional access = recipients.getAccessPair(recipient.getId()); + boolean validMembership = groupRecord.isPresent() && groupRecord.get().getMembers().contains(recipient.getId()); if (recipient.getSenderKeyCapability() == Recipient.Capability.SUPPORTED && recipient.hasUuid() && access.isPresent() && - access.get().getTargetUnidentifiedAccess().isPresent()) + access.get().getTargetUnidentifiedAccess().isPresent() && + validMembership) { senderKeyTargets.add(recipient); } else {