NanoJS10/Defi-tuna-exploit-
GitHub: NanoJS10/Defi-tuna-exploit-
一份关于 DeFiTuna Solana 借贷池漏洞攻击的开源链上调查报告,完整重建了从根因分析到 Solana→Ethereum 跨链资金归集的取证过程。
Stars: 0 | Forks: 0
# DeFiTuna 漏洞利用调查
**案件编号: DTuna-06-NANOJS10
**链:** Solana → Ethereum(通过 Mayan Finance / Circle CCTP)
**损失:** ~570,000 USDC
**日期:** 2026年7月16日, 05:48:12 UTC
**作者:** Nanojs10
**状态:** 独立的开源追踪。调查结果完全取自公开的区块浏览器和公开 API。
## 1. 摘要
2026年7月16日,攻击者在单笔交易中从 DeFiTuna 在 Solana 上的 USDC 借贷金库中抽走了 570,000 USDC。指令 `Open_and_increase_tuna_spot_position_jupiter` 通过 Jupiter 将 569,601 USDC 路由至由攻击者控制的 FusionAMM TUNA/USDC 池中,并收到 **0.000494 TUNA (~$0.06)** 作为回报。
该兑换不是一笔常规交易。它是存入攻击者构建的池子,执行该操作的指令被程序视为一个合法的杠杆头寸。收益被平均分配到两个攻击者钱包中,通过 Mayan Finance 跨链桥接至 Ethereum 上的 ETH、USDC 和 DAI,并最终归集到一个通过 RAILGUN 隐私协议注资的单一钱包中。
Solana 上的源头、机制、两个攻击者钱包以及 Ethereum 上的归集钱包都是可以直接验证的。此外还出现了两条进一步的线索:一笔已确认的向该操作者集群的 Backpack Exchange 提现,以及表明该归集钱包汇集了超出本次单一事件收益的证据。
*(下文的根因机制与 CertiK 于2026年7月16日发布的独立事件分析相一致。本追踪印证了该分析,并扩展了资金流向和归属调查工作。)*
## 2. 本次调查的补充内容
除独立确认机制和攻击者地址外:
- **交易所 KYC 归属锚点:** 一笔已确认的(2026年2月4日)向操作者地址集群提现的 Backpack Exchange 记录,这是本案中唯一的现实世界身份线索
- **记录在案的 Mayan solver 误导性线索:** 三个在追踪期间看似攻击者端点的基础设施地址,已被排除并记录在案,以防被错误归因
- **完整的跨链重建:** 两条独立的 Mayan `destAddress` 记录证明两个攻击者钱包都指向同一个归集钱包,加上 RAILGUN 的注资和 CoW Protocol 分发
- **多重受害者信号:** 归集钱包的流出量超过了 DeFiTuna 的损失,且 RAILGUN 的流入量与任何 DeFiTuna 的资金分支都不匹配
## 3. 漏洞利用交易
| 字段 | 值 |
|---|---|
| 签名 | `124ibr7NU7AtJdeZ1WJjJy5YathNiBtCnV554uwJtkc7qEXeF64dmCziv4QoiEEMRG6EmCRx8ec2LkARpWH3kvEG` |
| 区块 | 433214256 |
| 时间戳 | 2026-07-16 05:48:12 UTC |
| 签名者 (攻击者) | `7hiHL8AgDuLNVDQLfN3GHdLAEeCN1F7uz6nSANRvFJst` |
| 指令 | `Open_and_increase_tuna_spot_position_jupiter` |
| 程序 | `tuna4uSQZncNeeiAMKbstuxA9CUkHH6HmC64wgmnogD` |
### 余额变化
| 账户 | 所有者 | 变化 |
|---|---|---|
| `4iTbtBmr4fXpkUD4kTW9pujvXbCT3AkWya6h3dbNP7a6` | `D76dDcSU5HnAGqVEZCDLyGgLpTp4xZuqeZyVDtUdDv55` (USDC 金库) | **−570,000 USDC** (574,665.897079 → 4,665.897079) |
| `5YQS7eNFe8foSinWKUkUz9zCyxur1SNXghfPefTBsKWA` | DefiTuna: 金库 | +399 USDC (手续费) |
| FusionAMM (TUNA-USDC) 池 2 | FusionAMM 市场 | +569,601 USDC |
| FusionAMM (TUNA-USDC) 池 1 | FusionAMM 市场 | −0.000494 TUNA |
| `BphcgCcg3H9QBik8dkSpvvx886paqbtBVJLBvTH2PcvM` | `9ytGWP8tCRF1keREJ5VHqBpSuM9MZYwm3oFQQa1SvESb` (头寸) | +0.000494 TUNA |
## 4. 根因:偿付能力检查中的向下取整为零
该缺陷存在于 DeFiTuna 的 `TunaPosition.is_healthy()` 偿付能力检查中,具体位于 `compute_total_and_debt()` (tuna_position.rs)。
1. 攻击者创建了一个几乎为空的 TUNA/USDC Fusion 池,并将其初始价格设定为接近真实的 oracle 价格,从而通过了 DeFiTuna 的兑换前价格偏差检查。
2. 他们在异常高的 tick (208,640) 处放置了两个攻击者所有的限价单头寸,增加了 0.000526 + 0.000526 = 0.001052 TUNA。这些头寸由 `7hiHL8AgDuLNVDQLfN3GHdLAEeCN1F7uz6nSANRvFJst` 和 `BK9aTnKfPNnnj45Me5ACrky2vexzUrZHRzr4BjmQpH3c` 所有,并被定位用于接收即将到来的 USDC。
3. 攻击者以零抵押品开立了 DeFiTuna 现货头寸,并将借来的 569,601 USDC(所有借入的 USDC 减去手续费)通过内嵌的 Jupiter 路由器路由到这个流动性极薄的池子中。在 tick 为 208,640、0.1% 手续费的情况下,输出为 `569601 / (1.0001)^208640 × (1 − 0.001) = 0.000494845`,向下取整后为 0.000494 TUNA。
4. 随后 DeFiTuna 以兑换前/oracle 的价格 0.0018375338 对该头寸进行估值。`494 × 0.0018375338 = 0.9077417`,这是一个小于 1 的正值。`to_num()` 通过 **舍弃小数部分,将其向下取整为零**,从而将其转换为整数。
5. 由于总资产被评估为零,该头寸被视作空仓,被赋予了默认的 1.0x 杠杆,并判定为健康状态。偿付能力检查由此被绕过。
6. 此时,从经济角度来看,USDC 已属于两个攻击者的限价单头寸。每个攻击者都调用了 `DecreaseLimitOrder`,各自提取了 **284,280.483231 USDC**。
该漏洞在于将小于 1 的头寸价值向下舍入为零,健康检查将其误读为一个空(即安全)头寸。这不是兑换漏洞或 oracle 漏洞。
## 5. Solana 上的 50/50 分配
FusionAMM 池 (`917DKTphW3rhBG5gsJpwKsNGisNV2dx74uUFd8HBEjtg`) 的转账记录(共五次转账)核实了全部金额:
| 方向 | 交易对手 | 金额 (USDC) |
|---|---|---|
| 流入 | `9ytGWP8tCRF1keREJ5VHqBpSuM9MZYwm3oFQQa1SvESb` | +569,601 |
| 流出 | `7hiHL8AgDuLNVDQLfN3GHdLAEeCN1F7uz6nSANRvFJst` (钱包 1) | −284,280.483231 |
| 流出 | `BK9aTnKfPNnnj45Me5ACrky2vexzUrZHRzr4BjmQpH3c` (钱包 2) | −284,280.483231 |
| 流出 | DefiTuna 金库 | −68.35212 (手续费) |
**这两个钱包属于同一操作者:**
- 钱包 2 在漏洞利用发生前五分钟向钱包 1 转入了 1 SOL 作为资金
- 钱包 2 支付了用于创建此次攻击中使用的 FusionAMM 池的租金
- 两者收到了相同的金额
- 两者都通过 Mayan 路由到了同一个 Ethereum 归集钱包

