-
-
Notifications
You must be signed in to change notification settings - Fork 176
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make the server sets Steamids to clients after the validation by Steam servers #1031
base: master
Are you sure you want to change the base?
Conversation
In a good way, we also needs to replace the But for now in the local rebuild of rehlds, I have the the |
You can't spoof someone's ticket, there's a reason why - it's RSA signed with a private key. You can only reuse them (until the expiration, which is 21 days). |
That's right. But in the future, attackers may obtain the private key or otherwise start signing tickets. GoldSrc game servers must be ready for this. “Reusing” of a ticket not with the owner’s account has been the main exploit used by attackers for 10 years; by stealing a ticket from server admins (mostly using social engineering), they gain admin rights on the server. There are also other exploits that allow you to hide your steam avatar in the scoreboard, as well as a complete bypass of the steamid ban via the This pr fixes all currently known vulnerabilities with steam tickets on the server. |
Would this be better as a rehlds plugin? Hooking the functions with the hookchain API and changing the result? I could see potential compatibility issue with plugins, let's say you're running a zombie mod which does stuff on client connect and expects the user to have a id instead of STEAM_ID_PENDING. It seems that On ClientConnect(post) it does only call amxx's client_authorized() if the steam id is not STEAM_ID_PENDING, and if it is adds the player to a list which is then iterated in StartFrame(post) and client_authorized() is called and the player removed from list if he has got the validation since. This change would no longer return valid id in client_connect() and the order of client_putinserver() and client_authorized() could now happen in any order instead of the current client_connect=client_authorized, and client_putinserver afterwards. In any case changes like this can't be just pushed through like this, they should be definitely at least in |
This pr fixes the Steam App Ownership Ticket hijacking/spoofing vulnerability and related exploits. Now the server will sets the steamid from the ticket only after the client connection has been validated by the Steam servers. Before this, the client will be assigned
STEAM_ID_PENDING
(sid 0).In fact, the GoldSrc server followed similar logic before the Steamworks updates.