When executeUserOp
forwards user calldata, it does not include msg.value
in function call despite having the payable modifier.
In executeUserOp
, we see how calldata is decoded and forwarded to target address:
When the data is decoded into address, and bytes, which are for contract to call, and the exact call payload, however, in the low level call, msg.value
is not included, which means when users calls the function with some Ether, those Ether will not pass to the destination.
msg.value
will not be passed on, and potentially makes funds to stuck in wallet forever.
Manual review
Change the function to:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.