From 630555ca51f3b3c26f235d50e8455bedebaa5d7e Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Thu, 23 Mar 2023 01:08:36 -0700 Subject: [PATCH] More bad actor cvars --- src/d_clisrv.c | 13 ++++++++++++- src/d_clisrv.h | 3 +++ src/d_netcmd.c | 15 +++++++++------ src/d_netfil.c | 18 ++++++++++++++++++ 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 2f6b52142..ee39653c4 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -183,6 +183,9 @@ consvar_t cv_allowguests = CVAR_INIT ("allowguests", "On", CV_SAVE, CV_OnOff, NU consvar_t cv_nochallenge = CVAR_INIT ("nochallenge", "0", 0, CV_Unsigned, NULL); consvar_t cv_badresults = CVAR_INIT ("badresults", "0", 0, CV_Unsigned, NULL); consvar_t cv_noresults = CVAR_INIT ("noresults", "0", 0, CV_Unsigned, NULL); + consvar_t cv_badjointime = CVAR_INIT ("badjointime", "0", 0, CV_Unsigned, NULL); + consvar_t cv_badip = CVAR_INIT ("badip", "0", 0, CV_Unsigned, NULL); + consvar_t cv_badchallengetime = CVAR_INIT ("badchallengetime", "0", 0, CV_Unsigned, NULL); #endif // engine @@ -6330,7 +6333,15 @@ static void UpdateChallenges(void) // Random noise so it's difficult to reuse the response // Current time so that difficult to reuse the challenge - const time_t now = time(NULL); + time_t now = time(NULL); + #ifdef DEVELOP + if (cv_badchallengetime.value) + { + CV_AddValue(&cv_badchallengetime, -1); + CONS_Alert(CONS_WARNING, "cv_badchallengetime enabled, scrubbing time from PT_CHALLENGEALL\n"); + now = 0; + } + #endif CONS_Printf("now: %ld, gamemap: %hd\n", now, gamemap); csprng(netbuffer->u.challengeall.secret, sizeof(netbuffer->u.challengeall.secret)); memcpy(netbuffer->u.challengeall.secret, &now, sizeof(now)); // First few bytes are the timestamp... diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 68e889eab..3913f0182 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -530,6 +530,9 @@ extern consvar_t cv_allowguests; extern consvar_t cv_nochallenge; extern consvar_t cv_badresults; extern consvar_t cv_noresults; + extern consvar_t cv_badjointime; + extern consvar_t cv_badip; + extern consvar_t cv_badchallengetime; #endif // Used in d_net, the only dependence diff --git a/src/d_netcmd.c b/src/d_netcmd.c index c3fd3cf72..b30f3ffe3 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -949,13 +949,16 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_allowguests); #ifdef DEVELOP - CV_RegisterVar(&cv_badjoin); // implemented - CV_RegisterVar(&cv_badtraffic); // implemented - CV_RegisterVar(&cv_badresponse); // implemented + CV_RegisterVar(&cv_badjoin); + CV_RegisterVar(&cv_badtraffic); + CV_RegisterVar(&cv_badresponse); CV_RegisterVar(&cv_noresponse); - CV_RegisterVar(&cv_nochallenge); // implemented - CV_RegisterVar(&cv_badresults); // implemented - CV_RegisterVar(&cv_noresults); // implemented + CV_RegisterVar(&cv_nochallenge); + CV_RegisterVar(&cv_badresults); + CV_RegisterVar(&cv_noresults); + CV_RegisterVar(&cv_badjointime); + CV_RegisterVar(&cv_badip); + CV_RegisterVar(&cv_badchallengetime); #endif // HUD diff --git a/src/d_netfil.c b/src/d_netfil.c index 9d2f3d4ce..67759d677 100644 --- a/src/d_netfil.c +++ b/src/d_netfil.c @@ -1325,11 +1325,29 @@ void PT_ClientKey(INT32 node) netbuffer->packettype = PT_SERVERCHALLENGE; time_t now = time(NULL); + #ifdef DEVELOP + if (cv_badjointime.value) + { + CV_AddValue(&cv_badjointime, -1); + CONS_Alert(CONS_WARNING, "cv_badjointime enabled, scrubbing time from PT_SERVERCHALLENGE\n"); + now = 0; + } + #endif + // Include our IP and current time in the message to be signed, to guard against signature reuse. csprng(lastSentChallenge[node], sizeof(serverchallenge_pak)); memcpy(lastSentChallenge[node], &ourIP, sizeof(ourIP)); memcpy(lastSentChallenge[node] + sizeof(ourIP), &now, sizeof(time_t)); + #ifdef DEVELOP + if (cv_badip.value) + { + CV_AddValue(&cv_badip, -1); + CONS_Alert(CONS_WARNING, "cv_badip enabled, scrubbing IP from PT_SERVERCHALLENGE\n"); + memset(lastSentChallenge[node], 0, sizeof(ourIP)); + } + #endif + memcpy(&netbuffer->u.serverchallenge, lastSentChallenge[node], sizeof(serverchallenge_pak)); HSendPacket(node, false, 0, sizeof (serverchallenge_pak)); }