GitHub Advisoryadvisory · Packagist
GHSA-5jfw-35xp-5m42 Buffer length underflow in LoginPacket causing unchecked exceptions to be thrown
HIGH
Official page ↗
- Ecosystem
- Packagist
- Packages
- pocketmine/bedrock-protocol
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses
- CWE-124
- Reviewed
- 2022-04-05
Affected packages
• Packagist pocketmine/bedrock-protocol: < 8.0.2 → fixed in 8.0.2
Description
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 [email protected]
Related
Weakness · CWE (1)
- CWE-124 Buffer Underwrite weakness