mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2026-03-11 08:54:48 +00:00
Attack - KeeShare attachments can be inferred because of attachment de-duplication. Solution - Prevent de-duplication of normal database entry attachments with those entry attachments synchronized/associated with a KeeShare database. This is done using the KeeShare database UUID injected into the hash calculation of the attachment prior to de-dupe. The attachments themselves are not modified in any way. -------- Attack - Side channel byte-by-byte inference due to compression de-duplication of data between a KeeShare database and it's parent. Solution - Generate a random array between 64 and 512 bytes, convert to hex, and store in the database custom data. -------- Attack vector assumptions: 1. Compression is enabled 2. The attacker has access to a KeeShare database actively syncing with the victim's database 3. The victim's database is unlocked and syncing 4. The attacker can see the exact size of the victim's database after saving, and syncing, the KeeShare database Thank you to Andrés Fábrega from Cornell University for theorizing and informing us of this attack vector.
40 lines
1.3 KiB
C++
40 lines
1.3 KiB
C++
/*
|
|
* Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 or (at your option)
|
|
* version 3 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef KEEPASSX_KDBX4WRITER_H
|
|
#define KEEPASSX_KDBX4WRITER_H
|
|
|
|
#include "KdbxWriter.h"
|
|
#include "format/KdbxXmlWriter.h"
|
|
|
|
/**
|
|
* KDBX4 writer implementation.
|
|
*/
|
|
class Kdbx4Writer : public KdbxWriter
|
|
{
|
|
Q_DECLARE_TR_FUNCTIONS(Kdbx4Writer)
|
|
|
|
public:
|
|
bool writeDatabase(QIODevice* device, Database* db) override;
|
|
|
|
private:
|
|
bool writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeaderFieldID fieldId, const QByteArray& data);
|
|
KdbxXmlWriter::BinaryIdxMap writeAttachments(QIODevice* device, Database* db);
|
|
static bool serializeVariantMap(const QVariantMap& map, QByteArray& outputBytes);
|
|
};
|
|
|
|
#endif // KEEPASSX_KDBX4WRITER_H
|