Back to Articles

LABUBU: Toy Story Gone Wrong

On June 6, 2025, ALEX Lab Foundation's on-chain contracts were exploited via a flaw in the self-listing verification logic, resulting in $8.37M in stolen assets.

July 11, 2025
StacksExploit-AnalysisDeFiClarity
LABUBU: Toy Story Gone Wrong

Executive Summary

On June 6, 2025, ALEX Lab Foundation's on-chain contracts were exploited via a flaw in the self-listing verification logic.

An attacker managed to bypass the verification mechanism and add his malicious contract to the ALEX-approved token contracts. This allowed him to drain several asset pools, with a self-reported total loss of assets at that time of $8,373,227.13.

ALEX swiftly launched a compensation plan that allowed full token reimbursement using the ALEX Lab Foundation treasury.

The attack stood out for two factors:

1) The novel token verification bypass

Bypassing ALEX's self-listing verification logic required intimate knowledge of how the Stacks blockchain operates, beyond its smart contract language capabilities.

2) The stolen tokens off-ramping orchestration

Post-hack, they attempted to extract liquidity from the Stacks ecosystem via multiple protocols, from swapping stolen assets before they were burned, to adding stolen assets as liquidity to borrow against them, they fully utilized the entire ecosystem.

The initial stolen amounts were: 8432480.981911 STX, 50.73942482 aBTC, 12.76470894 sBTC, 119,419,656.0046488 ALEX and 1,748,326.97784601 sUSDT tokens.

However, in the end, the attacker only managed to extract 21.85 BTC to his Bitcoin address and $2,091,544 in stablecoins liquidity to his Ethereum holding address.

An extra 120 native ETH received by the attacker during the hack is most likely also linked to the hack, although the link was not definitely made.

Timeline

The following is a timeline of events that lead up to the ALEX hack and afterwards. Each step is further detailed within this article at a later time.

Events Leading to Hack

-95d 0h 24m 38s

ALEX changed their existing self-listing logic to use a contract named self-listing-helper-v3, which uses the clarity-stacks library to ensure permissionless source code verification. From this point on, the protocol was vulnerable to being hacked. The self-listing-helper-v3a version of the contract, which was the one that was exploited, was deployed on the same day as the previous version but a few hours later, and contained only minor code improvements.

-7m 47s

Attacker initiated an intentionally-failing contract deploy transaction which meets ALEX's self-service listing verification requirements. The failed-to-be deployed contract was named ssl-labubu-672d3.

-7m 29s

Attacker deployed a malicious contract with the same name as the failed deployment, ssl-labubu-672d3.

-7m 10s

Attacker deployed the missing labubu dependency, which caused the intentionally-failing contract deploy to revert.

-56s

Attacker gained an approved role via a privilege escalation attack on the ALEX's self-listing service contract, self-listing-helper-v3a, using the failed deployment data and the current malicious ssl-labubu-672d3 contract as input.

-34s

Malicious mode was activated for the ssl-labubu-672d3 contract.

⚠ The Hack

0 (THE HACK)

ALEX Protocol pool funds were stolen via a pool swap-x-for-y call on the amm-pool-v2-01 contract, which leveraged the approved malicious ssl-labubu-672d3 contract. The stolen amounts were: 8,403,867.567554 STX, 50.73942482 aBTC, 12.76470894 sBTC, 119,419,656.0046488 ALEX and 1,748,326.97784601 sUSDT tokens.

Post-Hack Events & Response

+1m 47s

Attacker started extracting liquidity from the Stacks ecosystem and withdrawing liquidity off-chain. Off-ramping funds was done through a mixture of sBTC withdrawals, bridging and (potential) CEX intermediary transfers.

+1h 12m 15s

Attacker reconfigures the exploit to only extract STX as opportunistic market participants added 28,613.414357 more STX to the still-vulnerable ALEX Pools.

+1h 13m 36s

Attacker redoes the exploit, resulting in a further 28,613.414357 STX amount being stolen.

+1h 56m 30s

The last hacker sBTC withdrawal reaches the attacker's Bitcoin address as BTC for a total amount of 21.85682803 BTC in stolen funds.

+2h 16m 43s

The last major stolen funds off-ramping (approximate $49.5K) was initiated by the attacker on Stacks.

+2h 34m 41s

The Brotocol bridge (formerly XLink and ALEX Bridge) governance burned the remaining hacker balances of 34.65082482 aBTC and 580,326.97784601 sUSDT tokens via an emergency governance proposal XIP 166.

