Cowsay As A Service
Prototype pollution leads to RCE
Last updated
Prototype pollution leads to RCE
Last updated
Enjoy your cowsay life with our Cowsay as a Service! You can spawn your private instance from https://cowsay-as-a-service.chal.acsc.asia/. Notice: Please do not spawn too many instances since our server resource is limited. You can check the source code and run it in your local machine before do that. Each instances are alive only for 5 minutes. But don't worry! You can spawn again even if your instance expired.\
https://cowsay-as-a-service.chal.acsc.asia/
The /usr/games/cowsay
game is run from child_process.spawnSync
.
The settings endpoint sets the settings for ctx.state.user
, which is also equal to the username
cookie. The setting name is also user-controlled.
This allows us to perform prototype pollution. I used __proto__
as the username, which will set settings for {}.__proto__
. Then, we can use shell
as the setting name to set shell=true
for all objects.
This makes the command run within a shell, allowing us to perform command injection:
http://cowsay-nodes.chal.acsc.asia:64280/cowsay?say=test;echo%20$FLAG
This will output the FLAG
environment variable.
ACSC{(oo)<Moooooooo_B09DRWWCSX!}