Skip to content

[BUG]: StrafeBoost Exploit #1153

Description

@huisos43

👉👈 Contact Details (optional)

https://www.pochta.ru

🤔 What happened?

Hello, ancient Greeks!

Pred-message

I recently played on a public server that has all sorts of fps-limit plugins that cap FPS to a maximum of 200. A cheater joined and flew across the entire map at incredible speed, his strafe boost reaching significantly higher than at 200 FPS.
I observed this from spectator mode, and the server displayed the cheater's 200 FPS, with no hints of bypassing the fps-limit plugins.

Checking in own server

Also, a similar cheater joined my Portuguese kz server. I thoroughly checked to make sure it wasn't bypassing the fps-limit plugins or skip-frameing. I checked everything I could: cvars, cmd->msec, the number of clc_move calls, the number of PPS from the incoming IP. Everything matched the results of regular players playing at 100 FPS, but again, his strafe boost didn't match the 100 FPS boost.

Trying detect problem

I settled on the option of possibly exploiting the game's processing itself, and installed ReGameDll to check exactly what was happening in the PM_AirMove and PM_AirAccelerate functions.

I came across something strange in this function from these cheaters. If you're familiar with the Half-Life 2 situation (backward bunny hopping and acceleration), something similar is happening here.

How u known these cheaters:

  1. The camera didn't strafe (there was no movement with cmd->viewangles)
  2. There was a huge boost from strafes that didn't correspond to the FPS.

When checking the values ​​in the above functions (PM_AirMove, PM_AirAccelerate), these player`s angles were closer to 360 degrees (not 180), meaning they were strafeing backwards.
The problem was solved in the usual way—simply normalizing the angles, these cheaters stopped boosting their strafe speeds.

My guesses

I don't fully understand how the entire calculation in the PM_AirAccelerate function works, but it's possible it's related to a bug from Half-Life 2 that no one noticed.
My guess is that when the "Y angle overflowed," the "real_t currentSpeed" variable was giving too low a value, causing the subsequent algorithm to heavily boost these cheaters.

I could be wrong about a complete fix by normalizing angles; cheaters might brute-force that same maximum 180-360 angle so that the subsequent algorithm with "currentSpeed" produces the lowest result and the end-result be same (very high boost).

⚠️ Meta-information

Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.14.0.857-dev
Build date: 19:52:21 Mar 27 2025 (4002)
Build from: https://github.com/rehlds/ReHLDS/commit/89958d3

ReGameDLL version: 5.28.0.0-dev
Build date: 18:47:07 Feb 04 2026
Build from:

Metamod-r v1.3.0.149, API (5:13)
Metamod-r build: 11:31:17 Apr 23 2024
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/603a257

Currently loaded plugins:
      description   stat pend  file                       vers            src  load  unload
 [ 1] AMX Mod X     RUN   -    amxmodx_mm_i386.so         v1.10.0.5474    ini  Start ANY
 [ 2] Reunion       RUN   -    reunion_mm_i386.so         v0.2.0.25       ini  Start Never
 [ 3] Revoice       RUN   -    revoice_mm_i386.so         v0.1.0.34       ini  Start Never
 [ 4] ReSemiclip    RUN   -    resemiclip_mm_i386.so      v2.4.3          ini  Chlvl ANY
 [ 5] FakeMeta      RUN   -    fakemeta_amxx_i386.so      v1.10.0.5474    pl1  ANY   ANY
 [ 6] hackdetector  RUN   -    hackdetector_amxx_i386.so  v0.15.328.lite  pl1  ANY   ANY
 [ 7] GeoIP         RUN   -    geoip_amxx_i386.so         v1.10.0.5474    pl1  ANY   ANY
 [ 8] Ham Sandwich  RUN   -    hamsandwich_amxx_i386.so   v1.10.0.5474    pl1  ANY   ANY
 [ 9] Fun           RUN   -    fun_amxx_i386.so           v1.10.0.5474    pl1  ANY   ANY
 [10] CStrike       RUN   -    cstrike_amxx_i386.so       v1.10.0.5474    pl1  ANY   ANY
10 plugins, 10 running

Linux

📄 Relevant log output

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions