From 52736ea32eb2aa7c8f6545937edfb0bceff5d8c9 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Tue, 30 Jan 2024 09:57:25 -0800 Subject: [PATCH] Explicit checks for pniChangeNumber --- ts/textsecure/MessageReceiver.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ts/textsecure/MessageReceiver.ts b/ts/textsecure/MessageReceiver.ts index 756ef63870..699e92091e 100644 --- a/ts/textsecure/MessageReceiver.ts +++ b/ts/textsecure/MessageReceiver.ts @@ -1513,6 +1513,7 @@ export default class MessageReceiver Boolean(content.storyMessage?.group); if ( + wasEncrypted && content.senderKeyDistributionMessage && Bytes.isNotEmpty(content.senderKeyDistributionMessage) ) { @@ -1575,7 +1576,7 @@ export default class MessageReceiver return { plaintext: undefined, envelope }; } - if (content.pniSignatureMessage) { + if (wasEncrypted && content.pniSignatureMessage) { inProgressMessageType = 'pni signature'; await this.handlePniSignatureMessage( envelope, @@ -1586,7 +1587,7 @@ export default class MessageReceiver // Some sync messages have to be fully processed in the middle of // decryption queue since subsequent envelopes use their key material. const { syncMessage } = content; - if (syncMessage?.pniChangeNumber) { + if (wasEncrypted && syncMessage?.pniChangeNumber) { inProgressMessageType = 'pni change number'; await this.handlePNIChangeNumber(envelope, syncMessage.pniChangeNumber); this.removeFromCache(envelope); @@ -3323,6 +3324,12 @@ export default class MessageReceiver newE164, }: Proto.SyncMessage.IPniChangeNumber ): Promise { + const ourAci = this.storage.user.getCheckedAci(); + + if (envelope.sourceServiceId !== ourAci) { + throw new Error('Received pni change number from another number'); + } + log.info('MessageReceiver: got pni change number sync message'); logUnexpectedUrgentValue(envelope, 'pniIdentitySync');