Report #0135 - Solana Wallets Drained: 657 Accounts Hit in a Single-Day Attack (October 9, 2025)

Abstract

On October 9, 2025, 657 Solana wallets were drained of their SOL holdings. All drained SOL was transferred to the wallet deQzbGSDA3U6bFmxAfWuJYhYBvN647fP1i8DEDoVNW3. The attack spanned 17 hours with a consistent per-wallet scenario (closeAccount to recover rent SOL, followed by transfer of all SOL to the attacker).

The direct wallet-to-wallet transfers without DeFi interactions are consistent with victim-wallet private-key compromise rather than a signature-phishing or approval-drainer attack. The operational recommendation is therefore that owners of affected wallets move remaining assets to fresh wallets before any further activity.

A follow-up investigation is published as Report #0135.1 - laundering path and ongoing SPL token seizures.

Material of investigation

Labelling table `address_solname` mapping Solana addresses to public names

Victim examples

Transaction detail for victim 1 Transaction detail for victim 2 Transaction detail for victim 3 Transaction detail for victim 4 Transaction detail for victim 5

Attack pattern

The per-wallet scenario is consistent across all observed drains:

  1. closeAccount is invoked to return any available rent SOL held in token accounts back to the victim’s main wallet.
  2. All SOL is then transferred to deQzbGSDA3U6bFmxAfWuJYhYBvN647fP1i8DEDoVNW3, leaving the victim wallet with less than $1 of SOL residue.
  3. 12 of the 657 wallets were drained twice - consistent with follow-up sweeps after fresh SOL arrived in the compromised wallet.
SELECT COUNT(*), from_address
FROM transaction_data
WHERE to_address = 'deQzbGSDA3U6bFmxAfWuJYhYBvN647fP1i8DEDoVNW3'
  AND root <> 'deQzbGSDA3U6bFmxAfWuJYhYBvN647fP1i8DEDoVNW3'
GROUP BY from_address
ORDER BY COUNT(*) DESC;

Wallets drained twice

Victim-size distribution

Top victims by amount of SOL drained

Common prior activity

The compromised-wallet set shares an unusual concentration of prior interaction with two Solana DeFi services:

SELECT COUNT(*), solname2, (100 * COUNT(*) / 655) AS percent
FROM (
    SELECT DISTINCT
        root,
        from_address,
        COALESCE((SELECT solname2 FROM address_solname WHERE address = to_address LIMIT 1), to_address) AS solname2,
        action,
        flow
    FROM transaction_data
) s
WHERE flow = 'out' AND root <> 'deQzbGSDA3U6bFmxAfWuJYhYBvN647fP1i8DEDoVNW3'
GROUP BY solname2, flow
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC;

Most frequently used destination addresses by compromised wallets

Detailed breakdown of top destination addresses

The concentration of prior pump.fun / Raydium activity is consistent with - but does not prove - a compromise vector originating in malicious code on one of those platforms or a related browser extension / frontend supply-chain compromise. The report records the correlation; the causal claim is an open hypothesis.

Findings

At the evidence thresholds in Editorial Standards § 1:

Operational recommendation

If your wallet appears on the compromised-wallet list - or if you have interacted with pump.fun or Raydium and observe any unexplained outflow - move all remaining assets to a freshly generated wallet on a device that has not previously held the suspect key. The private key of a compromised wallet must be treated as permanently burned.

Follow-up

Right of reply

If you are a party associated with any wallet in this report and believe a claim is inaccurate, please submit via Corrections. Any response received will be published at the end of this report.

This report is based on verifiable public blockchain data. It is not a criminal allegation against any natural person. See the Disclaimer.