Lịch sử bí mật của các lỗ hổng tiền mã hóa

Lịch sử bí mật của các lỗ hổng tiền mã hóa

Được dịch từ tiếng Anh

Trong tiền mã hóa, có một công thức gần như linh thiêng: "Đừng tin, hãy xác minh." Mỗi người dùng có thể chạy node của riêng họ, tự kiểm tra quy tắc của mạng lưới và không phụ thuộc vào đội ngũ phát triển hay bất kỳ cơ quan trung ương nào.

Nhưng công thức này có một hạn chế nghiêm trọng. Dù tôi kiểm tra mã cẩn thận đến đâu, tôi sẽ không bắt được một lỗ hổng đòi hỏi một hacker thực thụ mới phát hiện được — đơn giản là tôi không có chuyên môn. Vì vậy tôi buộc phải tin tưởng dù sao: tin vào những người kiểm tra mọi thứ thay tôi và nói cho tôi biết họ đã tìm thấy gì.

Vào ngày 5 tháng 5 năm 2026, các nhà phát triển Bitcoin Core công bố lỗ hổng CVE-2024-52911. Nó ảnh hưởng tới các phiên bản Bitcoin Core từ 0.14.0 trở đi và đã được sửa trong phiên bản 29.0. Lỗi cho phép một miner gây sập từ xa các node của người khác.

Nhưng chi tiết đáng chú ý nhất ở đây là lỗ hổng này đã được biết trong bao lâu. Cory Fields đã báo cáo riêng cho các nhà phát triển vào 2 tháng 11, 2024. Đến 6 tháng 11, 2024, Pieter Wuille đã cam kết một bản sửa ẩn. Vào 3 tháng 12, 2024, bản vá xuất hiện trong kho lưu trữ chính thức mà không có thông báo công khai nào và chỉ được mô tả đơn giản là "cập nhật nhỏ." Vào 12 tháng 4, 2025, Bitcoin Core 29.0 phát hành có bao gồm bản sửa. Công bố công khai chỉ diễn ra vào 5 tháng 5, 2026, sau khi nhánh dễ bị tổn thương cuối cùng, 28.x, kết thúc hỗ trợ.

CVE-2024-52911 timeline

Trong một năm rưỡi, client Bitcoin được tin tưởng rộng rãi nhất đã chạy với một lỗ hổng mà các nhà phát triển biết — trong khi các nhà điều hành node chạy phần mềm đó thì không biết. Và đây không phải là một sự cố cá biệt; đó là một mô thức lặp lại trong tiền mã hóa. Các nhà phát triển ở nhiều dự án crypto đã làm điều này trong nhiều năm.

Tôi muốn đi qua những ví dụ khác của cùng một vấn đề, và cuối cùng trả lời câu hỏi: thật sự an toàn đến đâu khi giữ tiết kiệm của bạn bằng tiền mã hóa?

Bitcoin: Lỗi DoS hóa ra là lỗi lạm phát

Vào tháng 9 năm 2018, Bitcoin Core vội vàng phát hành phiên bản 0.16.3. Người dùng được thông báo rằng nó đã vá một lỗ hổng từ chối dịch vụ.

Hai ngày sau, hóa ra đó chỉ là một nửa câu chuyện. Cùng một lỗi trong các phiên bản 0.15.x và 0.16.x có thể cho phép một miner làm tăng nguồn cung bitcoin — về thực chất là chi tiêu cùng một output hai lần trong một khối và thu được BTC thừa. Các nhà phát triển thừa nhận rằng họ ban đầu chỉ tiết lộ phần DoS ít nguy hiểm hơn, cố ý giữ lại mô tả đầy đủ về rủi ro lạm phát để cho miner, doanh nghiệp và các bên quan trọng khác thời gian cập nhật.

Trong kịch bản xấu nhất, đây sẽ là một cuộc tấn công không nhắm vào bất kỳ ví cá nhân nào, mà vào lời hứa cốt lõi của Bitcoin: nguồn cung cố định. Nếu quy tắc 21 triệu có thể bị phá vỡ bởi một lỗi trong client, toàn bộ thần thoại kinh tế của Bitcoin sẽ sụp đổ.

Lỗ hổng này chưa bao giờ bị khai thác. Nhưng CVE-2018-17144 minh họa hoàn hảo tình thế đạo đức. Một mặt, tiết lộ đầy đủ ngay lập tức có thể trao cho kẻ tấn công một cẩm nang sẵn sàng. Mặt khác, người dùng thực tế đã không được nói sự thật về mức độ quan trọng của cập nhật.

