Cosmos Labs đã cảnh báo về một lỗ hổng xử lý số dư nghiêm trọng trong module Cosmos EVM dùng chung, vốn đã bị khai thác để rút tiền từ sáu blockchain trong khoảng thời gian từ ngày 20 đến 25 tháng 8 năm 2026.
Lỗ hổng này có mã hiệu GHSA-7g4w-cg88-2cq2, được Cosmos Labs xếp hạng Nghiêm trọng (Critical) và được công bố mà không có định danh CVE, phân loại điểm yếu hoặc điểm CVSS.
Các phiên bản bị ảnh hưởng là < 0.6.2 và >= 0.7.0 < 0.7.2. Bản vá đã được phát hành trong các phiên bản v0.6.2 và v0.7.2 vào ngày 19 tháng 8. Các đơn vị vận hành chuỗi (chain operators) được yêu cầu nâng cấp lên một trong các bản phát hành này hoặc mới hơn; đây là một thay đổi gây phá vỡ trạng thái (state-breaking) và yêu cầu nâng cấp mạng lưới có phối hợp.
Những đơn vị vận hành không thể nâng cấp ngay lập tức được yêu cầu tạm dừng chuỗi thay vì cố gắng thực hiện nâng cấp quản trị có phối hợp.
Trong một báo cáo sau sự cố (post-mortem) công bố ngày 28 tháng 8, Cosmos Labs cho biết lỗ hổng đã được báo cáo qua chương trình bug bounty vào ngày 25 tháng 4 và vào thời điểm đó được đánh giá là không gây rủi ro cho tiền trên các mạng lưới thực tế.
"Chúng tôi đã không thể tái hiện lỗ hổng trên các mạng lưới có 18 chữ số thập phân (18-decimal) và đã kết luận sai lầm rằng nó chỉ ảnh hưởng đến các mạng lưới không có 18 chữ số thập phân," Cosmos Labs cho biết trong báo cáo.
Đến ngày 13 tháng 8, đội ngũ đã xác nhận rằng tất cả các chuỗi Cosmos EVM đều bị ảnh hưởng bất kể cấu hình số thập phân. Bản vá sau đó được điều hướng thông qua quy trình "vá thầm lặng" (silent patch) công khai mà công ty thường dành cho các vấn đề không gây mất mát tài sản trên các chuỗi thực tế.
"Tại thời điểm này, đối với một lỗ hổng được xác định là đe dọa tài sản của người dùng trong các mạng lưới thực tế, đội ngũ thường sẽ sử dụng các kênh bảo mật để phân phối bản vá riêng tư cho các mạng bị ảnh hưởng. Tuy nhiên, vì bản vá đã có sẵn công khai trên nhánh chính (main branch) mà chưa có dấu hiệu bị khai thác, đội ngũ kết luận rằng việc tiến hành quy trình vá thầm lặng là an toàn," Cosmos Labs giải thích.
Chính chính sách vá thầm lặng đã công bố của công ty lại quy định một hướng đi khác cho các lỗ hổng thuộc loại này.
"Khi một vấn đề gây ra rủi ro tức thời hoặc trên toàn mạng lưới, Cosmos Labs sẽ khởi động các biện pháp giảm thiểu khẩn cấp, phân phối bản vá riêng tư hoặc nâng cấp có phối hợp trước khi bất kỳ thông tin công khai nào diễn ra," chính sách bug bounty của Cosmos Labs nêu rõ (cập nhật lần cuối vào 27/7).
Chi tiết kỹ thuật của lỗ hổng
Lỗ hổng nằm trong mã nguồn đối soát trạng thái Ethereum Virtual Machine (EVM) với module x/bank của Cosmos SDK. EVM StateDB chỉ theo dõi số dư có thể chi tiêu của tài khoản, trong khi các tài khoản vesting trong trạng thái SDK giữ cả số dư có thể chi tiêu và số dư bị khóa; cả x/staking và staking precompile đều cho phép ủy quyền (delegate) phần bị khóa.
Khi một tài khoản vesting ủy quyền nhiều hơn số dư có thể chi tiêu của nó, việc ghi lại (write-back) sau ủy quyền sẽ trừ toàn bộ số lượng đã ủy quyền vào con số chi tiêu nhỏ hơn. Phép trừ này không được kiểm tra, dẫn đến số dư bị tràn ngược (wrap-around) lên tới xấp xỉ 2^256.
Quá trình đối soát sau đó sẽ đúc thêm tiền (mint) dựa trên chênh lệch dương và đốt tiền (burn) dựa trên chênh lệch âm. Kẻ tấn công có thể chuyển một lượng tiền hữu hạn ra khỏi tài khoản bị tràn số, hoặc gửi cho tài khoản nạn nhân 2^256 trừ đi số dư của họ để quá trình đối soát đốt sạch số tài sản thực có của nạn nhân.
Các chuỗi chạy phiên bản 0.6.x sẽ thực hiện mint và burn trên sổ cái SDK, vì vậy một lượng mint lớn sẽ gây ra tràn tổng cung (supply overflow) khiến chuỗi bị dừng. Các chuỗi chạy 0.7.x thiết lập số dư trực tiếp trong x/bank và chấp nhận các thay đổi có thể tồn tại sau khi chuyển đổi từ uint256 sang int256.
Khuyến nghị dành cho các nhà vận hành
Các đơn vị vận hành Cosmos EVM được khuyên thực hiện các bước sau:
- Nâng cấp lên v0.6.2 hoặc v0.7.2 trở lên, áp dụng như một bản nâng cấp mạng lưới có phối hợp.
- Dừng chuỗi thay vì bỏ phiếu. Các chuỗi không thể nâng cấp ngay lập tức được yêu cầu dừng sản xuất khối thay vì thực hiện quy trình nâng cấp quản trị.
- Đóng điều kiện tiên quyết. Từ chối
MsgCreateVestingAccount,MsgCreatePermanentLockedAccount, vàMsgCreatePeriodicVestingAccounttrong ante handler. - Xác minh đường dẫn mã thực tế trên một bản fork. Một bản vá cherry-pick chỉ xử lý helper được xuất ra (exported) có thể để lại một bản sao không được xuất (unexported) trùng lặp trong khi mọi bài kiểm tra vẫn vượt qua.
- Áp dụng hai bản vá mà thông báo bỏ sót. Snapshot số dư bị khóa và bảo vệ module-account là các thay đổi riêng biệt.
- Đăng ký đầu mối liên hệ bảo mật với Cosmos Labs.
Diễn biến cuộc tấn công và thiệt hại
Cuộc tấn công đầu tiên, nhắm vào MANTRA, bắt đầu lúc 19:06 UTC ngày 20 tháng 8. Cosmos Labs đã gửi thông báo riêng tư đầu tiên qua email bảo mật lúc 03:36 UTC ngày 21 tháng 8, khoảng hai giờ sau khi MANTRA báo cáo rằng họ đã bị khai thác.
Cosmos Labs cho biết họ đã ghi nhận sáu chuỗi bị khai thác thông qua lỗ hổng này.
Kẻ tấn công đã bán khoảng 2,87 triệu USD tài sản bị ảnh hưởng trên các sàn giao dịch phi tập trung (DEX). Thêm khoảng 2,85 triệu USD khác đã được bán trên các sàn giao dịch tập trung (CEX), theo ước tính của Cosmos Labs dựa trên dữ liệu khối lượng giao dịch công khai.
Hệ sinh thái Cosmos bao gồm hơn 115 blockchain công khai, và công ty thừa nhận họ không có danh sách đầy đủ các mạng lưới đang chạy phần mềm của mình, một lỗ hổng quản lý tương tự như sự cố hồi tháng 7 liên quan đến các lỗi hệ thống tệp đính kèm.