Securityadvancedarticle20 min read

Visor Finance Hack: $8.2M Reentrancy in NFT Vaults | VCC

TL;DR: Ngày 21 tháng 12 năm 2021, Visor Finance mất 8,8 triệu token VISR (~$8,2 triệu) khi một kẻ tấn công khai thác một lỗi kiểm soát truy cập dễ bị tổn thương trong hợp đồng phần thưởng staking vVISR. Dù CSV gán nhãn đây là "reentrancy in NFT vaults," nguyên nhân gốc rễ thực tế là một bypass a

Vietcardano teamTeam

Đội ngũ biên tập VietCardanoCommunity — các chuyên gia blockchain và Cardano, cung cấp nội dung giáo dục và nghiên cứu chuyên sâu cho cộng đồng.

Published 14 tháng 9, 2026

TL;DR: Ngày 21 tháng 12 năm 2021, Visor Finance mất 8,8 triệu token VISR (~$8,2 triệu) khi một kẻ tấn công khai thác một lỗi kiểm soát truy cập dễ bị tổn thương trong hợp đồng phần thưởng staking vVISR. Dù CSV gán nhãn đây là "reentrancy in NFT vaults," nguyên nhân gốc rễ thực tế là một bypass authorization trong hàm deposit() — không phải bug reentrancy. Kẻ tấn công mint không giới hạn share bằng cách truyền một hợp đồng độc hại thỏa mãn kiểm tra require(Owner() == msg.sender) bị lỗi. Đây là sự cố bảo mật thứ ba của Visor trong sáu tháng, sau vụ mất $500k vào tháng 6/2021 và sự kiện "economic arbitrage" tháng 11/2021 mà đội ngũ từ chối gọi là hack.


The Protocol: Active Liquidity Management on Uniswap v3

Trước khi đi sâu vào exploit, chúng ta cần hiểu Visor Finance thực sự xây dựng gì.

Visor Finance (nay đã hợp nhất với Gamma Strategies) phát triển hypervisors — các hợp đồng thông minh tự động quản lý các vị trí thanh khoản tập trung trên Uniswap v3. Khác với token LP đơn giản của Uniswap v2, các vị trí v3 là ERC721 NFTs đại diện cho thanh khoản tập trung trong các phạm vi giá cụ thể. Quản lý các vị trí này đòi hỏi rebalancing liên tục khi giá di chuyển.

Hypervisors của Visor tự động hóa việc này:

  • Non-custodial: Chỉ người deposit mới có thể rút quỹ
  • Fractional: Hypervisors mint token ERC20 đại diện cho quyền sở hữu vị trí NFT
  • Composable: Các share có thể dùng trong liquidity mining, staking, và các protocol DeFi khác

Đến tháng 12/2021, Visor quản lý $20M+ TVL trên 40+ cặp Uniswap v3 trên Ethereum mainnet và L2s.

Cuộc tấn công không chạm đến hypervisors. Nó nhắm vào một hợp đồng riêng biệt: hợp đồng phần thưởng staking vVISR.


The Vulnerable Contract: vVISR Staking Rewards

Visor triển khai cơ chế staking nơi người dùng deposit token VISR để kiếm phần thưởng. Hợp đồng tại 0xc9f27a50f82571c1c8423a42970613b8dbda14ef xử lý deposit và mint vVISR (vote-escrowed VISR) shares đại diện cho vị trí staked.

Đây là nơi lỗi nghiêm trọng nằm — trong hàm deposit():

`solidity // Simplified vulnerable logic function deposit(address from, address to, uint256 amount) external { // FLAWED AUTHORIZATION CHECK require(IOwner(from).Owner() == msg.sender, "Not owner");

// If check passes, mint shares to 'to' based on 'from' contract's balance uint256 shares = calculateShares(from, amount); vvisr.mint(to, shares); } `

Vấn đề: Kiểm tra IOwner(from).Owner() == msg.sender chỉ xác minh rằng caller là "owner" của hợp đồng from. Nó không xác minh:

  1. from là người deposit thực sự (EOA hoặc hợp đồng tin cậy)
  2. from có bất kỳ balance VISR nào để deposit
  3. Caller không phải hợp đồng độc hại giả vờ là depositor hợp pháp

The Attack: Step by Step

Phase 1: Preparation (Minutes Before)

Kẻ tấn công (0x8efab89b497b887cdaa2fb08ff71e4b3827774b2) nhận tài trợ từ Tornado Cash — opsec chuẩn cho exploit chuyên nghiệp.