## 6. 通过 Mayan Finance 进行跨链转移
每一批资金都是由两个攻击者钱包之一签署的 Mayan 兑换订单。从 Mayan Explorer API 获取到了两个订单;**两者都指向了同一个 Ethereum 目的地**。
**订单 A** (钱包 1): 100,079.92 USDC → 51.928452 ETH → `0xb2cd3e99e45f8ab15fee77a014a3d82f9fe05f3e`
**订单 B** (钱包 2): 141,855.96 USDC → 141,701.17 DAI → `0xb2cd3e99e45f8ab15fee77a014a3d82f9fe05f3e`
两个独立的订单,两个不同的攻击者钱包,同一个目的地。这是直接证据而非推断,证明该归集钱包由攻击者控制,且两个 Solana 钱包属于同一操作者。

### Mayan solver 地址:非攻击者(误导性线索)
这些地址在追踪过程中看似端点,但实际上是 Mayan solver/结算基础设施。顺着 USDC 追踪通常会在这些地址处陷入死胡同。记录在此以免被错误归因。
| 地址 | 链 | 角色 |
|---|---|---|
| `0x754DcfB2861547015B221e963b4133A71dBdC024` | Monad | Mayan solver |
| `3oUEaNt7uL7pjZ6gdiAiEVRp9ZCcGRec7B5aSvXcjbWS` | Solana | Mayan solver |
| `0xc1062b7c5dc8e4b1df9f200fe360cdc0ed6e7741` | Monad | Mayan MCTP 结算 |
## 7. 归集钱包
**`0xb2cd3e99e45f8ab15fee77a014a3d82f9fe05f3e`**
为此次操作全新创建,通过 **RAILGUN: Relay Adapt** 注资,接收了来自两个钱包的每一批资金。随后通过 CoW Protocol 进行兑换并分发至下游地址。