Zcash: Đồng tiền giả vô hình

Câu chuyện Zcash còn gây bối rối hơn, vì đây là một đồng tiền quyền riêng tư nơi không phải mọi thứ đều hiển thị trên blockchain. Năm 2018, nhóm phát hiện một lỗ hổng trong mật mã nền tảng của các chứng minh không kiến thức (zero-knowledge proofs). Trước khi được sửa, một kẻ tấn công có thể tạo ZEC giả theo cách mà không ai có thể phát hiện. Với chuỗi minh bạch, lỗi lạm phát ít nhất về lý thuyết có thể nhìn thấy qua phân tích số dư; hệ thống quyền riêng tư khiến việc xác minh loại đó khó khăn hơn nhiều.

Zcash đã sửa vấn đề trong bản nâng cấp Sapling, kích hoạt vào ngày 28 tháng 10 năm 2018, và chỉ công bố công khai vài tháng sau đó. Trong công bố chính thức, nhóm viết thẳng thắn: "mười một tháng trước chúng tôi đã phát hiện một lỗ hổng" — và thừa nhận rằng, trước khi vá, một kẻ tấn công có thể đã đúc Zcash giả mà không bị phát hiện.

Lý do im lặng ở đây dễ hiểu. Tiết lộ lỗi này trước khi được vá sẽ trao cho ai đó công thức để phá hủy Zcash. Nhưng mặt trái cũng rõ ràng: gần một năm, người dùng nắm giữ một tài sản mà về mặt lý thuyết có thể bị làm giả vô hình — và họ chẳng hề hay biết.

Điều này chỉ ra một nghịch lý thực sự:

  • Càng nghiêm trọng lỗ hổng, lý lẽ cho sự bí mật càng mạnh.
  • Nhưng càng nhiều bí mật, càng làm suy yếu ý tưởng về khả năng xác minh. (Ý nghĩa của "xác minh mọi thứ" là gì nếu tôi không có kỹ năng để hiểu những gì mình đang nhìn, và những kiểm toán viên đủ năng lực thì không nói cho tôi biết họ đã tìm thấy gì?)

Monero: Sự thật bị che đậy sau một cái cớ DoS không tồn tại

Năm 2017, Monero gặp phải một mối đe dọa tương tự. Nhóm phát hiện một lỗi nghiêm trọng trong CryptoNote, giao thức cơ sở cung cấp năng lượng cho Monero và một số đồng tiền quyền riêng tư khác. Lỗ hổng cho phép tạo số lượng coin không giới hạn theo cách sẽ vô hình đối với bất kỳ quan sát viên nào không biết chính xác cần tìm gì.

Bản vá trong Monero đã được giới thiệu một cách lặng lẽ. Hơn nữa, phát hành công khai được giải thích là để bảo vệ khỏi một cuộc tấn công DoS RingCT — một cuộc tấn công mà theo thừa nhận sau đó của nhóm thì thực ra chưa từng tồn tại. Đó là một câu chuyện che đậy, được dựng lên để buộc các sàn giao dịch và pool đào cập nhật mà không tiết lộ rủi ro thực sự về lạm phát.

Với Monero, câu chuyện kết thúc tốt: nhóm báo cáo họ đã kiểm tra blockchain và không thấy dấu hiệu bị khai thác. Nhưng lỗ hổng vượt ra ngoài Monero. Sau khi Monero cập nhật, nhóm bắt đầu thông báo cho các dự án dựa trên CryptoNote khác. Nhưng một trong số đó, Bytecoin, đã sớm bị tấn công, và 693 triệu coin bổ sung đã được tạo ra trong nó.

Điều này mở ra một lớp khác của vấn đề khi giữ lỗ hổng bí mật. Khi mã được chia sẻ cho hàng chục dự án, việc thông báo một mối đe dọa đã phát hiện ở một nơi có thể trở thành gợi ý cho kẻ tấn công nhắm tới dự án khác. Các nhà phát triển phải quyết định không chỉ khi nào nói với người dùng của họ, mà là cảnh báo dự án cạnh tranh nào, và theo thứ tự nào — biết rằng một đối thủ được thông tin trước có thể dùng nó chống lại người chưa nhận được thông tin.

Monero Lần nữa: Lỗi cho phép kẻ tấn công đốt tiền của người khác