Attack Preparation & Contract Deployment

Phase 2: Deploy Malicious Contract

Kẻ tấn công triển khai hợp đồng tại 0x10c509aa9ab291c76c45414e7cdbd375e1d5ace8 với hàm Owner() đơn giản:

`solidity contract Exploit { address public owner;

constructor() { owner = msg.sender; }

// This is the entire exploit surface function Owner() external view returns (address) { return msg.sender; // Returns whoever calls it! } } `

Sau đó họ chuyển quyền sở hữu hợp đồng này cho chính mình (tx: 0x27f2210536553392cf180c0b37055b3dc92094a5d585d7d2a51f790c9145e47c).

Phase 3: Execute the Exploit

Trong một giao dịch duy nhất (0x69272d8c84d67d1da2f6425b339192fa472898dce936f24818fda415c1c1ff3f), kẻ tấn công gọi:

` deposit( from: 0x10c509aa9ab291c76c45414e7cdbd375e1d5ace8, // Their malicious contract to: 0x8efab89b497b887cdaa2fb08ff71e4b3827774b2, // Their own wallet amount: [any value - irrelevant since no balance check] ) `

Hợp đồng dễ bị tổn thương thực thi:

  1. IOwner(attackerContract).Owner() → gọi Owner() trên hợp đồng của kẻ tấn công
  2. Owner() của kẻ tấn công trả về msg.sender (EOA của kẻ tấn công)
  3. require(msg.sender == msg.sender) → PASS
  4. vvisr.mint(attackerWallet, calculatedShares) → Mint 195,000 vVISR shares
Exploit Execution Flow

Phase 4: Convert and Launder

Kẻ tấn công ngay lập tức burn 195k vVISR lấy 8.8M VISR (tx: 0x6eabef1bf310a1361041d97897c192581cd9870f6a39040cd24d7de2335b4546).

Sau đó đến phần khó: thanh khoản. Kẻ tấn công dump VISR trên pool Uniswap v2 VISR-ETH, chịu -87% price impact khủng khiếp. Họ chỉ rút được ~113 ETH (~$450k) — một phần nhỏ của $8.2M giá trị danh nghĩa.

Số tiền thu được được rửa qua Tornado Cash qua 7 giao dịch, bắt đầu từ 0x0e16210218ecc487a35b9ff48fe3d9f3e9b0f50330f9e7805e38135732b85270.

Fund Flow & Price Impact

Why This Was NOT Reentrancy

Tiêu đề CSV nói "Reentrancy in NFT Vaults." Hãy chính xác:

CharacteristicReentrancyThis Exploit
External call before state update✓ Required✗ No external call
Recursive function entry✓ Required✗ Single execution
State mutation after external call✓ Required✗ State minted directly
Root causeMissing reentrancy guardMissing authorization validation

Đây là một access control bypass, thuần túy. Kiểm tra require() sai về mặt ngữ nghĩa — nó authenticate mối quan hệ của caller với một hợp đồng thay vì quyền deposit tài sản của caller.

Tham chiếu "NFT vault" có thể xuất phát từ hypervisors của Visor quản lý vị trí Uniswap v3 ERC721. Nhưng hypervisors không bị exploit. Đội ngũ xác nhận rõ ràng: "No positions or hypervisors are at risk."


The Pattern: Three Strikes in Six Months

Đây không phải lần đầu Visor gặp sự cố.

Strike 1: June 2021 — $500k Beta Incident

  • Loss: $500k trong $3M TVL
  • Team response: Công bố báo cáo sự cố, gọi là "security breach"
  • Lesson not learned: Validation logic vẫn cho phép

Strike 2: November 2021 — "Economic Arbitrage"

  • Incident: Người dùng thao túng giá share qua reliance vào spot price
  • Team response: Bảo vệ gọi là "economic arbitrage" — không phải hack
  • Mudit Gupta (@Mudit__Gupta) nhận định đúng: "reliance on spot prices for issuing shares" là smart contract bug
  • BlockSec sau đó châm biếm: "Since last time an attack was called arbitrage, can we call it an airdrop this time?"

Strike 3: December 2021 — $8.2M vVISR Exploit

  • Cùng họ nguyên nhân gốc: insufficient input validation
  • Cuối cùng kích hoạt token migration và audit lớn
Three Incidents Timeline

The Response: Migration Over Recovery

Visor không thể recover số tiền bị đánh cắp — chúng đã ở trong Tornado Cash. Thay vào đó, họ đề xuất token migration dựa trên snapshot pre-exploit:

  1. Snapshot balance VISR trước block exploit
  2. Triển khai hợp đồng token VISR mới
  3. Airdrop token mới cho holder tại snapshot
  4. Deprecate VISR cũ

Đây là giải pháp social consensus, không phải technical fix. Nó làm hoàn toàn victim chỉ khi token mới giữ giá trị — đòi hỏi niềm tin cộng đồng.

Đồng thời, Visor thuê Quantstamp và ConsenSys Diligence audit hợp đồng staking mới — những audit họ nên thuê trước khi launch.


Lessons for DeFi Builders

Defense Checklist

1. Authorization ≠ Authentication

Kiểm tra Owner() == msg.sender authenticate mối quan hệ caller với hợp đồng. Nó không authorize hành động. Luôn validate:

  • Tài sản thực sự thuộc về depositor
  • Depositor là ai họ claim (EOA vs contract)
  • Operation tuân theo intended flow

2. Contracts Can Lie

Hàm Owner() của hợp đồng có thể trả về bất cứ thứ gì. Đừng bao giờ tin trạng thái self-reported của hợp đồng để authorize. Dùng msg.sender trực tiếp hoặc verified registry lookups.

3. "Arbitrage" Is Not a Security Classification

Khi người dùng trích xuất giá trị qua logic lỗi của hợp đồng, đó là vulnerability — bất kể có fit trading strategy definition hay không. Downplaying incidents trì hoãn fix và mời exploit lớn hơn.

4. Separate Contracts, Separate Audits

Hypervisors của Visor đã được audit. Hợp đồng vVISR staking thì không. Mọi hợp đồng nắm quỹ người dùng cần audit riêng, dù nó "chỉ là staking contract."

5. Price Impact Limits Exploit Profitability

Kẻ tấn công chỉ thực hiện ~$450k trong $8.2M do Uniswap v2 thanh khoản mỏng. Exploit token lớn tự giới hạn — nhưng protocol vẫn chịu reputational và tokenomic damage.


FAQ

Was this a reentrancy attack?

No. Dù một số tham chiếu gọi là "reentrancy," vulnerability là access control bypass trong kiểm tra authorization của hàm deposit(). Không có external call hoặc recursive entry.

Were the NFT vaults (hypervisors) compromised?

No. Hypervisors quản lý vị trí Uniswap v3 ERC721 không bị ảnh hưởng. Exploit nhắm vào hợp đồng vVISR staking rewards riêng biệt.

How much did the attacker actually profit?

~$450k (113 ETH) trong $8.2M giá trị danh nghĩa, do -87% price impact khi dump VISR trên Uniswap v2.

Did users get their money back?

Visor đề xuất token migration qua pre-exploit snapshot. Điều này làm whole user chỉ nếu token mới giữ giá trị — một guarantee xã hội, không phải technical.

What audits were done after?

Visor thuê Quantstamp và ConsenSys Diligence audit tháng 12/1 cho hợp đồng staking mới.

Is Visor Finance still operating?

Visor hợp nhất với Gamma Strategies năm 2022. Công nghệ hypervisor tiếp tục dưới Gamma, với security practice cải thiện và audit định kỳ.


Key Takeaways

  1. Visor Finance hack là access control bypass, không phải reentrancy — require() bị lỗi cho phép mint share không giới hạn
  2. 8.8M VISR ($8.2M danh nghĩa) bị đánh cắp, chỉ ~$450k thực hiện do ràng buộc thanh khoản
  3. Sự cố thứ ba trong sáu tháng — validation failure hệ thống, không phải bad luck
  4. Hypervisors (NFT vaults) an toàn — exploit đánh vào hợp đồng staking riêng biệt
  5. Token migration via snapshot — khắc phục xã hội khi technical recovery thất bại
  6. "Economic arbitrage" framing delayed proper security investment — gọi bug đúng tên nó

Phân tích này dựa trên on-chain data, điều tra REKT News, disclosure của security researcher (storming0x, BlockSec, Georgios Konstantopoulos), và communication chính thức của Visor Finance. Tất cả transaction hash và contract address có thể verify trên Etherscan.

Tags:

visor finance hackvisor finance reentrancynft vault exploitdouble vulnerability defivisor finance 8 million