Liquid Network 的 4,000 枚比特币是怎么凭空走出金库的?
- Quan điểm cốt lõi: Tháng 9 năm 2026, Liquid Network bị khai thác do lỗ hổng bộ nhớ đệm (cache) trong phần mềm node. Kẻ tấn công không cần đánh cắp private key hay phá vỡ multi-sig, chỉ bằng chứng minh phạm vi (range proof) giả mạo, trong quy trình hợp lệ đã đúc ra 4.000 L-BTC từ hư không và rút thành công khoảng 320 triệu USD Bitcoin thật, phơi bày rủi ro hệ thống của "tài sản wrapped" ở tầng triển khai phần mềm và tầng vận hành.
- Yếu tố then chốt:
- Kẻ tấn công không phá vỡ bất kỳ private key hay HSM nào, lợi dụng lỗ hổng cache range proof của node Elements không ràng buộc tài sản với output script, đã đưa trước 68 chứng minh giống hệt nhau lên chain trong 14 giờ để "nuôi" cache, cuối cùng hoàn tất rút tiền bằng chữ ký hợp lệ multi-sig 11/15.
- Bản vá lỗ hổng đã được gửi ngày 3 tháng 8, hợp nhất vào nhánh chính ngày 2 tháng 9, nhưng các node liên bang vẫn chạy phiên bản cũ phát hành ngày 13 tháng 4, bản vá bị trễ tới năm tháng trong môi trường production; lần commit cuối cùng của kho mã node liên bang là tháng 4 năm 2024, cách thời điểm sự việc hơn hai năm.
- Sự việc phơi bày sự thiếu khả năng kiểm chứng dự trữ: giao dịch bảo mật ẩn số tiền, bên ngoài không thể đối chiếu thời gian thực giữa lượng L-BTC lưu hành và số dư Bitcoin thật trong ví liên bang. Khi trên chain lưu hành 4.205 L-BTC thì Bitcoin thật chỉ còn 197, tỷ lệ hỗ trợ dưới 5%.
- Kẻ tấn công tự nhận là white hat, trả lại 3.400 Bitcoin (85%), giữ lại 598,5 (khoảng 15%), và yêu cầu thêm 10% tiền thưởng lỗ hổng. Blockstream công khai từ chối trả tiền chuộc, khẳng định rõ đây là "hành vi trộm cắp" chứ không phải white hat.
- Sau sự việc, tỷ lệ hỗ trợ L-BTC hồi phục lên khoảng 86%, Blockstream cam kết bảo đảm neo giá 1:1, không để người giữ token bị giảm giá trị. 598,5 Bitcoin còn lại bước vào giai đoạn điều tra pháp y trên chain và truy vết thực thi pháp luật.
- Bài học cốt lõi: an toàn của tài sản wrapped phụ thuộc vào mắt xích yếu nhất trong ba tầng: uy tín nhà phát hành, triển khai phần mềm node và kênh nạp/rút. Multi-sig chống kẻ xấu chứ không chống mã độc; "white hat" nên lấy tiêu chuẩn hành vi là công bố trước, hợp tác sau.
Ngày 6 tháng 9, khoảng 4000 bitcoin (tương đương khoảng 320 triệu USD theo giá lúc đó) đã rời khỏi ví của Liquid Network. Đây là vụ đánh cắp tài sản crypto lớn nhất từ đầu năm 2026 đến nay.
Nhưng điều đáng để suy ngẫm nhất ở vụ án này không phải là số tiền.
Không một private key nào bị đánh cắp, không một HSM (Hardware Security Module - mô-đun bảo mật phần cứng) nào bị phá, không ai bị phishing, cũng không có nội gián. 15 tổ chức quản lý kho bạc này, chìa khóa của mỗi tổ chức vẫn nguyên vẹn trong két sắt của riêng mình, và mỗi lần ký đều do chính họ chủ động, tự nguyện, thực hiện đúng quy tắc.
Tiền cứ thế đi ra ngoài.
Để hiểu chuyện này xảy ra như thế nào, trước tiên chúng ta cần dành vài phút để hiểu kho bạc này được thiết kế ra sao.
1. Một kho bạc bitcoin do 15 tổ chức đồng quản lý
Bitcoin mainnet có một vấn đề ai cũng biết: chậm và đắt. Một giao dịch trung bình phải đợi mười phút mới vào block, phí giao dịch lại dao động theo độ khó đào. Điều này không đủ dùng cho một sàn giao dịch hay đội quant muốn chuyển tiền lớn thường xuyên.
Liquid Network là một giải pháp do Blockstream đưa ra. Nó là một "sidechain" — bạn có thể hình dung nó như một làn đường cao tốc bên cạnh Bitcoin mainnet.
Cách dùng rất đơn giản: bạn gửi bitcoin thật vào một kho bạc đồng quản lý, kho bạc phát cho bạn một chứng chỉ tiền gửi tương đương, chứng chỉ này gọi là L-BTC, có thể lưu chuyển nhanh trên làn đường cao tốc này với tốc độ một giao dịch mỗi phút. Khi muốn lấy lại bitcoin thật, bạn nộp trả chứng chỉ để hủy, kho bạc lấy ra số coin thật tương đương trả lại cho bạn. Hành động trước gọi là peg-in (neo vào), hành động sau gọi là peg-out (neo ra). Về lý thuyết, tổng lượng L-BTC lưu hành trên chain luôn bằng với số bitcoin thật nằm trong kho bạc — đây chính là cái gọi là neo 1:1.
Mấu chốt nằm ở chỗ ai quản lý kho bạc này. Câu trả lời của Liquid là: không giao cho bất kỳ tổ chức nào, mà giao cho một "liên bang" gồm 15 tổ chức đã biết, thành viên gồm nhiều sàn giao dịch và nhà cung cấp hạ tầng. 15 node này mỗi bên giữ một chìa khóa, lưu trong HSM (mô-đun bảo mật phần cứng) chuyên dụng của riêng mình, mọi thao tác mở kho bạc đều cần ít nhất 11 trong số 15 chìa khóa ký đồng thời, tức đa chữ ký 11/15.
Đồng thời, 15 node này cũng chịu trách nhiệm luân phiên tạo block và xác thực lẫn nhau. Nói cách khác, chúng vừa là người trông coi kho bạc, vừa là người ghi sổ của chain này.

