Fatal flaws in a bot, a sort of on-chain virus, a trojan horse token, and arbitrage gone wrong

Join me in looking at the latest MEV bot exploit in this thread 👇🏻
The victim today tried to arbitrage the CHUM token (!) for ~0.01 ETH in profit, but in the process had 30 WETH transferred out of their wallet.

They only interacted with Uniswap v2 pools, how did this happen!?
Searchers optimize their contracts to the extreme to do very specific things very efficiently.

However, occasionally they have a need to do random things & add in functions that can be used for to execute basically any arbitrary transaction in a contract

The Flashbots simple arb example has one of these! It can execute arbitrary transactions on behalf of the owner, and only the owner.

This is validated by checking who is calling this function with msg.sender, which is important to this story.

github.com/flashbots/simp…
Decompiling their contract, the victim uses tx.origin to ensure that transactions calling some functions originated with their account.

Including a function that made arbitrary calls.

As with the THORChain saga this is very dangerous.
Still, for almost any interaction on-chain it was fine.

To make an arbitrary call with this victim's contract you would need them to originate the transaction somehow and inject your desired transaction in their's, like a virus!

How might you bait them into doing so?
Well, the victim was an arbitrage bot! The answer was to bait them by deploying a new token and creating a fake arb to get them to interact with that token.

Thus the CHUM token and two Uniswap v2 pools were borne.
But how does CHUM work? Let's go through it end to end.

First, the victim tried to swap on the Uniswap v2 pool

Then, the Uniswap v2 pool transferred CHUM back to the victim, in doing so triggering some special logic
What happens now?

This was hard to piece together but I think I got it with 3 clues.

1st, you can see in CHUM decompiled that it checks for certain addresses as well as using block.coinbase and making calls.

This is CHUM targeting the victim & maybe avoiding simulation.
Second, looking @ CHUM's transactions we can see transactions with input data that contains the address for WETH, as well as the attacker's address (3a28...), and what looks to be numbers.

Looks to me like a custom payload that transfers WETH to the attacker, a sort of virus.
Lastly, we can also see in a trace of the execution that CHUM is calling another contract (!) "0x33..." that is hard to spot on Etherscan.

With these I think we can construct what happened.
The attacker first injects the on-chain virus designed to transfer WETH out of the victim into CHUM

Victim arbs CHUM and the Uniswap pool calls transfer on CHUM as part of the swap

CHUM calls then contract 0x33 with the WETH transfer virus
0x33 then calls the victim's contract with the WETH transfer virus, attempting to execute it

The victim's contract checks to see that the victim started the transaction and this condition passes.

The victim's contract executes the virus.

The attacker is sent 30 WETH.
The attacker then IMMEDIATELY updated their WETH transfer virus and repeated this twice more for 35 WETH in total.

They were watching closely.
This was a highly targeted attack pointed at a specific bot's contract. It would only work for bots with a specific function AND if the bot used tx.origin as a safety check.

I have to wonder how they even found that vulnerability amongst hundreds of other bots.
Still, it was relatively easy to defend against. First, you shouldn't use tx.origin as a safety check.

Second, you should check that your transaction has made a project before paying the miner!
That is it for today everyone.

Check out our Github to learn more and get involved if you're interested in mitigating MEV's negative externalities:

github.com/flashbots/pm
Huge shout to the Flashbots team who I am eternally grateful to for their tireless and excellent work

@phildaian @tzhen @epheph @ObadiaAlex @thegostep @jparyani @fiiiu_ @tkstanczak
@taarushv @LukeYoungblood @sui414
Profit***

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Robert Miller

Robert Miller Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @bertcmiller

31 Jul
New MEV bot violence thread being written now 🔥
Writing this as quick as I can but I gotta figure this one out first. It's a hard one.
Looks like tomorrow or Monday I’ll put something out. Taking awhile to understand and express in a way that makes sense and I’ve got stuff to do today. Sorry folks.
Read 4 tweets
7 Jul
All 8 transactions here - including some from unexpected places - are a part of one sandwich!

A thread on the increasingly complex sandwich bots we're seeing
A normal 🥪 bot looks like this

🥪 frontruns a user, buying the asset they intend to and increasing the price. The user gets less tokens now.

The user's buy is then included, pushing the price up more

🥪 sells after the user's tx at the higher price, thus capturing profit
🥪 bots will watch the mempool for users trading with high slippage that they can frontrun. Until recently 🥪 bots would only do this with one trade, and with the Uniswap v2 or Sushiswap router.

But they've leveled up.
Read 13 tweets
7 Jul
🟥MEV negative externalities🟥
This Polygon bot has been active since June 29th & has sent ~2m transactions, failing *almost* all the time

These failures cost close to nothing but bloat the state, while the few successes pay for the failures many times over Image
Success transaction:
polygonscan.com/tx/0xfc3d1b688…

One of the many failures: polygonscan.com/tx/0x989a72bce…
The tricky thing for this bot is it needs to land right behind another user's tx to succeed

Since it can't express those ordering preferences and because the costs of a transaction are so low, it chooses to spam the network with transactions and hope one lands in the right place
Read 6 tweets
24 Jun
It's a golden age for searchers. Late enough that Flashbots and DeFi exists, but not so late that massive institutions are competing for MEV.
Even still the barrier to entry for the top strategies is getting higher very quickly. It's probably a few months of work to catch up to the best backrunning arb bots now.
It is funny to think about the early days of Flashbots when there was literally 1 market maker, 1 ESD bot, and 2 arb bots sending bundles. Unbelievably good opportunity to make money back then.
Read 4 tweets
22 Jun
Sorry everyone, long overdue, but its time for a new MEV thread

Today we look at the Flashbots auction and the searchers that were able to game it using a super clever exploit in how we priced and merged bundles

Let's go 👇🏻🧵
For our journey today you will need a deep knowledge of Flashbots bundles

Bundles are groups of transactions executed in the order they are provided. Either the entire bundle is executed, or none of it is

That allows users to express transaction preferences very granularly
For some time we could only support a single bundle per block, but recently Flashbots introduced the ability to merge independent bundles!

Here's a thread on that release
Read 17 tweets
9 Jun
A thread of all my MEV related threads in chronologic order 👇🏻
The first Uncle Bandit pulling off a multi-block heist and launching a new category of MEV strategies
Read 8 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(