GMS-2022-630: Buffer length underflow in LoginPacket causing unchecked exceptions to be thrown
(updated )
Impact
LoginPacket
uses BinaryStream->getLInt()
to read the lengths of JSON payloads it wants to decode. Unfortunately, BinaryStream->getLInt()
returns a signed integer, meaning that a malicious client can craft a packet with a large uint32 value for payload buffer size (which would be interpreted as a negative signed int32), causing BinaryStream->get()
to throw an exception.
In the context of PocketMine-MP, this leads to a server crash when the vulnerability is exploited.
Patches
e3fce7632b94e83fd6a518a87dcaf6a11681c4ac
Workarounds
This can be worked around by registering a custom LoginPacket
implementation into PacketPool
which overrides this code to patch it.
For more information
- Email us at team@pmmp.io
References
Detect and mitigate GMS-2022-630 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →