From e73120d4ab5b1a93c6ad051ff6807af02cd8a039 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Sun, 19 Jul 2020 13:50:13 +0200 Subject: QXmppCarbonManager: Fix vulnerability: Add sender check The XEP requires that only carbon messages from the client's bare JID are accepted. This prevents that other entities can inject messages into the client. --- .../qxmppcarbonmanager/tst_qxmppcarbonmanager.cpp | 69 ++++++++++++++++++++-- 1 file changed, 65 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/qxmppcarbonmanager/tst_qxmppcarbonmanager.cpp b/tests/qxmppcarbonmanager/tst_qxmppcarbonmanager.cpp index 6166c6f1..684c7470 100644 --- a/tests/qxmppcarbonmanager/tst_qxmppcarbonmanager.cpp +++ b/tests/qxmppcarbonmanager/tst_qxmppcarbonmanager.cpp @@ -23,6 +23,7 @@ */ #include "QXmppCarbonManager.h" +#include "QXmppClient.h" #include "QXmppMessage.h" #include "util.h" @@ -56,16 +57,24 @@ private slots: private: QXmppCarbonTestHelper m_helper; - QXmppCarbonManager m_manager; + QXmppCarbonManager *m_manager; + QXmppClient client; }; void tst_QXmppCarbonManager::initTestCase() { - connect(&m_manager, &QXmppCarbonManager::messageSent, + m_manager = new QXmppCarbonManager(); + + connect(m_manager, &QXmppCarbonManager::messageSent, &m_helper, &QXmppCarbonTestHelper::messageSent); - connect(&m_manager, &QXmppCarbonManager::messageReceived, + connect(m_manager, &QXmppCarbonManager::messageReceived, &m_helper, &QXmppCarbonTestHelper::messageReceived); + + client.connectToServer("romeo@montague.example", "a"); + client.disconnectFromServer(); + + client.addExtension(m_manager); } void tst_QXmppCarbonManager::testHandleStanza_data() @@ -127,6 +136,58 @@ void tst_QXmppCarbonManager::testHandleStanza_data() "0e3141cd80894871a68e6fe6b1ec56fa" ""); + QTest::newRow("received-wrong-from") + << QByteArray("" + "" + "" + "" + "What man art thou that, thus bescreen'd in night, so stumblest on my counsel?" + "0e3141cd80894871a68e6fe6b1ec56fa" + "" + "" + "" + "") + << false << false + << QByteArray("" + "What man art thou that, thus bescreen'd in night, so stumblest on my counsel?" + "0e3141cd80894871a68e6fe6b1ec56fa" + ""); + + QTest::newRow("sent-wrong-from") + << QByteArray("" + "" + "" + "" + "Neither, fair saint, if either thee dislike." + "0e3141cd80894871a68e6fe6b1ec56fa" + "" + "" + "" + "") + << false << true + << QByteArray("" + "Neither, fair saint, if either thee dislike." + "0e3141cd80894871a68e6fe6b1ec56fa" + ""); + QTest::newRow("forwarded_normal") << QByteArray("" "A most courteous exposition!" @@ -167,7 +228,7 @@ void tst_QXmppCarbonManager::testHandleStanza() QCOMPARE(doc.setContent(xml, true), true); QDomElement element = doc.documentElement(); - bool accepted = m_manager.handleStanza(element); + bool accepted = m_manager->handleStanza(element); QCOMPARE(accepted, accept); QCOMPARE(m_helper.m_signalTriggered, accept); -- cgit v1.2.3