Năm 2018, Monero đối mặt một sự cố khác, không mang tính nền tảng — nhưng rất nhiều bài học — được biết đến như lỗi đốt. Nó không cho phép ai đó in XMR từ hư không hay phá vỡ lịch trình cung cấp. Nhưng nó cho phép kẻ tấn công gây thiệt hại tài chính thực sự cho các sàn giao dịch, thương gia và dịch vụ khác. Lỗi khiến việc gửi quỹ theo cách mà một số outputs nhận được trở nên không thể chi tiêu.

Một dịch vụ hoán đổi như rabbit.io có thể đã dễ bị tấn công kiểu đó.

Đây là cách các hoán đổi tiền mã hóa hoạt động trên rabbit.io:

  • một người dùng gửi tiền mã hóa, ví dụ XMR, tới địa chỉ gửi tiền hiển thị trong biểu mẫu đặt lệnh;
  • hệ thống tự động của chúng tôi phát hiện thanh toán đến và gửi tiền mã hóa yêu cầu tới địa chỉ nhận do người dùng chỉ định.

Dịch vụ của chúng tôi chưa tồn tại vào thời điểm đó, nhưng giả sử nó tồn tại, cuộc tấn công có thể trông như sau:

  • một kẻ tấn công tạo một lệnh để hoán đổi XMR lấy BTC;
  • kẻ tấn công gửi XMR và nhận BTC;
  • chúng tôi bị mất cả BTC lẫn XMR vì các outputs XMR nhận được không sử dụng được;
  • kẻ tấn công không thu lợi trực tiếp, nhưng phá hủy các doanh nghiệp chấp nhận XMR.

Nhóm Monero chuẩn bị một bản vá lặng lẽ và thông báo trực tiếp cho các sàn giao dịch và thương gia XMR mà họ có thể tiếp cận. Trong bài phân tích sau sự cố, các nhà phát triển thẳng thắn thừa nhận rằng cách tiếp cận này tất yếu bỏ sót những tổ chức họ không có liên hệ trước, và tạo ra ấn tượng về quyền truy cập thông tin có ưu tiên.

Đây là thực tế thực dụng của việc tiết lộ có chọn lọc: một số thành phần thị trường sẽ luôn biết về một rủi ro trước những người khác. Sự bất đối xứng đó tự nó là một vấn đề an ninh.

Stellar: Lỗi bí mật đã từng bị khai thác

Câu chuyện Stellar khác với hầu hết bởi vì lỗi không chỉ tồn tại âm thầm, chỉ nhà phát triển biết. Nó đã từng bị lợi dụng.

Năm 2017, một kẻ tấn công khai thác lỗi đồng thời trong giao thức Stellar và tạo ra 2,25 tỷ XLM — khoảng 10 triệu USD vào thời điểm đó, và khoảng một phần tư số token đang lưu thông. Theo Messari, XLM mới đúc được chuyển tới các sàn giao dịch và có thể đã được bán.

Quỹ Phát triển Stellar sau đó đã đốt một lượng XLM tương đương từ dự trữ của họ để ngăn loãng nguồn cung. Nhưng họ không có thông báo công khai — cho tới khi Messari đưa sự cố ra ánh sáng vào năm 2019, hai năm sau. Đáp lại, đại diện Stellar nói họ đã đề cập đến lỗi trong ghi chú phát hành cập nhật giao thức. Về kỹ thuật, đó không phải im lặng hoàn toàn. Nhưng một mục nhỏ trong ghi chú kỹ thuật mà thị trường không biết tới cho tới khi một cuộc điều tra của Messari hai năm sau thì về thực tế, là im lặng.

Trường hợp này đặc biệt khó chịu cho ngành. Bạn không thể nói, "Chúng tôi giữ lỗ hổng bí mật để không ai khai thác nó." Ai đó đã làm rồi. Sự im lặng không bảo vệ người dùng khỏi một cuộc tấn công — mà bảo vệ các nhà phát triển khỏi sự giám sát.

Ethereum Geth: Bản vá lặng lẽ gây chia rẽ mạng

Tại Geth, client Ethereum được dùng nhiều nhất, thực hành vá lặng lẽ về cơ bản đã được chính thức hóa. Tài liệu của nhóm nêu rõ rằng đối với các lỗ hổng đe dọa sức khỏe của mainnet Ethereum, họ có quyền lặng lẽ phát hành bản vá trong các release mới mà không tiết lộ lỗ hổng. Lý luận khá đơn giản: các nhà điều hành node có thể không cập nhật trong vài tuần hoặc tháng, và nếu bạn nêu rõ chính xác lỗi mà một bản phát hành vá, ai đó có thể cố khai thác nó nhanh hơn đa số node được nâng cấp.