Ý đồ thiết kế này rất rõ ràng: làm điều xấu từ một điểm là không khả thi, bạn phải thuyết phục đồng thời 11 tổ chức không liên quan đến nhau mới có thể lấy trộm tiền. Từ góc độ "chống kẻ xấu", nó thực sự làm khá tốt.
2. Một sổ cái bảo mật, và "kiểm tiền giả mà không mở phong bì"
Liquid còn một đặc điểm nữa: số tiền giao dịch của nó được giữ bí mật với bên ngoài.
Trên Bitcoin mainnet, ai cũng có thể thấy số tiền cụ thể của mỗi giao dịch. Với tổ chức thì điều này rất khó chịu — việc điều chỉnh vị thế lớn của bạn sẽ bị cả thế giới nhìn thấy. Liquid giải quyết việc này bằng một kỹ thuật gọi là "Confidential Transactions" (giao dịch bảo mật): số tiền được mã hóa che giấu, trên chain chỉ còn lại một cam kết toán học, người ngoài không thấy được con số cụ thể.
Nhưng điều này lập tức mang đến một rắc rối mới. Nếu số tiền không nhìn thấy được, làm sao node biết giao dịch này không gian lận? Ví dụ ghi một số âm từ hư không, hoặc đẩy con số đến tràn số?
Giải pháp gọi là "range proof" (chứng minh phạm vi). Ví dụ: đặt số tiền vào một phong bì không trong suốt, đồng thời kèm theo một chứng minh toán học, chứng minh này cho phép bất kỳ ai, mà không cần mở phong bì, vẫn tin chắc con số bên trong nằm trong phạm vi hợp lệ. Node lần lượt kiểm tra các chứng minh này, xác nhận thu chi của mỗi giao dịch đều khớp, nhưng始终 không biết số tiền cụ thể là bao nhiêu.
Cơ chế này tự nó là mật mã học đáng tin cậy. Vấn đề nằm ở tối ưu hiệu năng của nó.
3. Lỗ hổng: một cỗ máy kiểm tiền giả ghi nhớ quá tốt, nhưng ghi nhầm trọng điểm
Chi phí tính toán để xác thực range proof rất lớn. Để node không bị quá tải, Elements (phần mềm node mã nguồn mở mà Liquid sử dụng, là một nhánh của Bitcoin Core) đã làm một việc mà mọi kỹ sư đều làm: thêm cache.
Chứng minh đã xác thực một lần, ghi lại kết quả, lần sau gặp cùng một cái thì cho qua luôn, không tính lại nữa.
Vậy vấn đề nằm ở đây: làm sao xác định "gặp phải là cùng một cái"?
Cách làm của Elements là dùng hai thứ ghép thành một key chỉ mục: byte của chứng minh本身, cộng với cam kết số tiền đã được mã hóa đó.
Thiếu gì? Thiếu việc đây là loại tài sản nào, và số tiền này sẽ trả cho ai (output script).
Ví dụ bằng quầy thu ngân. Trên quầy có một máy kiểm tiền giả, những tờ tiền nó đã kiểm sẽ được ghi lại số hiệu, lần sau cùng số hiệu thì cho qua luôn. Nhưng khi ghi số hiệu, nó chỉ ghi hình nổi watermark và mệnh giá của tờ tiền, không ghi tờ tiền này là tiền nước nào, cũng không ghi nó sẽ được giao cho người nhận nào. Thế là cùng một kết luận "đã kiểm rồi", có thể bị mang sang một bối cảnh hoàn toàn không nên áp dụng để dùng.

