From 03657525ad0c76fb1daedc68a91817df87be2676 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Wed, 18 Sep 2013 21:05:46 +0200 Subject: [PATCH 1/3] Core/Auth: Mitigate DoS attacks to authserver Mitigate DoS attacks to authserver like "Wow Auth Flooder.exe" by allowing a finite number of AUTH_LOGON_CHALLEGE packets in a row from same socket, 3 sounds like a reasonable limit. --- src/server/authserver/Server/AuthSocket.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp index 1ab9ae6eb6..4a9d3ce7fa 100644 --- a/src/server/authserver/Server/AuthSocket.cpp +++ b/src/server/authserver/Server/AuthSocket.cpp @@ -222,12 +222,25 @@ void AuthSocket::OnClose(void) // Read the packet from the client void AuthSocket::OnRead() { + #define MAX_AUTH_LOGON_CHALLENGES_IN_A_ROW 3 + uint32 challengesInARow = 0; uint8 _cmd; while (1) { if (!socket().recv_soft((char *)&_cmd, 1)) return; + if (_cmd == AUTH_LOGON_CHALLENGE) + { + ++challengesInARow; + if (challengesInARow == MAX_AUTH_LOGON_CHALLENGES_IN_A_ROW) + { + TC_LOG_WARN(LOG_FILTER_AUTHSERVER, "Got %u AUTH_LOGON_CHALLENGE in a row from '%s', possible ongoing DoS", challengesInARow, socket().getRemoteAddress().c_str()); + socket().shutdown(); + return; + } + } + size_t i; // Circle through known commands and call the correct command handler From 7f42a68c14a721033908ed4855f9aa2afea94cbe Mon Sep 17 00:00:00 2001 From: Filip Date: Sat, 5 Oct 2013 22:35:51 +0200 Subject: [PATCH 2/3] DB/SAI: Blighted last rites By @dr-j fixes #9172 --- sql/updates/world/2013_10_05_00_world_sai.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 sql/updates/world/2013_10_05_00_world_sai.sql diff --git a/sql/updates/world/2013_10_05_00_world_sai.sql b/sql/updates/world/2013_10_05_00_world_sai.sql new file mode 100644 index 0000000000..c76916ee05 --- /dev/null +++ b/sql/updates/world/2013_10_05_00_world_sai.sql @@ -0,0 +1,9 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=48188; + +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 48188, 0, 0, 31, 0, 3, 27349, 0, 0, 0, 0, '', 'Flask of Blight Targets Scarlet Onslaught Prisoner'); + +DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=48188; + +INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES +(0, 48188, 64, '', '', 'Ignore LOS on Flask of Blight'); From b658c177031ede8ecf5d1cff5212b4af43f8a796 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 5 Oct 2013 23:59:52 +0200 Subject: [PATCH 3/3] Core/Spells: Fixed summoning players after recent changes --- src/server/game/Spells/Spell.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index b2e8a89c86..2eee80924a 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5326,7 +5326,7 @@ SpellCastResult Spell::CheckCast(bool strict) if (!m_caster->GetTarget()) return SPELL_FAILED_BAD_TARGETS; - Player* target = m_caster->ToPlayer()->GetSelectedPlayer(); + Player* target = ObjectAccessor::FindPlayer(m_caster->ToPlayer()->GetTarget()); if (!target || m_caster->ToPlayer() == target || (!target->IsInSameRaidWith(m_caster->ToPlayer()) && m_spellInfo->Id != 48955)) // refer-a-friend spell return SPELL_FAILED_BAD_TARGETS;