93 words
1 minute
DreamHack - [Proton Memo challenge writeup]

The vulnerability lies in the set_attr() function. Notice that, the untrusted data here is selected_option, which is restricted with two options by the front-end, but freely in the backend.

The probable unsafe method that selected_option falls into is setattr(), which is Python built-in function.

So I did a Google search with python setattr() user-controller attributes vulnerability and found this link.

This challenge is vulnerable to mass_assignment vulnerability and thanks to the hasattr() and getattr() functions, we could traverse to the from a memo instance to its class, which able to access the shared collections.

Payload:

selected_option=__class__.collections.<secret-uuid>.password
edit_data=<sha256-of-new-password>
password=<your-memo-password>
DreamHack - [Proton Memo challenge writeup]
https://minhi1.github.io/minhi1-blogs/posts/dreamhack/level-4/proton-memo/
Author
Minhi1
Published at
2025-12-25
License
CC BY-NC-SA 4.0