decentraland / decentraland/world-storage-service

IDOR: any world owner/deployer can read & modify other players' player-storage

Open
#106 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
15h 8m
Merged PRs (30d)
3

Description

## Summary
The player-storage handlers take `:player_address` from the path but never check it against the authenticated caller. `authorization-middleware.ts:95` only verifies world-level permission (`hasWorldPermission(worldName, signerAddress, parcel)`), and `list-player-storage.ts:34` (and the get/upsert/delete/clear handlers) use `params.player_address` directly without requiring `ctx.verification.auth === player_address`.

## Impact
A world owner/deployer (or any address in `AUTHORIZED_ADDRESSES`) can read, overwrite, and delete the player-storage values of **any** player in that world — `GET/PUT/DELETE /players/:player_address/values[/:key]` and `DELETE /players/:player_address/values`.

## Fix
If player storage is meant to be private per player, require `ctx.verification.auth === params.player_address` (case-insensitive) in the player-storage handlers, in addition to the world-permission check. If world owners are intended to manage player data, document that explicitly. Please confirm the intended access model.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.