From e22b130d984828d79eb5f6424c20a4f90b88bcc2 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Thu, 30 Mar 2023 11:06:15 +0200 Subject: [PATCH] prevent syncing with downgraded metadata format should prevent a malicious server admin to make clients fallback to older vulnerable metadata format Signed-off-by: Matthieu Gallien --- src/libsync/owncloudpropagator.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 15567d680..716543101 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -646,10 +646,23 @@ void OwncloudPropagator::startDirectoryPropagation(const SyncFileItemPtr &item, const auto currentDirJob = directories.top().second; currentDirJob->appendJob(directoryPropagationJob.get()); } - if (item->_isFileDropDetected || item->_isEncryptedMetadataNeedUpdate) { + if (item->_isFileDropDetected) { directoryPropagationJob->appendJob(new UpdateFileDropMetadataJob(this, item->_file)); item->_instruction = CSYNC_INSTRUCTION_NONE; _anotherSyncNeeded = true; + } else if (item->_isEncryptedMetadataNeedUpdate) { + SyncJournalFileRecord record; + if (_journal->getFileRecord(item->_file, &record) && record._isE2eEncrypted == SyncJournalFileRecord::EncryptionStatus::EncryptedMigratedV1_2) { + qCDebug(lcPropagator) << "could have upgraded metadata"; + item->_instruction = CSyncEnums::CSYNC_INSTRUCTION_ERROR; + item->_errorString = tr("Error with the metadata. Getting unexpected metadata format."); + item->_status = SyncFileItem::NormalError; + emit itemCompleted(item); + } else { + directoryPropagationJob->appendJob(new UpdateFileDropMetadataJob(this, item->_file)); + item->_instruction = CSYNC_INSTRUCTION_NONE; + _anotherSyncNeeded = true; + } } directories.push(qMakePair(item->destination() + "/", directoryPropagationJob.release())); } -- 2.30.2