From ef106a8fde367f2312569ced137861c2785565a8 Mon Sep 17 00:00:00 2001 From: Yaroslav98214 Date: Wed, 4 Feb 2026 22:22:18 +0000 Subject: [PATCH] fix: enforce E2EE metadata validation Fail fast when metadata verification detects counter, signature, or checksum issues. Signed-off-by: Yaroslav98214 --- .../com/owncloud/android/utils/EncryptionUtilsV2.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/utils/EncryptionUtilsV2.kt b/app/src/main/java/com/owncloud/android/utils/EncryptionUtilsV2.kt index 6f8fdc011f09..3f1dc86424ef 100644 --- a/app/src/main/java/com/owncloud/android/utils/EncryptionUtilsV2.kt +++ b/app/src/main/java/com/owncloud/android/utils/EncryptionUtilsV2.kt @@ -250,7 +250,9 @@ class EncryptionUtilsV2 { ) } - verifyMetadata(metadataFile, decryptedFolderMetadataFile, oldCounter, signature) + if (!verifyMetadata(metadataFile, decryptedFolderMetadataFile, oldCounter, signature)) { + throw IllegalStateException("Metadata is corrupt!") + } val transferredFiledrop = filesDropCountBefore > 0 && decryptedFolderMetadataFile.metadata.files.size == filesBefore + filesDropCountBefore @@ -953,10 +955,10 @@ class EncryptionUtilsV2 { decryptedFolderMetadataFile: DecryptedFolderMetadataFile, oldCounter: Long, signature: String - ) { + ): Boolean { if (decryptedFolderMetadataFile.metadata.counter < oldCounter) { MainApp.showMessage(R.string.e2e_counter_too_old) - return + return false } val message = EncryptionUtils.serializeJSON(encryptedFolderMetadataFile, true) @@ -965,14 +967,15 @@ class EncryptionUtilsV2 { if (certs.isNotEmpty() && !verifySignedData(signedData, certs)) { MainApp.showMessage(R.string.e2e_signature_does_not_match) - return + return false } val hashedMetadataKey = hashMetadataKey(decryptedFolderMetadataFile.metadata.metadataKey) if (!decryptedFolderMetadataFile.metadata.keyChecksums.contains(hashedMetadataKey)) { MainApp.showMessage(R.string.e2e_hash_not_found) - return + return false } + return true } private fun getSignedData(base64encodedSignature: String, message: String): CMSSignedData {