just a meega. Iykyk 🤭🤭🤭🤭✌️🤫 https://xitter.cf/t.co/wXAKQrpXx9

Boston, MA
Joined November 2021
hi migos, I have exciting news. using the metadata and trait pngs from @linxinglu 's GitHub repo, I have been able to store the 20k @Nakamigos collection fully onchain. 🧵👇
32
34
10
144
7,855
Shark retweeted
gm gm here we go again. This morning somebody abused a bug in ApeStr to swap 21 apes for 21 ApeStr-owned apes. This was a known exploit (see the SQUIGSTR exploit from ~1 year ago) but incentive to run it was never there. The bug lies in buyTargetNFT: it forces a strategy contract to send arbitrary calldata to any target. Afterwards it checks only three things: its BAYC balance rose by exactly 1, it owns expectedId, and "cost" equals its ETH balance drop. This was patched in later NFTStrategy releases, but affects the original 6 (PunkSTR not affected). The attacker bought 2 BAYC to use as bait. Using a helper contract, they prep the strategy contract by selling an ape to it for 5 wei and immediately buying it back for 6 wei. That primes the contract's ethToTwap with 6 wei. They then call buyTargetNFT and pass the calldata to transfer an ape from ApeSTR to the helper using safeTransferFrom. This in turn hands execution over to the helper (remember, safeTransferFrom is NOT safe), which transfer TWO apes back to ApeSTR to satisfy the balance check (1 out, 2 in leaves ApeSTR at +1). It also calls processTokenTwap, which converts the 6 wei, setting the cost of one of the newly deposited apes to 7 wei (6 * 120%). The helper contract buys it back in the same tx. example flow: - Attacker has BAYC #1 and #2. ApeSTR has BAYC #3. - Attacker "sells" BAYC #1 to ApeSTR for 6 wei and sends BAYC #2 to it for free, but steals BAYC #3 in the process. - ApeSTR relists BAYC #1 for 7 wei, which the attacker buys. - Attacker now has BAYC #1 and BAYC #3, and ApeSTR has BAYC #2 (but doesn't even know it). The attacker ran this for all 21 BAYC in the ApeSTR contract, resulting in them being able to claim packs for all of those BAYC. Total net proceeds: $14k. This previously affected SQUIGSTR because of their shared contract - any art blocks NFT sent in would satisfy the balance check, allowing the attacker to drain the contract of squiggles in exchange for basically valueless art blocks NFTs. It was known to be possible on ApeSTR as well, so I guess it was just a matter of time before we saw it happen. The unfortunate consequence is that now, ApeSTR has 21 apes that it is completely unaware of, so they cannot be bought from the contract. And 210 attacker-owned mudwater packs were dumped into bids.
81
36
21
303
47,456
Shark retweeted
On October 27, someone bought my BAYC #9765 for 6.23 ETH and sold it about two hours later for 6.01 WETH, receiving 5.9499 WETH after marketplace fees. I had already claimed its Mudwater allocation, so I followed the transactions to understand what happened in between. The buyer used a vulnerability in ApeStrategy’s contract to cycle BAYC NFTs out of its pool, claim their Mudwater allocations, and exchange them for the next ape. 9765 served as a reusable asset in that process. Purchase: etherscan.io/tx/0x097ed13c0e… The buyer also purchased BAYC 5611 for 6.25 ETH and interacted with the pool through a self-deployed contract named Arb. The first successful exchange makes the mechanism clear. Before the transaction, the buyer held 9765 and 5611, while the pool held 1012. Afterward, the buyer held 9765 and 1012, and the pool held 5611. The buyer then redeemed 1012’s allocation of 10 Mudwater packs. Next, the already-claimed 1012 went back into the pool in exchange for 1380. After claiming that allocation, the buyer moved on to 1561, and continued. 9765 repeatedly moved in and out as the supporting asset. First exchange: etherscan.io/tx/0xba21a8e4d0… So where was the vulnerability? ApeStrategy’s buyTargetNFT function accepts a caller-supplied target and calldata, then executes the external call from the pool itself. Afterward, it checks that the pool’s BAYC balance increased by one and that the specified expectedId now belongs to the pool. Those conditions do not establish that the pool retained its existing NFTs. If one ape leaves and two enter during the external call, the net balance change is still +1. If one of the incoming apes is expectedId, both checks pass—even though an existing asset has been removed. The call’s authority matters too. Because the pool executes the external call, a call to the BAYC contract runs with the pool as the caller. The buyer’s Arb contract used the NFT receiver callback to coordinate the transfers. 9765 temporarily entered the pool to satisfy the checks and was subsequently recovered. There was also an accounting component. The pool calculates an NFT’s purchase cost from the decrease in its ETH balance across the external call, then uses that cost to set its resale price. During the callback, Arb invoked processTokenTwap, triggering a separate ETH expenditure inside that accounting window. That expenditure affected the apparent NFT purchase cost. The actual events recorded 9765 with a purchase cost of 6 wei and a resale price of 7 wei, after which it was recovered. The buy and sell functions had nonReentrant protection, but this path did not require recursively entering the same purchase function. The external call could move NFTs, while the callback could reach processTokenTwap and affect the balance used for accounting. Pool contract: etherscan.io/address/0x9EbF9… Buyer’s Arb contract: etherscan.io/address/0xa395b… Across the sequence, the buyer completed 21 successful Mudwater redemptions, burning 10 Totems each time: allocations corresponding to 210 packs across 21 different BAYCs. In the final exchange, 9573 returned to the pool and the buyer recovered the original 5611. The buyer then sold both 9765 and 5611. Final exchange: etherscan.io/tx/0x7088008b2f… Summing the BAYC transfers across these operations, the pool’s net change for every token ID was zero. The original apes were back, but their Mudwater entitlements had been consumed. This does not mean every other piece of contract state was restored. The two initial apes cost 12.48 ETH and returned 12.0384 WETH after marketplace fees—a trading loss of 0.4416 ETH, before gas and claim costs. I verified the Ethereum-side redemptions, not the packs’ eventual Solana-side delivery or sale proceeds, so I am not claiming a final profit figure. The evidence points to an exploit of ApeStrategy’s external-call and asset-accounting logic. It does not show repeated Mudwater claims for the same ape. @0xQuit, @Rhynotic this is a concrete NFT custody failure mode: someone can temporarily obtain an NFT, consume its one-time entitlement, and return the original NFT. The final inventory can contain exactly the same token IDs while the economic rights attached to them have changed. This poor BAYC #9765:
16
10
102
31,401
Shark retweeted
2
5
24
360
Shark retweeted
⠀⠀⠁⠀⠠⡀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣀⡀⣀⡠⠽⠖⠀⠀⢠⡀⠆⠀⠀⠀⠀⢀⠀⠀⠀ ⠛⠛⣿⣧⣄⠂⠀⠐⣸⣷⣄⣈⣤⣦⣿⣿⡇⠀⠀ ⠙⠛⠛⢿⣿⣿⣿⣿⣿⣽⡟⢻⡿⡤⠡⠀⠀⠀⠀ ⣄⠀⠀⠐⠛⠛⠿⣿⣿⣿⣧⣷⣋⡿⠛⠳⠦⣤⣤ ⠀⠀⠀⡀⠀⠀⠀⢀⣉⡱⠿⠟⠀⠀⠀⠀⠀⠈⠉ ⠀⠀⠀⠀⠀⠠⠀⠠⠘⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀
22
186
7
1,021
21,260
A 🍪 Per Day Keeps the Agents Away ‘Snow Dog Migo’
4
6
96
Shark retweeted
HI EVERYONE! over the next few weeks I will begin to slowly unveil one of my most ambitious projects to date, to release in mid November. .collaborators/events for this to come.
45
24
4
301
8,231
Shark retweeted
New Song 🎧 10/31 👀 “Insert Coin” 🕹️
2
6
12
358
Physical pixel art by @Ferboccard
2
8
1
41
620
What Chudwater did you get at @beeple 's last night @BoredApeYC
5
1
16
504
Updated mudwater cards needed to complete base set. I have cards to trade, and beeple chudwater prints. Thanks to the fellow apes that helped me with 8 cards to bring me down to 14 needed 🍌🫶
Missing these to make physical base set. Anyone have doubles of any? Hit me up. I have doubles of cards to trade 🫡🍌
22
5
60
1,545
Shark retweeted
i spent over five years creating Ambients. i’ve been releasing it piece by piece. but it was always one whole series, sequenced with intention. here’s where it is so far, all together four months in. tomorrow, the seventeenth piece
14
60
2
459
7,496
Since 2014, @Rhizome has awarded small grants to support the creation of new web-based works. This year, we’re partnering on a new category for the 2026 open call: PERMANENCE. Digital work can depend on a surprisingly fragile set of conditions, hence why @Rhizome has spent decades thinking about how digital art is best preserved. Maybe permanence is technical? Maybe permanence is material? Maybe permanence depends on a community continuing to care? Or maybe it is something else entirely? Apply by November 20th at microgrants.rhizome.org Make something built to endure.
⛳️Rhizome microgrants are open! Apply by November 20 for grants between $500- 1500! We invite proposals in the following categories: 🫆PERMANENCE, in partnership with @larvalabs,🛠️MISUSE, ✋HANDMADE & 💬CO-OP. Visit microgrants.rhizome.org for more details + to apply!
11
10
62
4,141