+2h 38m 16s

ALEX Protocol burned the remaining the attacker's ALEX token balance of 100,719,101.4067526 tokens via an emergency ALEX Governance Proposal 517 (AGP).

+3h 26m 21s

ALEX Protocol disables the vulnerable ssl-labubu-672d3 contract via an emergency ALEX Governance Proposal 519 (AGP).

+5h 39m 14s

Last confirmed extracted liquidity reaches the attacker's Ethereum holding address as DAI for a total sum of 2,091,544.64940775 DAI in stolen funds.

+7h 15m 51s

ALEX protocol announces the exploit and the compensation plan.

+23h 27m 17s

Attacker appears to have transferred his last remaining STX (relative) dust amounts to a CEX.

+23h 53m 2s

Last native ETH liquidity reaches the attacker's holding Ethereum address, most likely from the same hack but via CEX transfers, although not confirmed.

ALEX Protocol Self-Listing Tokens Feature

In order to properly describe how ALEX Protocol’s self listing token feature works, we first need to give some context on how contracts are deployed on the Stacks blockchain.

Deploying Contracts on Stacks

The Stacks blockchain has its own particularities and trade-offs with regard to smart contract development. Of relevance to the current hack is that, in Stacks, deploying a contract is done in its own separate transaction, of type Contract deploy. This specific type of transaction cannot be initiated by any existing smart contract, it must be launched by a standard principal (a user with a private key). This is a very different behavior from Ethereum-compatible blockchains, where any smart contract can deploy another smart contract.

On EVM-compatible blockchains, a factory type smart contract simply deploys the type of contract that is needed, ensuring full compatibility with the desired behavior. On Stacks, this is inherently not possible. On EVM chains it is also possible to get the compiled code of each contract on-chain, allowing a type of introspection. Smart contract introspection is also currently supported in Clarity, the smart contract language of the Stacks blockchain.

While Clarity does offer traits, which are somewhat analogous to ERC165 in Ethereum, this mechanism only ensures that a Clarity smart contract has specific functions implemented, not what the content of the functions are.

This is relevant because it creates the following dilemma: on Stacks, how does one ensure, from within a smart contract, that another contract is of a specific type, meaning it has a specific source code?

For a long period of time, there was no clear answer to this.

clarity-stacks Library

While there were various attempts over the years at mimicking on-chain contract deployments, there was no definite method found. After the Stacks Nakamoto upgrade went live, the introduction of a new Clarity system function, get-stacks-block-info allowed for a different method of source code verification.

get-stacks-block-info gives information about a specific minted Stacks block, of which of relevance is the header-hash field. In the calculation of this header hash, for Contract deploy type transactions, the source code and name of a contract are also included. Thus, by providing these data points on-chain and recreating a specific stacks header, one can verify that a specific contract was included in a transaction in a specific block.

Marvin Janssen, a veteran and highly esteemed developer in the Stacks ecosystem, was the first to pioneer this solution and implemented it in his clarity-stacks public goods library. To quote from the repository:

this library allows you to check if a specific transaction has been mined in a Stacks block in Clarity. It is particularly useful to prove if a given contract has a specific code body. Since there is no Clarity function to fetch a transaction nor to read a contract code body, this is the next best thing.

The inability to deploy a contract from an existing contract is sometimes a limiting factor for protocols. Whilst this library does not provide such a feature, it does allow a protocol to accept a contract deployed by a third-party by verifying if the code body is as it expects.

The first version of the clarity-stacks library has been available since the 26th of January 2025 for anyone to freely use.

ALEX Self-Service Listing

On 16 July 2024, ALEX Lab Foundation announced their first version of a self-service token listing mechanism that allowed projects to self list their own tokens. It is unclear what mechanism was used at that time, but it is not relevant for the current analysis.

On the 3rd of March 2025, ALEX changed the self-listing logic to use a contract named self-listing-helper-v3 which uses the clarity-stacks library to ensure source code verification. The self-listing-helper-v3a version of the contract, which was the one that was exploited, was deployed on the same day but a few hours later, and contained minor code improvements.

How Self-Service Listing Worked

The self-service listing mechanism involved several steps:

  1. deploying a wrapper token over an already-existing token contract. The wrapped token contract, or anchor token, is wrapped to ensure compatibility with the ALEX protocol which only supports 8 decimal tokens. By using an intermediary wrapper with a fixed 8 decimal precision, this limitation could be bypassed.
  2. taking the deployed token along with the deployment transaction information and other parameters and passing them to the create2 function from the self-listing-helper-v3a contract. This creates a swapping pool for the underlying tokens. During the create2 call, liquidity is also provided by the caller.