Kẻ tấn công đã làm đúng như vậy, và rất kiên nhẫn. Theo hồi cứu của các nhà nghiên cứu, trong khoảng 14 giờ trước khi ra tay, hắn lần lượt gửi lên chain 68 range proof hoàn toàn giống nhau — hết lần này đến lần khác nhồi những kết luận "đã xác thực" này vào cache của các node. Đợi đến khi thời cơ chín muồi, hắn mới đưa cùng một chứng minh đó vào một bối cảnh lẽ ra phải bị từ chối để submit.
Node tra cache một chút, phát hiện "cái này tôi kiểm rồi, không vấn đề", thế là cho qua.
Vậy là, 3.996 L-BTC không hề được bất kỳ bitcoin thật nào bảo chứng, bị ghi vào sổ cái từ hư không.
Do số tiền vốn đã bị giao dịch bảo mật che giấu, không một nhà quan sát nào trên chain có thể nhìn thấy số tiền thừa ra này.
4. 35 phút đó: mỗi bước đều hợp quy
23:53 giờ Bắc Kinh ngày 6 tháng 9 (15:53:10 UTC), block 4.050.336 của Liquid đã đóng gói giao dịch giả mạo này.
Mỗi bước xảy ra sau đó đều hoàn toàn tuân thủ quy tắc, đây là phần đáng lo ngại nhất của toàn bộ sự việc.
Lô L-BTC được đúc từ hư không này được chuyển vào ví của SideSwap (một nền tảng bên thứ ba cung cấp dịch vụ peg-out), sau khi hòa vào, chúng không còn khác gì bất kỳ một L-BTC bình thường nào. Trong mắt sổ cái, chúng chính là tiền thật.
Hơn mười phút sau, một yêu cầu peg-out 4.000 L-BTC được gửi lên: hủy chứng chỉ tiền gửi, lấy bitcoin thật ra.
15 node bắt đầu thực hiện nhiệm vụ, HSM của chúng sẽ làm hai bước kiểm tra: địa chỉ rút tiền có nằm trong whitelist không, và lượng L-BTC bị hủy có khớp với lượng bitcoin yêu cầu không. Cả hai đều khớp.
Nó sẽ không, và cũng không có khả năng, truy hỏi câu hỏi thứ ba: những L-BTC này ban đầu đến từ đâu?
11 chìa khóa ký như thường lệ. Khoảng 35 phút sau, Bitcoin mainnet xác nhận giao dịch đó, 3.996 bitcoin thật rời khỏi ví của liên bang.
Đáng chú ý là, Liquid đã thiết kế một lớp bảo hiểm khẩn cấp: nếu đường ký thông thường thất bại, cần dùng 2/3 chìa khóa dự phòng và đợi 56 ngày mới có thể động vào tiền. Lớp bảo hiểm này chưa từng được kích hoạt — vì kẻ tấn công căn bản không đụng vào cửa sau, hắn đi cửa chính, và cửa chính đã mở ra cho hắn.
Ngưỡng đa chữ ký quản lý "ai có thể ký", nó không thể trả lời "ký cái này có đúng không". Khi việc giả mạo xảy ra ở tầng thấp hơn cả chữ ký — tầng mà phần mềm node phán đoán thế nào là tiền thật — thì ngưỡng dù cao đến đâu, cũng chỉ khiến một khoản chi sai được ký một cách gọn gàng hơn mà thôi.
5. Nó đã bị phát hiện như thế nào
Trớ trêu thay, lỗ hổng này sẽ gây ra bất đồng giữa các node khác nhau: cùng một block, có node chấp nhận, có node từ chối — điều này phụ thuộc vào việc cache của mỗi bên trước đó đã lưu gì.
Nhà phát triển cốt lõi của Bitcoin, Antoine Poinsot, lúc đó đã công khai chỉ ra rằng block then chốt đó "bị mempool từ chối, nhưng được Blockstream chấp nhận".

