CrowdRingCircle Hack: $201K Drained from CRC/USDT Pool

An analysis of the CrowdRingCircle attack on BNB Chain: how a CRC vulnerability, the sync() function, and reserve manipulation allowed the attacker to drain 201,359 USDT from a PancakeSwap pool.
Get advice from AML Crypto experts
On July 16, 2026, CrowdRingCircle (CRC), a project on BNB Chain, was attacked, resulting in approximately $201.4K being drained from the CRC/USDT pool on PancakeSwap V2.

The attacker exploited a flaw in the CRC token’s own logic. Under certain transfer conditions, the contract allowed the CRC balance held directly by the trading pair to be reduced and then recorded the altered reserves through the sync() function. This artificially inflated the price of CRC within the pool, after which the attacker exchanged a relatively small amount of tokens for the USDT held in the pool. PancakeSwap itself was not compromised—the vulnerability was located in the CRC token contract.

The AML Crypto team reconstructed the movement of the stolen funds using the Bholder tool:

Incident Summary

  • Victim:
    CrowdRingCircle (CRC), CRC/USDT pool on PancakeSwap V2
  • Incident date:
    2026-07-16 09:44:27 UTC
  • Amount lost:
    201,359 USDT
What Happened
The attacker prepared the capital for the attack
The attacker used borrowed liquidity obtained within a single transaction. This mechanism allows a large amount of capital to be temporarily borrowed without collateral, used to execute several operations, and repaid before the transaction is completed.

A flash loan is not a vulnerability by itself. It simply provided the attacker with enough capital to exploit the flaw in the CRC contract multiple times.
The attacker began sending CRC to the trading pair
The target was the CRC/USDT pair on PancakeSwap V2.

Under normal circumstances, when a user sells CRC, they send CRC to the pool and receive USDT in return. The balances of both tokens change, and the price is automatically recalculated based on the ratio between the reserves.

However, the CRC contract contained non-standard logic that was triggered when tokens were transferred to the trading pair address.
The CRC contract deducted tokens from the pool’s own balance
When CRC was transferred to the pair, the contract did more than process a regular sale. It also reduced the amount of CRC held in the pool’s own balance.

In other words, the attacker could initiate an operation that caused tokens to be destroyed not only from the sender’s balance, but also directly from the CRC/USDT reserve.

This was the core vulnerability: an external user was able to affect assets belonging to the liquidity providers.
The sync() function recorded the manipulated reserves
After the CRC balance was reduced, the contract called the trading pair’s sync() function.

This function updates the pool’s internal reserve data to match the actual token balances. As a result, the reduced CRC balance was recorded as the new reserve.

The USDT reserve remained almost unchanged, while the CRC reserve became significantly smaller. Consequently, the pool’s pricing algorithm began to calculate a much higher value for each CRC token.

For example, if the pool contained 200,000 USDT and 40 million CRC, the price would be approximately $0.005 per CRC. If the CRC reserve were artificially reduced to 1 million tokens while the USDT reserve remained unchanged, the calculated price would increase to approximately $0.20.

The token’s real value did not increase. Only the internal reserve ratio within that specific pool was altered.
The manipulation was repeated several times
The attacker repeatedly triggered the vulnerable logic:
  • CRC was sent to the trading pair address;
  • the contract deducted part of the CRC from the pool’s balance;
  • the sync() function recorded the reduced reserve;
  • the calculated price of CRC increased further.
After several such cycles, the price of CRC within the pool became significantly inflated.
The attacker exchanged CRC at the artificially inflated price
Once the reserves had been sufficiently distorted, the attacker swapped CRC for USDT.

Because of the manipulation, the pool treated CRC as a highly valuable asset. As a result, a relatively small amount of CRC was sufficient to withdraw a significant portion of the USDT held in reserve.

In effect, the pool released real stablecoins at a price created through the artificial reduction of the CRC reserve.
The borrowed funds were repaid
All actions were performed within a single atomic transaction. After withdrawing the USDT, the attacker repaid the temporarily borrowed liquidity and covered the transaction fees.

The remaining difference became the attacker’s profit. According to public estimates, the losses amounted to approximately $201.4K.
Liquidity providers suffered the main losses
After the attack, almost no USDT remained in the pool, and its reserves were severely disrupted. The primary losses were borne by the CRC/USDT liquidity providers whose funds were held in the trading pair.
It is important to note that PancakeSwap itself was not compromised. Its contracts executed the transactions according to their standard logic. The incident was caused by a function in the CRC token contract that allowed the token balance held by the trading pair to be reduced and the resulting reserve change to be recorded through the sync() function.
Thus, the attack consisted of three key elements: the removal of CRC from the pool’s reserves, the recording of the manipulated balance, and the subsequent withdrawal of USDT at an artificially inflated CRC price.

Timeline of Events

2026-07-16 09:44:27 UTC
2026-07-16 09:44:27 UTC
all exploit-related actions occurred:
  • The attacker obtained borrowed liquidity and carried out the attack against the CRC/USDT pool within a single atomic transaction.
  • The attacker repeatedly transferred CRC to the trading pair address, triggering the token’s vulnerable logic, which reduced the CRC balance held directly by the pool.
  • The sync() function recorded the artificially reduced CRC reserve, causing its calculated price to rise sharply.
  • The attacker exchanged CRC at the artificially inflated price and withdrew 201,359 USDT from the pool.
  • The attacker repaid the borrowed funds, and the remaining difference became their profit. The CRC/USDT liquidity providers suffered the primary losses.
From 2026-07-16 09:50:54 to 2026-07-16 09:53:33 UTC
From 2026-07-16 09:50:54 to 2026-07-16 09:53:33 UTC
the attacker transferred the stolen funds to Ethereum through Relay Link.
From 2026-07-16 09:57:11 to 2026-07-16 09:54:59 UTC
From 2026-07-16 09:57:11 to 2026-07-16 09:54:59 UTC
the attacker deposited ETH into Tornado Cash on Ethereum.
2026-07-16 09:57:35 UTC
2026-07-16 09:57:35 UTC
the attacker transferred part of the funds back to the exploit address on BNB Smart Chain.
From 2026-07-16 09:58:26 to 2026-07-16 10:11:30 UTC
From 2026-07-16 09:58:26 to 2026-07-16 10:11:30 UTC
the attacker deposited BNB into Tornado Cash on BNB Smart Chain.

Analyst’s Conclusions

  • Connection to Tornado Cash
    The attacker carried out 22 transactions through Tornado Cash. A relatively strong correlation can be observed between the transactions in terms of their number, denominations, and the networks used—BNB Smart Chain and Ethereum.

    This creates an opportunity to conduct a more in-depth analysis of withdrawals from Tornado Cash and identify the most likely addresses that may have received the funds after mixing. Such analysis will require additional time: the longer the observation period, the greater the likelihood of reconstructing the subsequent flow of funds while accounting for the obfuscation methods used by the attacker.
  • Connection to FixedFloat
    A FixedFloat hot wallet funded one of the suspected attacker-controlled addresses:
     0x24078f47b683b55afbfcc90392d72edf484eddac 
    This represents one of the most significant leads in the investigation. It is recommended that an official request be submitted to FixedFloat to obtain any available identifying and technical information associated with the transaction and the relevant service user.
  • Connection to Relay Link
    The attacker transferred funds through the Relay Link bridge twice, in both directions, within a short period of time.

    This activity may also provide grounds for submitting an official request to Relay Link. The information obtained could help establish the user’s digital fingerprint and identify other related fund flows based on matching technical indicators.
Want to learn more and get expert advice? Leave your email and we will contact you promptly!
We also recommend