All wrapped tokens must respect a specific template. The template is stored in the self-listing-helper-v3a contract, and the latest version was set via the ALEX Governance Proposal 460. It can be retrieved by calling the get-wrapped-token-contract-code function.

Template extract showing where WRAPPED_TOKENS would be added

Extract from the template where the <WRAPPED_TOKENS> would be added

Attack Overview

Now that we have an understanding on how ALEX self-service listing worked, we’ll go through the hack itself.

From a high-level overview, the attack worked in multiple steps. All steps were carried out by the same standard principal address SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M.

The attack can be separated into 6 high-level steps, which will be detailed moving forward:

  1. The attacker initiated an intentionally-failing contract deploy transaction that meets ALEX’s self-listing-helper-v3a contract verification requirements. The contract deployment failed due to a missing dependency.
  2. The attacker deployed a malicious contract with the same name as the failed deployment.
  3. The missing labubu dependency, which made the first deployment fail, was deployed.
  4. The attacker gained a trusted, approved role via a privilege escalation attack on ALEX’s self-listing service contract.
  5. Malicious mode was activated for the ssl-labubu-672d3 contract.
  6. ALEX pool funds were stolen via a pool swap x-for-y call.

The next image depicts the steps in a graphical manner:

ALEX Hack Attack Flow Diagram

Step 1: The attacker initiated an intentionally-failing contract deploy transaction which meets ALEX’s self-service listing verification requirements

Attacker initiated the deployment of a contract named ssl-labubu-672d3 which failed to deploy, but the transaction itself was minted on the blockchain:

- transaction nonce 2: 0x46b3a19665e27b611781f1c14868d0f72eeb468c7a353a87b05329c2a9b49ea9

Step 1 — deploy failed transaction (explorer screenshot)

As noted in the explorer message, the transaction was minted (included in a block), although it did not succeed. This detail is very important and will be referenced further.

To understand why the deploy failed, we retrieve information with the Hiro details-for-transactions API from the failed transaction:

Step — related diagram

As we can see, a virtual machine error (vm_error) was encountered that indicated the use of an unresolved contract :0:0:SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M.labubu— reported as use of unresolved contract 'SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M.labubu'.

We also see that the unresolved SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M.labubu contract was referenced in the source code of the failed-to-deploy ssl-labubu-672d3 contract.

As simple as it is, the deployment failed because the ALEX wrapper template allows users to wrap any anchor tokens, even non-existing ones, and when the attacker deployed the contract, they ensured that the referenced internal contract,SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M.labubu, was not on-chain.

This step was needed in order to have valid transaction data, which would pass ALEX’s self-listing-helper-v3a contract verification requirements and can be confirmed via the clarity-stacks library.

Step 2: Attacker deployed a malicious contract with the same name as the failed deployment

The next step for the attacker was to deploy a malicious contract with the same name as the one that failed to deploy in step 1,ssl-labubu-672d3.

- transaction nonce 3: 0xd3f5da0463b6a0216ffb2ebff17bd9ce7cc328710e785d6436d3db1f550b5554

Since the previous deployment transaction failed, the name was not registered on the Stacks blockchain, leaving room for the deployment of a new contract with the same name but with arbitrary source code.

The token exfiltration code is linked to the SIP-10:transfer function, but ssl-labubu-672d3 was deployed with all the malicious exfiltration logic deactivated.

Note: this was necessary because during the pool deployment (step 4, when the attacker gains elevated privileges), the ssl-labubu-672d3::transfer function is executed with the attacker as the caller. Having the exfiltration active during the verification bypass would have caused the exploit to fail, since transfers of zero balances would have been attempted.

Malicious Contract Analysis

A quick analysis of the malicious ssl-labubu-672d3 contract source shows that, at initial deployment, the contract behaves as a normal wrapper contract.

The malicious behavior is deactivated at deployment and depends on two data variables: enable-farming and amount-percent. Both can only be changed by the deployer via the functions set-enable-farming and set-amount-percent.

The role of each variable is as follows:

  • amount-percent — a percentage amount (default: 100% equivalent).
  • enable-farming — a flag-type variable (default: 0). Different flag values result in different tokens being stolen from the caller when transfer is invoked; the stolen amount depends on amount-percent.