### 后续分发
| 金额 | 目的地 |
|---|---|
| 140 ETH | `0x6a2e244af2c17CFc64e8ca0EA4335318EdF20B0B` |
| 280 ETH | `0x0a2e6ad5808ceeee4f72252068a9df707f660b0b` ⚠️ |
| 280 ETH | `0x0a2eb759ae500811e01ad7bb2e30a492cd840b0b` ⚠️ |
| 291,696.60 DAI | `0x509b6d094a6c26d716aac131e9adee5b16b80d3e` |
| 875,089.79 DAI | `0x509b650e0cc17bbd21553f96faff7003553b0d3e` ⚠️ |
⚠️ = 在 MetaSleuth 中被标记为风险地址。Co Protocol 和 Mayan 转发器节点属于 DEX/桥接基础设施,并非攻击者钱包。

## 8. 多重受害者信号
来自 DeFiTuna 的全部 570,000 USDC 均已说明去向:在两个攻击者钱包之间按 50/50 比例分配,两者均通过 Mayan 路由至归集钱包。
然而,来自 `0xb2cd3e99e45f8ab15fee77a014a3d82f9fe05f3e` 的流出资金(总计约 $1.5M+ 的 ETH 和 DAI)**大幅超过**了约 $580,000 的 DeFiTuna 损失,并且该钱包收到了与任何 DeFiTuna 资金分支都不匹配的 RAILGUN 流入资金 (183,907 USDC)。这表明该钱包汇集了不止一次事件的收益:这很可能是一个连环作案者,并且可能存在其他受害者。要将具体哪些下游资金隔离出来认定为属于 DeFiTuna,需要使用超出人工区块浏览器工作范畴的污点分析工具。
## 9. 归属锚点:Backpack Exchange (KYC)
2026年2月4日,一个 Backpack Exchange 地址(`43DbAvKxhXh1oSxkJSqGosNw3HpBnmsWiak6tB5wpecN`,Solscan 标记)向 `D8cJRpXaCWVK8c3doDq7Ymoz2XE4WyhFhbgNytWwqptA` 发送了 1.08191 SOL,该地址在此操作的整个 Mayan 活动中反复出现。
交易:`3zDmkcrkK3nFuj128T8dQp6boCwYPFMZd1E2LNgMeYyJY1CCtumD61J1hHs9ChmejE5DSJ6Yx3JKFqU38rzQ8zAJ`
Backpack 持有该次提现背后的 KYC 身份信息。这是整个追踪过程中唯一能引出现实世界身份的节点,但这需要仅对 Backpack 或执法部门开放的交易所记录才能进一步调查。
## 10. 资金流向
```
EXPLOIT (Solana)
tx 124ibr7NU7AtJdeZ1WJjJy5YathNiBtCnV554uwJtkc7qEXeF64dmCziv4QoiEEMRG6EmCRx8ec2LkARpWH3kvEG
| 570,000 USDC out of DeFiTuna vault, into FusionAMM pool
v
FusionAMM pool
917DKTphW3rhBG5gsJpwKsNGisNV2dx74uUFd8HBEjtg
| split 50/50
|
+-- 7hiHL8AgDuLNVDQLfN3GHdLAEeCN1F7uz6nSANRvFJst (wallet 1) 284,280.48 USDC
| | Mayan, into ETH / USDC
| v
+-- BK9aTnKfPNnnj45Me5ACrky2vexzUrZHRzr4BjmQpH3c (wallet 2) 284,280.48 USDC
| Mayan, into DAI
v
both destAddress = 0xb2cd3e99e45f8ab15fee77a014a3d82f9fe05f3e (consolidation wallet)
| RAILGUN funded; swaps via CoW Protocol
v
downstream:
0x6a2e244af2c17CFc64e8ca0EA4335318EdF20B0B 140 ETH
0x0a2e6ad5808ceeee4f72252068a9df707f660b0b 280 ETH (risk-flagged)
0x0a2eb759ae500811e01ad7bb2e30a492cd840b0b 280 ETH (risk-flagged)
0x509b6d094a6c26d716aac131e9adee5b16b80d3e 291,696 DAI
0x509b650e0cc17bbd21553f96faff7003553b0d3e 875,089 DAI (risk-flagged)
|
v
[further tracing requires taint analysis; RAILGUN privacy layer present]
```
## 11. 攻陷指标 (IoC)
### 攻击者
| 角色 | 地址 | 链 |
|---|---|---|
| 攻击者钱包 1 (签名者) | `7hiHL8AgDuLNVDQLfN3GHdLAEeCN1F7uz6nSANRvFJst` | Solana |
| 攻击者钱包 2 (共同操作者) | `BK9aTnKfPNnnj45Me5ACrky2vexzUrZHRzr4BjmQpH3c` | Solana |
| 头寸账户 | `9ytGWP8tCRF1keREJ5VHqBpSuM9MZYwm3oFQQa1SvESb` | Solana |
| 中间拆分者 | `8P3H7Hy98LWhw5QhuXdoigVdAzPCYRTYjdtQQKhGwvqD` | Solana |
| 中间拆分者 | `GrXBhM6Ty6YxubFp8zubtJF12WXmKj1dhMyakRPeaDpo` | Solana |
| 资金分支账户 | `4ZKkGZuoXqgSHbmsJXUib3dgn5WNhzbPEXrxuMYJ5oQ3` | Solana |
| 资金分支账户 | `F4xUroPaHro4gb2JAqa3e93E7DdZytRQJ4L2cHT5E53p` | Solana |
| 资金分支账户 | `ETGhosPrFApbiiKXDpxrhBz7J2MdTA3dxnL2Nkio9vEX` | Solana |
| 归集钱包 | `0xb2cd3e99e45f8ab15fee77a014a3d82f9fe05f3e` | Ethereum |
### 归属
| 项目 | 地址 | 链 |
|---|---|---|
| Backpack Exchange (注资者) | `43DbAvKxhXh1oSxkJSqGosNw3HpBnmsWiak6tB5wpecN` | Solana |
| 操作者集群 (接收者) | `D8cJRpXaCWVK8c3doDq7Ymoz2XE4WyhFhbgNytWwqptA` | Solana |
### 受害者 / 基础设施
| 项目 | 地址 | 链 |
|---|---|---|
| DefiTuna 程序 | `tuna4uSQZncNeeiAMKbstuxA9CUkHH6HmC64wgmnogD` | Solana |
| 受损的 USDC 金库 | `D76dDcSU5HnAGqVEZCDLyGgLpTp4xZuqeZyVDtUdDv55` | Solana |
| FusionAMM 池 | `917DKTphW3rhBG5gsJpwKsNGisNV2dx74uUFd8HBEjtg` | Solana |
### 下游
| 金额 | 地址 | 状态 |
|---|---|---|
| 140 ETH | `0x6a2e244af2c17CFc64e8ca0EA4335318EdF20B0B` | 未分类 |
| 280 ETH | `0x0a2e6ad5808ceeee4f72252068a9df707f660b0b` | 风险标记 |
| 280 ETH | `0x0a2eb759ae500811e01ad7bb2e30a492cd840b0b` | 风险标记 |
| 291,696 DAI | `0x509b6d094a6c26d716aac131e9adee5b16b80d3e` | 未分类 |
| 875,089 DAI | `0x509b650e0cc17bbd21553f96faff7003553b0d3e` | 风险标记 |
### 非攻击者:Mayan 基础设施
| 地址 | 链 | 角色 |
|---|---|---|
| `0x754DcfB2861547015B221e963b4133A71dBdC024` | Monad | Mayan solver |
| `3oUEaNt7uL7pjZ6gdiAiEVRp9ZCcGRec7B5aSvXcjbWS` | Solana | Mayan solver |
| `0xc1062b7c5dc8e4b1df9f200fe360cdc0ed6e7741` | Monad | Mayan MCTP 结算 |
## 12. 方法
所有调查结果均来自公开来源。不涉及任何隐私数据,未获取系统访问权限,未与任何描述的地址发生交互。
| 来源 | 用途 |
|---|---|
| Solscan | Solana 交易、余额变化、账户历史 |
| Etherscan | Ethereum 归集钱包和下游追踪 |
| MonadScan | Monad 端 CCTP 结算 |
| Circle Iris API | CCTP 销毁证明和消息解码 |
| Mayan Explorer API | 跨链订单记录 (`destAddress`, `toToken`, `trader`) |
| MetaSleuth | 资金流向可视化和风险标记 |
## 13. 归属说明
**已证实:** 漏洞利用交易和机制、两个攻击者钱包及其关联、570,000 USDC 的完整核对,以及归集钱包(由两条独立的 Mayan 订单记录确认)。
**经评估认为:** 归集钱包汇集了多次事件的收益,此判断基于流出量超过 DeFiTuna 的损失以及无法解释的 RAILGUN 流入。
**尚未确立:** 任何现实世界的身份。Backpack 的提现是一个归属锚点,并非身份确认。
根因机制与 CertiK 的独立事件分析(2026年7月16日)相一致;本追踪是独立进行的并印证了该分析,同时补充了上述的资金流向、归属和误导性线索的调查工作。
## 作者
**Soji Waliu (NanoJS)**,独立区块链取证研究员
- GitHub: [github.com/NanoJS10](https://github.com/NanoJS10)
- Email: NanoJS@proton.me
- X: [@Nanojs10](https://x.com/Nanojs10)
### 相关调查
| 案件 | 协议 | 链 | 损失 |
|---|---|---|---|
| [NanoJS01](https://github.com/NanoJS10/merlin-dex-forensic-investigation) | MerlinDEX | zkSync Era | $1.82M |
| [NanoJS02](https://github.com/NanoJS10/Zunami-protocol-Investigation) | Zunami Protocol | Ethereum | $2.1M |
| [NanoJS03](https://github.com/NanoJS10/Unizen-Protocol-Exploit) | Unizen Protocol | Ethereum | $2.1M |
| [NanoJS-FixerSell01](https://github.com/NanoJS10/NanoJS-FixerSell01) | FIXER COIN | Ethereum | 已阻止 |
| NanoJS04 | DeFiTuna | Solana | $570K |
*发布仅用于研究和防御目的。列出的地址均为链上标识符,并非针对任何所指名个人的指控。*
标签:DeFi, 区块链安全, 威胁情报, 子域名变形, 开发者工具, 漏洞分析, 资金流向分析, 路径探测, 链上追踪