Content pfp
Content
@
0 reply
0 recast
0 reaction

lightclient pfp
lightclient
@lightclient
"One bad signature will be able to drain your account on Ethereum after EIP-3074." Yes; this is true. 3074 coauthor here! Let me put this concern to rest a bit before it gets more out of hand.
21 replies
24 recasts
95 reactions

lightclient pfp
lightclient
@lightclient
To start: I'm not aware of any wallets that support signing unprefixed data today. This means that currently, no wallets support 3074. Doesn't matter how many control panels you navigate through or advanced features you turn on. It isn't possible to sign a 3074 message today.
2 replies
0 recast
8 reactions

lightclient pfp
lightclient
@lightclient
The messages you sign to "login" to dapps use a completely different standard based on EIP-191. This prepends the following data to the message you sign: """ 0x19 <0x45 (E)> <thereum Signed Message:\n" + len(message)> <data to sign> """
1 reply
0 recast
7 reactions

lightclient pfp
lightclient
@lightclient
That's what makes it impossible to trick someone logging into a dapp to actually sign a valid Ethereum transaction. Transactions are prefixed with single byte values: 0x01 - 2930 tx 0x02 - 1559 tx 0x03 - 4844 tx more info here: https://github.com/ethereum/execution-specs/tree/master/lists/signature-types
1 reply
0 recast
7 reactions

lightclient pfp
lightclient
@lightclient
3074 plans to use the prefix 0x04. This will disambiguate it from all other types of signable data in Ethereum. Wallets will have to actively opt-in to allowing users to sign these messages.
1 reply
1 recast
7 reactions

lightclient pfp
lightclient
@lightclient
Depending on how wallets integrate 3074, they could create a situation where their users can more easily be exploited. To understand this, we need to make sure we understand how 3074 signatures work.
1 reply
0 recast
5 reactions

lightclient pfp
lightclient
@lightclient
The auth msg which the signature is constructed over have the below fields. Importantly, it includes an invoker address. This is the only address under which the signature will be considered valid by AUTH.
1 reply
0 recast
4 reactions

lightclient pfp
lightclient
@lightclient
For an account to be drained 1) the wallet will need to allow users to sign to any invoker address and 2) the users must not verify the invoker is trustworthy. Do either of those and there is not an issue.
1 reply
0 recast
4 reactions

lightclient pfp
lightclient
@lightclient
For 1) we hope wallets understand that 3074 invokers are more akin to extensions of their code than they are contracts. Wallets don't give users the freedom to run arbitrary code with access to their pk; similarly, they shouldn't allow users to delegate their account arbitrarily.
1 reply
0 recast
5 reactions

lightclient pfp
lightclient
@lightclient
So if wallets insecurely integrate 3074 *and* users do not verify the invoker they're interacting with, it is possible to delegate to a malicious invoker. However, it is possible to undo by sending a single tx from the EOA. This revokes all "in-flight" AUTH signatures.
2 replies
0 recast
5 reactions

lightclient pfp
lightclient
@lightclient
At minimum, wallets should make signing a 3074 message a big deal. This is like exporting-your-private-key level of big deal.
2 replies
1 recast
7 reactions

lightclient pfp
lightclient
@lightclient
Assuming a wallet securely integrates 3074, it is still possible for an account to be swept. This is a fundamental property of batch txs. It as easily allows you to send multiple ops as it allows an attacker to trick you to send a batch of assets to an address they control.
1 reply
1 recast
4 reactions

lightclient pfp
lightclient
@lightclient
Wallets must clearly display each op you're signing over. This way, it is easy to notice "I was only planning to make a single trade, but this signing request is having me do a dozen transfers also". It will be impossible to detect this if batching available via blind signing.
1 reply
0 recast
4 reactions