Beschreibung
Durch zwei simple Einträge in der autoexec.cfg lässt sich der Server mit beliebig vielen Slots starten.
Folgender Code würde z.B. den Server mit 64 Slots starten:
|
Quellcode
|
1
2
|
maxplayers 64
map de_dust2
|
Betroffen ist das bekannte WI, was viele Clans und Provider einsetzen. Unter anderem könnten auch MyWI und andere gefährdet sein. Provider, die ein eigenes WI einsetzen, kennen den Bug sicherlich schon länger und haben dementsprechende Scripts, um den Missbrauch zu verhindern.
Erklärung
Die Cvar "maxplayers" lässt sich beliebig ändern, wenn noch keine Map geladen ist. Sobald eine Map geladen worden ist, kann die Cvar nicht mehr geändert werden. Dabei spielt es keine Rolle, ob -maxplayers oder +maxplayers im Startbefehl verwendet worden ist. Bei -maxplayers wird die Cvar direkt gesetzt. Bei +maxplayers erst nach dem Laden der autoexec.cfg (stuffcmds in der valve.rc). Das hat zur Folge, dass in der autoexec.cfg maxplayers nochmals geändert werden kann. Durch das Laden einer Map in der autoexec.cfg beginnt das Spiel und die Slotanzahl lässt sich auch nicht mehr ändern.
Möglicher Fix
- autoexec.cfg gegen Veränderungen schützen. Bei Public-Servern, auf denen die Kunden Eventscripts einsetzen wollen, kann es möglicherweise zu Problemen kommen. Erfahrene Kunden werden sich auch beschweren, da man die autoexec.cfg sinnvoll einsetzen kann. (z.B. Cvars setzen, die erst nach einem Mapchange gültig sind)
- Vor jedem Start des Servers einen Filter einsetzen, der die komplette Zeile aus der autoexec.cfg entfernt. Ein einfacher Filter könnte z.B. so aussehen:
|
Quellcode
|
1
|
find ~ -type f -name "autoexec.cfg" -exec sed -i /maxplayers/I,/exec/Id {} \;
|
Dieser Filter löscht alle Zeilen, in denen maxplayers oder exec vorkommt. Das Zulassen von exec in der autoexec.cfg würde die Prüfung um ein vielfaches komplizierter machen. Groß-/Kleinschreibung beider Befehle wird durch den Schalter "I" ignoriert. Die valve.rc sollte gegen Änderungen geschützt sein. Ansonsten könnte man in der autoexec.cfg andere Configs laden und dort die Befehle verwenden.
- Durch ein PHP-Queryscript kann nach dem Start des Servers überprüft werden, ob dieser online ist und ob die eingestellte Slotanzahl dem Vertrag entspricht. Manche setzen es auch schon ein um z.B. den Namen des Gameservers zu überprüfen.
Ich werde den Bug in der HLDS-Mailing-List melden. Vielleicht lässt sich Valve dazu ermutigen, dass durch -maxplayers sich die Slotanzahl nicht mehr ändern lässt. Sinnvoll wäre dies allemal.