Описание
PocketMine-MP ResourcePackDataInfoPacket amplification vulnerability due to lack of resource pack sequence status checking
Summary
A denial-of-service / out-of-memory vulnerability exists in the STATUS_SEND_PACKS handling of ResourcePackClientResponsePacket.
PocketMine-MP processes the packIds array without verifying that all entries are unique.
A malicious (non-standard) Bedrock client can send multiple duplicate valid pack UUIDs in the same STATUS_SEND_PACKS packet, causing the server to send the same pack multiple times. This can quickly exhaust memory and crash the server.
Severity: High — Remote DoS from an authenticated client.
Details
Relevant code (simplified):
Root cause:
- The
packIdsarray is taken directly from the client packet and processed as-is. - There is no check to ensure that all requested packs are unique.
- A malicious client can craft a
STATUS_SEND_PACKSpacket with many duplicates of a valid UUID. - Each duplicate results in the server re-sending the same pack, consuming additional memory.
Why this is unexpected:
- Mojang's official clients never send duplicates in
packIds. - PocketMine assumes the client is well-behaved, but an attacker can bypass this with a custom client.
Suggested fix: Before sending packs:
- Remove duplicates from the incoming
packIdsarray. - If the difference between the original count and unique count exceeds a small threshold (e.g. > 2 duplicates), immediately disconnect the client with an error.
- Track which packs have already been sent to this player, and skip any that have already been transferred.
PoC
-
Join a PocketMine-MP server with at least one resource pack enabled.
-
Using a custom Bedrock client, send a
ResourcePackClientResponsePacketwith:status = STATUS_SEND_PACKSpackIds= many duplicates of a known valid pack UUID.
Example Node.js PoC (requires bedrock-protocol and a valid PACK_UUID):
Impact
- Type: Remote Denial of Service / Memory Exhaustion
- Who is impacted: Any PocketMine-MP server with resource packs enabled
- Requirements: Attacker must connect to the server (authenticated player)
- Effect: Server memory rapidly increases, leading to freeze or crash
Ссылки
- https://github.com/pmmp/PocketMine-MP/security/advisories/GHSA-fqqv-56h5-f57g
- https://github.com/pmmp/PocketMine-MP/commit/c417ecd30d20520227b15e09eda87db492ab0a6a
- https://github.com/pmmp/PocketMine-MP/commit/e375437439df51f7862b6b98318394643fcd6724
- https://github.com/pmmp/PocketMine-MP/releases/tag/5.32.1
Пакеты
pocketmine/pocketmine-mp
< 5.32.1
5.32.1
8.7 High
CVSS4
Дефекты
8.7 High
CVSS4