From c6c186c77bfe144b35b86047ace67b8e5bbfae4e Mon Sep 17 00:00:00 2001 From: Alex Rad <37549748+lts-rad@users.noreply.github.com> Date: Mon, 11 Aug 2025 08:05:36 -0700 Subject: [PATCH] Prevent spoofable plaintext messages from sliding into private chats (#428) --- bitchat/Services/BluetoothMeshService.swift | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/bitchat/Services/BluetoothMeshService.swift b/bitchat/Services/BluetoothMeshService.swift index 926606b0..563b9365 100644 --- a/bitchat/Services/BluetoothMeshService.swift +++ b/bitchat/Services/BluetoothMeshService.swift @@ -3374,7 +3374,7 @@ class BluetoothMeshService: NSObject { } } - private func handleReceivedPacket(_ packet: BitchatPacket, from peerID: String, peripheral: CBPeripheral? = nil) { + private func handleReceivedPacket(_ packet: BitchatPacket, from peerID: String, peripheral: CBPeripheral? = nil, decrypted: Bool = false) { messageQueue.async(flags: .barrier) { [weak self] in guard let self = self else { return } @@ -3688,7 +3688,12 @@ class BluetoothMeshService: NSObject { } else if isPeerIDOurs(recipientID.hexEncodedString()) { // PRIVATE MESSAGE FOR US - + if (decrypted == false) { + //spoofing detected!! + SecureLogger.log("YIKES spoofing detected from \(senderID)", category: SecureLogger.encryption, level: .warning) + return; + } + // No signature verification - broadcasts are not authenticated @@ -6888,7 +6893,7 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate { // The packet will be handled according to its recipient ID // If it's for us, it won't be relayed // Pass the peripheral context for proper ACK routing - handleReceivedPacket(innerPacket, from: peerID, peripheral: peripheral) + handleReceivedPacket(innerPacket, from: peerID, peripheral: peripheral, decrypted: true) } else { SecureLogger.log("Failed to parse inner packet from decrypted data", category: SecureLogger.encryption, level: .warning) }