oss-sec mailing list archives
GodotSteam 4.17 through 4.23.2: any multiplayer peer can claim the server's peer ID
From: Tomasz Kaye <tomasz.brain () gmail com>
Date: Wed, 4 Nov 2026 19:37:49 +0100
GodotSteam lets any player in a session claim to be the server. Godot names players by a peer ID, and ID 1 means the server. Steam verifies the account behind each connection, but GodotSteam accepts whatever peer ID the sender writes into its first packet and never compares the two. A player who writes 1 is treated as the server and can issue the commands a server issues. I published this on 2026-11-04 [1]. Affected versions: GodotSteam v4.17 (2025-12-10) through v4.23.2 (current). The retired addon godotsteam/multiplayerpeer has the same flaw from v4.11-mp (2024-09-27) through v4.16.2 (2025-11-10); its first two tags use a different packet format. The flaw: A new connection's first packet carries a four-byte peer ID that the sender picks. The plugin checks the packet's size and nothing else. It stores the number as the connection's identity, then installs the peer in its peer table under that number. A duplicate number silently overwrites the existing entry. Impact: Godot compares the sender's peer ID, as the transport reports it, with the node's authority. Authority is a per-node setting that starts at 1, the server. Against a client, a co-player takes the server's place and receives the traffic that client sends to the server. That shape is from source; I did not run it. Against a host or dedicated server, a client claiming 1 fills the empty ID-1 slot. The host then runs that client's authority-gated RPCs. I demonstrated the second shape on 2026-11-04 with two computers and two Steam accounts. A stock Godot 4.7.2 / GodotSteam 4.23.2 host ran the attacker's forged grant_gold(1000000) as peer 1. No memory corruption or code execution is claimed. Reproduction: https://github.com/bitbutter/godot-security-pocs/tree/main/2026-11-godotsteam-peer-id-claim Source: godotsteam v4.23.2, src/steam_packet_peer.cpp and src/godotsteam_multiplayer_peer.cpp. Fix status: Unpatched as of 2026-11-04: v4.23.2 is the newest tag, and the only commit since it, on the release branch, changes godotsteam.gdextension. Reported privately to security () godotsteam com on 2026-10-21; no reply received as of 2026-11-04. The report proposed three fixes: reject a claim of 1 on servers, check a client's claim of 1 against the connected server's Steam account, or let the server assign peer IDs. CVE status: Requested from MITRE's CNA-LR on 2026-11-04 (CAN-2026-2042189). This thread will be self-replied when the record publishes. [1] https://axeghost.offprint.app/a/3mzhxoqpnh423-any-networked-co-player-can-act-as-the-server-in-a-godotsteam-game
Current thread:
- GodotSteam 4.17 through 4.23.2: any multiplayer peer can claim the server's peer ID Tomasz Kaye (Nov 04)