enable-farmingtransfer behavior
u0normal SIP-10 behavior
u1steal caller's entire balance of STX tokens
u2steal caller's entire balance of aBTC tokens
u3steal caller's entire balance of sBTC tokens
u4steal caller's entire balance of ALEX tokens
u5steal caller's entire balance of sUSDT tokens
u9steal caller's entire balance of: STX, aBTC, sBTC, ALEX and sUSDT tokens

Step 3: Missing labubu dependency was deployed

- transaction nonce 4: 0x4005c1b14328370619cb9a43b4005415fad2e8c37317d5d1f520eaf35b9543a9

As the next step, the attacker deployed the missing SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M.labubu contract, which caused the initial deployment. This step is required in ALEX’s on-chain self-listing verification.

The source code of the labubu contract indicates that it is a version of the malicious ssl-labubu-672d3 contract codebase but stripped of any exfiltration capabilities.

Step 4: Attacker gained approved role via a privilege escalation attack on the ALEX’s self-listing service contract

- transaction nonce 5: 0xfb4822786771285238e082f46bee1203d9ccb9cedfd1b3e6e574a4908d53474f

The self-listing-helper-v3a contract allows the permissionless creation of pools with self-deployed tokens via the create2 function.

Users who wanted to permissionlessly deploy a pool for an existing Y would first need to wrap it using their specific wrapping template — say, token Y-Wrapped — and then provide these as inputs to the create2 function, alongside other information.

The Self-lister contract does a multitude of input verification when attempting to list a X-to-Y pool. Of relevance to the attack and how the hacker bypassed them, follows:

Verification on creating a X-to-Y poolAttacker bypass / input
Verifies that the X paired token is only one of the already approved tokens by the project (e.g. wSTX, ALEX, aBTC)The attacker passed the ALEX's wSTX token
Verify that the Y paired token is a wrapper contract that matches their specific source code template. The check is done via blockchain transaction deployment proofs using the clarity-stacks library.The attacker provided the failed transaction in Step 1, which passes the check since there is no validation if the transaction actually succeeded.
Ensures that the underlying wrapped token, or anchor token, from the wrapper Y contract exists. This check is implicitly done when validating the wrapper source code.The attacker ensured this would pass by deploying the labubu token contract in Step 3. The check is done when the get-wrapped-token-contract-code function is called from the verify-deploy function.
Sanity checks on the provided pool configurations and liquidity requirements.The attacker ensured he passed valid inputs and had the underlying ssl-labubu-672d3 tokens to provide the initial pool liquidity amount. Attacker made a pool with:
  • 2000 wSTX as liquidity for the X token
  • 100,000 labubu (ssl-labubu-672d3) tokens as liquidity for the Y token

The end result of passing the create2 call is that the current ssl-labubu-672d3 malicious contract, deployed in Stage 2, is treated as how a wrapped token would be, and integrated into the internal pool logic of ALEX’s swap pools.

As an observation, Step 2 and Step 3 could have been in reverse, as their order does not matter to the hack. The only hard requirements were that Step 1 be done first, and the first 3 steps be done before the 4th step, which is the privilege escalation.

Step 5: Malicious mode was activated for the ssl-labubu-672d3 contract

- transaction nonce 6: 0x5069e8aec07f766bba28b27fa6e8399019ba6f41e408640c4327933b29239703

The malicious exfiltration logic is only reachable during a SIP-10 ssl-labubu-672d3::transfer call. During the privilege escalation (Step 4), the transfer function was called on the ssl-labubu-672d3 contract to move the initial liquidity for the pool; as such, the attacker needed to have the malicious logic deactivated at that time.

After the successful verification bypass, the attacker calls the ssl-labubu-672d3::set-enable-farming function with a flag:9, which activates the malicious behavior on any further transfer calls.

Step 6: ALEX pool funds were stolen via a pool swap x-for-y call

- transaction nonce 7: 0xe8b2ac705dcbb35d487a4efd7a0fe384bbad1d1d97ea970410ad82a3cd0d9daf

At this point, all prerequirements for the hack were reached, and the attacker can now initiate the theft via a amm-pool-v2-01::swap-x-for-y call.

As intended, the ALEX pool contract behaved as if both the swap tokens were wrapped, approved, versions.

The attacker intentionally initiated a swap of X tokens (wSTX) to Y tokens (labubub (ssl-labubu-672d3)) so that the implementation logic needed to withdraw tokens from the ALEX pool vault. This allowed the malicious token direct access to all tokens present in the pool vault.