Nhưng vào tháng 8 năm 2021, logic này phản tác dụng. Geth đã vá CVE-2021-39137, phát hành bản vá vào ngày 24 tháng 8 mà không tiết lộ chi tiết. Tuy nhiên ai đó đã tìm ra điều gì đã được sửa — và vào ngày 27 tháng 8, lỗ hổng đã bị khai thác, khiến một phần các node Geth cũ tách chuỗi khỏi mainnet.

Đây là cạnh khác của con dao sự bí mật. Nói quá nhiều, bạn có thể thúc đẩy một cuộc tấn công. Nói quá ít, một số nhà vận hành sẽ không hiểu rằng việc cập nhật là khẩn cấp. Mạng có thể rơi vào chính điều mà nó muốn tránh: khai thác lỗ hổng đang diễn ra.

Polygon: 24 tỷ USD gặp rủi ro, thiệt hại thực tế xảy ra

Vào tháng 12 năm 2021, Polygon đối mặt với cùng tình thế tiến thoái lưỡng nan. Các nhà nghiên cứu bảo mật báo cáo một lỗ hổng nghiêm trọng trong contract genesis của Polygon PoS — một lỗ hổng có thể cho phép kẻ tấn công rút khoảng 24 tỷ USD giá trị token MATIC. Nhóm quyết định tiến hành một cách lặng lẽ: như họ sau này nói, "với bản chất của nâng cấp này, nó cần được thực hiện mà không thu hút quá nhiều sự chú ý." Các validator và nhà điều hành full-node được thông báo, và mạng nhanh chóng nâng cấp.

Nhưng ngay cả phản ứng nhanh cũng không đủ để đóng hoàn toàn cửa sổ rủi ro. Trước khi nâng cấp có hiệu lực, một kẻ tấn công đã kịp đánh cắp 801,601 MATIC — gần 2 triệu USD. Các nhà phát triển xác nhận Quỹ Polygon sẽ bù đắp tổn thất. Các nhà nghiên cứu báo cáo lỗ hổng đã được thưởng khoảng 3,46 triệu USD tiền thưởng.

Nhóm không cố che giấu vấn đề, nhưng người dùng chỉ biết quy mô đầy đủ của những gì suýt xảy ra sau khi mọi thứ kết thúc. Có hai lý do cho cách tiếp cận: thứ nhất, ưu tiên là hành động, không phải tranh luận; thứ hai, trước khi vấn đề được giải quyết, mỗi người biết thêm là một người có thể lợi dụng kiến thức đó.

Có lẽ đây là thỏa hiệp hợp lý: đừng tiết lộ một cuộc tấn công trước khi nó được vá, nhưng cũng đừng biến bản vá thành một bí mật kéo dài hàng tháng hoặc hàng năm.

Những nhà phát triển đang bảo vệ người dùng hay lừa dối họ?

How a quiet patch works

Đôi khi sự bí mật thực sự cứu mạng lưới. Nếu không có bản vá lặng lẽ, Zcash có thể đã chịu lạm phát vô hình. Nếu không có bản vá bí mật, Monero có thể đối mặt với giả mạo không thể phát hiện. Nếu không có hành động nhanh chóng âm thầm của Polygon, thiệt hại tiềm tàng với mạng đó có thể tồi tệ hơn rất nhiều.

Nhưng sự bí mật không miễn phí. Nó tạo ra các tầng lớp người trong cuộc và người ngoài cuộc. Nó mang lại lợi thế cho người mà nhóm quản lý cảnh báo riêng. Nó làm giảm tính cấp bách của các nhà điều hành node khi một bản phát hành trông như bảo trì thông thường. Và nó làm suy yếu một trong những nền tảng tâm lý quan trọng nhất khi sử dụng tiền mã hóa — cảm giác rằng quy tắc trò chơi được biết đến với tất cả mọi người cùng lúc.

Cảm giác đó, hóa ra, là ảo tưởng. Mỗi câu chuyện trong số này đều theo cùng một mạch: một bản vá lặng lẽ, một khoảng thời gian im lặng kéo dài, và rồi thừa nhận rằng suốt thời gian qua, an ninh của mạng đã dựa trên niềm tin vào một nhóm nhỏ những người biết nhiều hơn mọi người khác.