Và mempool.space本身 chính là một trong các thành viên liên bang. Chương trình kiểm toán thời gian thực của nó đã bắt được một khoản rút bất thường -4.019 BTC, trong khi bảng điều khiển chính thức của Liquid lúc đó chưa phản ánh đồng bộ khoản tổn thất này — hai hệ thống giám sát đưa ra hai thế giới khác nhau.
Những con số sau đó rất chói mắt: trên chain lưu hành 4.205 L-BTC, trong khi bitcoin thật trong ví của liên bang, sau khi xử lý vài giao dịch rút tiền tiếp theo, chỉ còn 197 đồng, tỷ lệ bảo chứng dưới 5%.
Ở đây cũng ẩn chứa mặt kia của giao dịch bảo mật: cái giá của quyền riêng tư là khả năng kiểm chứng. Số tiền bị che giấu, bên ngoài không ai có thể so sánh thời gian thực giữa "tổng chứng chỉ tiền gửi trên sổ cái" và "số dư coin thật trong kho bạc". Neo 1:1 từ một sự thật ai cũng kiểm chứng được, thoái hóa thành một tuyên bố cần phải được tin. Đến khi nó bị chứng minh là sai, khoảng trống đã là 320 triệu USD.
6. Thứ chói mắt hơn cả lỗ hổng, chính là bản vá đó
Nếu câu chuyện dừng ở đây, nó chỉ là một cuộc tấn công mật mã học trình độ cao. Nhưng còn có nửa sau.
Đoạn mã sửa lỗi cache đó, đã được submit lên kho mã từ ngày 3 tháng 8, tiêu đề ghi rõ ràng: gắn cache range proof vào tài sản và output script. Ngày 2 tháng 9, nó được hợp nhất vào nhánh chính.
Và vào thời điểm xảy ra sự việc, node của liên bang đang chạy phiên bản 23.3.3 — phiên bản phát hành ngày 13 tháng 4, không