The following diagram shows the execution flow through the ALEX AMM pool up to the point where the malicious token exaction is executed.

Token extraction flow diagram

At the end of this 6th step, the attacker has stolen the following amounts:

8,403,867.567554 STX,
50.73942482 aBTC,
12.76470894 sBTC,
119,419,656.0046488 ALEX,
1,748,326.97784601 sUSDT

Hack aftermath, funds flow, and a second exfiltration

After hacking the ALEX pool, the attacker initiated a series of swaps and transfers in an attempt to off-ramp the stolen tokens. While a full off-chain token tracking is out of the scope of this article, we will showcase, to the best of our extent, how funds flow accrued after the hack, including a subsequent re-hack of the same pool with the same exploit from the same attacker.

Funds Flow

Initial stolen funds were held in the SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M and were:

8,403,867.567554 STX; 50.73942482 aBTC; 12.76470894 sBTC; 119,419,656.0046488 ALEX; 1,748,326.97784601 sUSDT‍

To note, out of the stolen funds, aBTC and sUSDT are tokens issued by the ALEX Bridge (formerly known). Over time the bridge was transitioned to XLink and now Brotocol. Since the Brotocol bridge and the ALEX Foundation share a tight connection, the attacker tried to act quickly to not be blocked by the team.

There were 3 Stacks addresses in total used in the hack:

There were also two EVM addresses and a Bitcoin address where the funds were transferred to:

Each address that was used in the hack had a different role, which we will briefly touch on:

SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M

SP174BBVTRQSE3YAMBKD5NKG03TMDQSY6ZMJT14J6

SP1SNT6GK28RWFHDZEQ4510MDC80XH2DANN553KZ4

  • This address received all the 119,419,656.00464880 ALEX tokens and 1,000,000 STX in order to extract liquidity from it
  • Swapped 500,000 STX for 69,576.690635 USDA on Arkadiko (nonce 3) and then swapped the resulting USDA for 67,213.993504 aeUSDC (nonce 5) which it then sent to SP1SNT6GK28RWFHDZEQ4510MDC80XH2DANN553KZ4 for bridging (nonce 8)
  • Attempted to supply the entire 119,419,656.00464880 ALEX amount into Zest so they could then borrow against it to extract liquidity from Zest while the hack itself was not yet priced-in (nonce 9).
    • The Zest team had reduced both borrowing cap and supplying cap for the ALEX token via emergency governance proposals to protect user funds.
    • The attacker did manage to supply 17,700,554.5978962 ALEX tokens (nonce 10 and 11), which is 14.8% of the stolen ALEX tokens.
    • With this collateral, the attacker borrowed 1.86533972 sBTC (nonce 13) and sent it to SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M for extraction.
  • The remaining 500,000 STX of the initially sent million was sent back to SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M to be extracted using a different method.
  • At this point, the leftover 100,719,101.4067526 ALEX tokens, which the hacker didn’t off-ramp yet, were burned by an emergency ALEX Governance Proposal 517 (AGP).

0xe8a2cb2bfc0a1a716c43ab9fd5862c59e0ad76fd

  • All stolen funds that were extracted through the bridges (Allbridge or Brotocol) were moved from intermediary chains (BSC, Avalanche, Arbitrum, Base) to Ethereum via Stargate.
  • There were several native ETH deposits that appear connected to the hack (not confirmed).
  • On Ethereum, all received stablecoins were converted into DAI tokens and then sent to 0x6b696b3bfbcce8871408b02c2c851d6437908b6b.
  • Besides Tornado.Cash, this address received native ETH from other sources, which may indicate which CEX-like service the attacker used on Stacks to bridge tokens. Examples include:

0x6b696b3bfbcce8871408b02c2c851d6437908b6b

  • This is the address where the attacker currently holds the EVM bridged stolen funds
  • At the moment of writing this article, the address had almost 120 ETH worth $286,381.64 and 2,091,544.64940775 DAI
Ethereum address holdings showing stolen funds

Note: it is unclear if all the native ETH deposits come from the ALEX hack, as the amounts are not fully consistent with unaccounted Stacks outflows.

1A6obMMuvGs7HvZn9pZ2y7bVzxcTtUpyDM

  • contains the withdrawn sBTC from the hack, a total of 22.84899662 BTC
  • 21.85682803 BTC from the address are accounted via sBTC withdrawals.
  • the account’s 3rd transfer which added 1 BTC, seems unrelated to the current hack
