From ee707a502c61fb3c206d293b6dcc43fbbcc96402 Mon Sep 17 00:00:00 2001 From: AeonLucid Date: Sat, 24 Oct 2020 00:28:02 +0200 Subject: [PATCH] Added deserialization checks --- .../Components/InnerCustomNetworkTransform.cs | 13 ++++++++++++- .../Net/Objects/Components/InnerVoteBanSystem.cs | 5 +++++ .../Innersloth/Net/Objects/InnerGameData.cs | 5 +++++ .../Innersloth/Net/Objects/InnerMeetingHud.cs | 11 ++++++++++- .../Innersloth/Net/Objects/InnerPlayerControl.cs | 7 +++++++ .../Innersloth/Net/Objects/InnerShipStatus.cs | 10 ++++++++++ src/Impostor.Tools.ServerReplay/Program.cs | 10 +++++----- 7 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerCustomNetworkTransform.cs b/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerCustomNetworkTransform.cs index 15f0437..f8b3476 100644 --- a/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerCustomNetworkTransform.cs +++ b/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerCustomNetworkTransform.cs @@ -1,4 +1,5 @@ -using System.Numerics; +using System; +using System.Numerics; using Impostor.Api.Net; using Impostor.Api.Net.Messages; using Microsoft.Extensions.Logging; @@ -87,6 +88,16 @@ namespace Impostor.Api.Innersloth.Net.Objects.Components } else { + if (!sender.IsOwner(this)) + { + throw new ImpostorCheatException($"Client attempted to send unowned {nameof(InnerCustomNetworkTransform)} data."); + } + + if (target != null) + { + throw new ImpostorCheatException($"Client attempted to send {nameof(InnerCustomNetworkTransform)} data to a specific player, must be broadcast."); + } + if (!SidGreaterThan(sequenceId, _lastSequenceId)) { return; diff --git a/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerVoteBanSystem.cs b/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerVoteBanSystem.cs index b77e563..9dbe92f 100644 --- a/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerVoteBanSystem.cs +++ b/src/Impostor.Api/Innersloth/Net/Objects/Components/InnerVoteBanSystem.cs @@ -48,6 +48,11 @@ namespace Impostor.Api.Innersloth.Net.Objects.Components public override void Deserialize(IClientPlayer sender, IClientPlayer? target, IMessageReader reader, bool initialState) { + if (!sender.IsHost) + { + throw new ImpostorCheatException($"Client attempted to send data for {nameof(InnerShipStatus)} as non-host."); + } + var votes = _votes; var unknown = reader.ReadByte(); if (unknown != 0) diff --git a/src/Impostor.Api/Innersloth/Net/Objects/InnerGameData.cs b/src/Impostor.Api/Innersloth/Net/Objects/InnerGameData.cs index cf5d307..3de2852 100644 --- a/src/Impostor.Api/Innersloth/Net/Objects/InnerGameData.cs +++ b/src/Impostor.Api/Innersloth/Net/Objects/InnerGameData.cs @@ -114,6 +114,11 @@ namespace Impostor.Api.Innersloth.Net.Objects public override void Deserialize(IClientPlayer sender, IClientPlayer? target, IMessageReader reader, bool initialState) { + if (!sender.IsHost) + { + throw new ImpostorCheatException($"Client attempted to send data for {nameof(InnerGameData)} as non-host."); + } + if (initialState) { var num = reader.ReadPackedInt32(); diff --git a/src/Impostor.Api/Innersloth/Net/Objects/InnerMeetingHud.cs b/src/Impostor.Api/Innersloth/Net/Objects/InnerMeetingHud.cs index f00c6ef..a203897 100644 --- a/src/Impostor.Api/Innersloth/Net/Objects/InnerMeetingHud.cs +++ b/src/Impostor.Api/Innersloth/Net/Objects/InnerMeetingHud.cs @@ -1,7 +1,6 @@ using System; using System.Linq; using Impostor.Api.Games; -using Impostor.Api.Innersloth.Data; using Impostor.Api.Net; using Impostor.Api.Net.Messages; using Microsoft.Extensions.Logging; @@ -115,6 +114,16 @@ namespace Impostor.Api.Innersloth.Net.Objects public override void Deserialize(IClientPlayer sender, IClientPlayer? target, IMessageReader reader, bool initialState) { + if (!sender.IsHost) + { + throw new ImpostorCheatException($"Client attempted to send data for {nameof(InnerMeetingHud)} as non-host."); + } + + if (target != null) + { + throw new ImpostorCheatException($"Client attempted to send {nameof(InnerMeetingHud)} data to a specific player, must be broadcast."); + } + if (initialState) { PopulateButtons(0); diff --git a/src/Impostor.Api/Innersloth/Net/Objects/InnerPlayerControl.cs b/src/Impostor.Api/Innersloth/Net/Objects/InnerPlayerControl.cs index bfc8fe1..dd2eb8a 100644 --- a/src/Impostor.Api/Innersloth/Net/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Api/Innersloth/Net/Objects/InnerPlayerControl.cs @@ -378,6 +378,11 @@ namespace Impostor.Api.Innersloth.Net.Objects public override void Deserialize(IClientPlayer sender, IClientPlayer? target, IMessageReader reader, bool initialState) { + if (!sender.IsHost) + { + throw new ImpostorCheatException($"Client attempted to send data for {nameof(InnerPlayerControl)} as non-host."); + } + if (initialState) { IsNew = reader.ReadBoolean(); @@ -390,6 +395,8 @@ namespace Impostor.Api.Innersloth.Net.Objects { PlayerInfo.IsDead = true; PlayerInfo.LastDeathReason = reason; + + Console.WriteLine($"{PlayerInfo.PlayerName,-15} died {reason}"); } } } \ No newline at end of file diff --git a/src/Impostor.Api/Innersloth/Net/Objects/InnerShipStatus.cs b/src/Impostor.Api/Innersloth/Net/Objects/InnerShipStatus.cs index 806837f..abbbb25 100644 --- a/src/Impostor.Api/Innersloth/Net/Objects/InnerShipStatus.cs +++ b/src/Impostor.Api/Innersloth/Net/Objects/InnerShipStatus.cs @@ -99,6 +99,16 @@ namespace Impostor.Api.Innersloth.Net.Objects public override void Deserialize(IClientPlayer sender, IClientPlayer? target, IMessageReader reader, bool initialState) { + if (!sender.IsHost) + { + throw new ImpostorCheatException($"Client attempted to send data for {nameof(InnerShipStatus)} as non-host."); + } + + if (target != null) + { + throw new ImpostorCheatException($"Client attempted to send {nameof(InnerShipStatus)} data to a specific player, must be broadcast."); + } + if (initialState) { // TODO: (_systems[SystemTypes.Doors] as DoorsSystemType).SetDoors(); diff --git a/src/Impostor.Tools.ServerReplay/Program.cs b/src/Impostor.Tools.ServerReplay/Program.cs index c904081..7a8802d 100644 --- a/src/Impostor.Tools.ServerReplay/Program.cs +++ b/src/Impostor.Tools.ServerReplay/Program.cs @@ -42,11 +42,11 @@ namespace Impostor.Tools.ServerReplay private static async Task Main(string[] args) { - Log.Logger = new LoggerConfiguration() - // .MinimumLevel.Verbose() - .MinimumLevel.Debug() - .WriteTo.Console() - .CreateLogger(); + // Log.Logger = new LoggerConfiguration() + // // .MinimumLevel.Verbose() + // .MinimumLevel.Debug() + // .WriteTo.Console() + // .CreateLogger(); var stopwatch = Stopwatch.StartNew(); -- 2.39.5