Bitcoin transactions showing sBTC withdrawals

Bitcoin address transactions showing sBTC withdrawals totaling 21.85682803 BTC

A Second Hack and Theft

After the initial attack, while the threat actor was moving funds, the still-vulnerable ALEX Pools were gaining liquidity, most likely due to MEV Bots arbitraging the sudden change in market prices.

The original attacker (SP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1M) observed the added liquidity and redid the initial exploit as follows:

  • the ssl-labubu-672d3 malicious contract was set to mode 1, which only exfiltrates STX (nonce 38)
  • the swap-x-to-y function was again called, to trigger the exploit (nonce 39) which resulted in the additional theft of 28,613.414357 STX

Note: this amount was already included in the amounts transferred breakdowns from the fund flow.

Resolving the Issue: Future Plans

After the hack, a warning was added to the clarity-stacks library, to ensure future integrators are aware of its limitation, and the Stacks development ecosystem started brainstorming a viable mechanism that would mitigate the attack vector.

The conclusion is that the attack vector can be completely blocked if there is a guaranteed way of retrieving the source code of a correctly-deployed smart contract on-chain. To that end, the solution presented by Marvin in clarity-lang:Issue 88 will most likely be the implemented one. Regardless of what solution will be adopted, the Stacks development team will make this attack vector unusable in Clarity 4.

Conclusion

The ALEX Self-Service Listing hack was a recent blow to the Stacks ecosystem that resulted in millions of dollars worth of funds being stolen.

The attack required deep knowledge of the Stacks ecosystem and the state of DeFi. The complexity of the attack can arguably make it one of, if it not the most complicated, hack on Stacks.

Besides the technical details themselves, the attacker then orchestrated a carefully thought-out off-ramping, which involved many key protocols of the ecosystem. Knowledge of those protocols and the execution of it all show that attackers are very carefully watching Stacks for any opportunity.

ALEX Foundation has shown tremendous resilience in the face of adversity, which we applaud, and we hope to see them recover and grow far beyond what they were pre-hack.

The ALEX self-listing functionality was audited only by one security firm (not Clarity Alliance), and they did not identify the vulnerability. As a smart contract security firm, a question that naturally comes up after a hack like this is, "Would Clarity Alliance have found the vulnerability?" The honest answer is that we don't know. In retrospect, all hacks are easy to identify once everything is laid out clearly. However, we can say with certainty that more scrutiny on any given codebase or protocol will always yield more insights and findings, gradually increasing security.

It is reassuring to see that the Stacks development community is already working on concrete solutions to ensure that this specific attack vector will be closed off entirely in Clarity 4 and beyond.

It has been said before, and we will say it again: security is a process, not a checklist, and we are here to make Stacks as secure as possible.

Indicator-Of-Compromise (IOCs)

NetworkAddressRole / Notes
StacksSP2VCNXGRZCBTP8E9MQ6DJPFVXRBPWBN63FE06A1MMain hack entry point
StacksSP174BBVTRQSE3YAMBKD5NKG03TMDQSY6ZMJT14J6Stolen funds off-ramping
StacksSP1SNT6GK28RWFHDZEQ4510MDC80XH2DANN553KZ4Stolen funds off-ramping
EVM0xe8a2cb2bfc0a1a716c43ab9fd5862c59e0ad76fdStolen funds aggregation
EVM0x6b696b3bfbcce8871408b02c2c851d6437908b6bStolen funds currently held
Bitcoin1A6obMMuvGs7HvZn9pZ2y7bVzxcTtUpyDMStolen funds currently held
StacksSP3ZBPG1F4ZCAZGEAZAA8MVGB605F095ACC376A0RPossible CEX address
StacksSP1EXWN15C7DCK7CMPWTR9JT6WJ49Y835DQ9BDSJGPossible CEX address
StacksSP2WCSP0YZ1BVRDP1TGXA5EHRRTJ27BW4SC3TXZPCPossible CEX address
StacksSP39JYAZR0ZGJ23VVVSM8ED11HF7E9N9SGDM7A62KPossible CEX address
StacksSPFQCE33T0P2C9DMHC6E098R436512J7RJBP1ZHDPossible CEX address
StacksSP17CMV5Q8GXTCFHNQCRA6Q1VH9KBQEK9P8654XJ1Possible CEX address
StacksSP2SGH71X3M379CMQKQ3WN5PSVDY7J7KTX6EWPWBEPossible CEX address

Relevant Transactions