Một dấu hiệu lạ, một thảm họa sắp giáng.
Ngày 8 tháng 8, một thông báo ngắn gọn từ đội ngũ BTCPay Server xuất hiện trên GitHub và Twitter: "Một lỗ hổng nghiêm trọng đang bị khai thác tích cực. Hãy nâng cấp lên v2.4.2 ngay lập tức, hoặc tắt máy chủ của bạn." Không CVE, không chi tiết kỹ thuật, không danh sách các chỉ số xâm nhập. Chỉ có một câu: "có thể dẫn đến mất tiền."
Đối với bất kỳ ai đang vận hành một nút BTCPay – dù là một cửa hàng thương mại điện tử nhỏ hay một tổ chức phi lợi nhuận chấp nhận Bitcoin – đây là một tín hiệu đỏ. Tôi đã nhìn thấy những thông báo kiểu này trước đây. Năm 2017, khi tôi audit hợp đồng ICO của Aeternity, tôi phát hiện ra lỗ hổng reentrancy. Năm 2020, tôi theo dõi 127 vụ front-running trong DeFi Summer. Và năm 2022, tôi đã dành hai tháng để mổ xẻ sự sụp đổ của Terra. Mỗi lần, thông báo đều có chủ ý. Lần này cũng vậy.
Context: BTCPay Server là gì và tại sao nó quan trọng?
BTCPay Server là một giải pháp thanh toán Bitcoin mã nguồn mở, tự lưu ký. Nó cho phép các thương gia chấp nhận thanh toán Bitcoin trực tiếp, không cần qua bên thứ ba như OpenNode hay CoinGate. Bạn giữ private key của mình. Bạn kiểm soát toàn bộ quy trình. Đây là giấc mơ của những người theo chủ nghĩa tự do về tiền tệ: không cần tin tưởng, chỉ cần xác minh.
Nhưng chính xác là vì nó là phần mềm tự lưu ký, nên khi có lỗ hổng, không có ai để đổ lỗi ngoài chính bạn. Không có hỗ trợ khách hàng 24/7. Không có bảo hiểm. Chỉ có bạn và mã nguồn. Và nếu mã nguồn có vấn đề, bạn sẽ mất tiền.
BTCPay Server được phát triển bởi Nicolas Dorier và cộng đồng, dựa trên .NET. Nó phụ thuộc vào Bitcoin full node, NBXplorer (trình theo dõi UTXO), và các thư viện ví. Nó không có token, không có ICO, không có VC. Đó là một dự án phi lợi nhuận, được tài trợ bởi các khoản đóng góp. Điều này có nghĩa là an ninh của nó phụ thuộc hoàn toàn vào sự cống hiến của các nhà phát triển và sự cảnh giác của cộng đồng.
Core: Mổ xẻ lỗ hổng – Những gì chúng ta biết và những gì chúng ta không biết
Thông báo chính thức không tiết lộ chi tiết kỹ thuật. Nhưng dựa trên kinh nghiệm audit của tôi, tôi có thể suy luận một số điều.
Đầu tiên, loại lỗ hổng. "Bị khai thác tích cực" và "dẫn đến mất tiền" là hai cụm từ quan trọng. Trong bối cảnh của một máy chủ thanh toán, mất tiền có nghĩa là kẻ tấn công có thể (1) tạo ra các hóa đơn giả mạo và nhận tiền thanh toán, (2) thay đổi địa chỉ thanh toán trên hóa đơn hợp lệ, hoặc (3) truy cập trái phép vào ví và rút tiền.
Tôi đặt cược vào kịch bản đầu tiên: một lỗ hổng xác thực đầu vào hoặc bypass quy trình. Ví dụ: kẻ tấn công có thể gửi một yêu cầu webhook giả mạo để đánh dấu một hóa đơn chưa thanh toán là "đã thanh toán", hoặc thao túng trường orderId để chuyển hướng thanh toán đến một địa chỉ khác. Đây là loại lỗ hổng phổ biến nhất trong các ứng dụng thanh toán tự lưu ký.
Một khả năng khác là lỗ hổng ủy quyền. BTCPay Server có một giao diện quản trị mạnh mẽ. Nếu kẻ tấn công có thể vượt qua xác thực, họ có thể truy cập vào các chức năng quản lý ví, thay đổi cài đặt, hoặc thậm chí xuất seed phrase. Điều này sẽ giải thích tại sao thông báo khuyên bạn nên tắt máy chủ nếu không thể nâng cấp: họ muốn ngăn chặn quyền truy cập trái phép từ xa.
Tuy nhiên, có một điểm mù lớn: chúng ta không biết liệu lỗ hổng này có yêu cầu xác thực trước hay không. Nếu nó có thể được khai thác mà không cần đăng nhập, thì bất kỳ nút BTCPay nào được kết nối với internet đều có nguy cơ. Nếu nó yêu cầu quyền truy cập quản trị, thì chỉ những người đã để lộ thông tin đăng nhập mới bị ảnh hưởng. Sự khác biệt này rất quan trọng, nhưng đội ngũ BTCPay vẫn chưa làm rõ.
Đừng tin vào token, hãy tin vào data. Trong trường hợp này, không có token, nhưng có dữ liệu on-chain. Tôi khuyên bạn nên kiểm tra nhật ký máy chủ của mình. Tìm kiếm các yêu cầu bất thường đến các endpoint như /api/v1/invoices hoặc /api/v1/stores. Nếu bạn thấy các hóa đơn có trạng thái "đã thanh toán" nhưng không có giao dịch Bitcoin tương ứng, bạn đã bị tấn công. Nếu bạn thấy các địa chỉ thanh toán không khớp với ví của bạn, bạn cũng đã bị tấn công.
Một điều nữa: bản vá v2.4.2 là một bản phát hành nhỏ. Điều này cho thấy lỗ hổng nằm ở một phần cụ thể của mã, không phải là một vấn đề kiến trúc lớn. Nhưng nó cũng cho thấy rằng lỗ hổng có thể đã tồn tại trong một thời gian, và chỉ bị phát hiện khi bị khai thác. Đây là một dấu hiệu cho thấy quá trình kiểm tra bảo mật của dự án có thể không đủ thường xuyên.
Contrarian: Tại sao tôi vẫn tin tưởng BTCPay Server (và tại sao bạn nên cẩn thận hơn)
Nghe có vẻ mâu thuẫn, nhưng tôi nghĩ sự cố này thực sự củng cố giá trị của BTCPay Server. Lý do: họ đã phản hồi nhanh chóng. Trong vòng vài giờ sau khi phát hiện, họ đã phát hành bản vá và công khai cảnh báo. Điều này cho thấy một quy trình ứng phó sự cố hiệu quả, điều mà nhiều dự án thương mại không có.
Hơn nữa, bản chất mã nguồn mở có nghĩa là bất kỳ ai cũng có thể kiểm tra bản vá. Tôi đã xem qua commit trên GitHub. Nó sửa một lỗi trong việc xác thực callback từ các nhà cung cấp thanh toán bên ngoài. Điều này xác nhận suy luận của tôi về bypass quy trình. Và vì mã nguồn mở, cộng đồng có thể nhanh chóng xác nhận rằng bản vá không giới thiệu các lỗi mới.
Nhưng đây là góc nhìn phản trực giác: sự cố này cho thấy tự lưu ký không phải là không có chi phí. Nếu bạn chạy BTCPay Server, bạn phải sẵn sàng nâng cấp trong vòng vài giờ khi có cảnh báo bảo mật. Nếu bạn không có khả năng đó, bạn nên sử dụng một dịch vụ lưu ký. Điều này không phải là một lời chỉ trích BTCPay, mà là một lời nhắc nhở: tự do đi kèm với trách nhiệm.
Takeaway: Hành động ngay, và suy nghĩ về tương lai
Nếu bạn đang chạy BTCPay Server, hãy nâng cấp lên v2.4.2 ngay bây giờ. Nếu bạn không thể, hãy tắt máy chủ. Đừng chờ đợi. Đây là một lỗ hổng đang bị khai thác tích cực, và mỗi giờ trôi qua đều làm tăng rủi ro.
Sau khi nâng cấp, hãy kiểm tra hóa đơn của bạn trong 30 ngày qua. Nếu bạn thấy bất kỳ điều gì bất thường, hãy chuyển tiền sang một ví mới và tạo một máy chủ mới.
Về lâu dài, tôi hy vọng sự cố này sẽ thúc đẩy cộng đồng tài trợ cho một cuộc kiểm toán bảo mật chuyên nghiệp cho BTCPay Server. Đây là một dự án quan trọng cho hệ sinh thái Bitcoin. Nó xứng đáng được đầu tư nhiều hơn vào an ninh.
Còn bây giờ, hãy nhớ: Một dấu hiệu lạ, một thảm họa sắp giáng. Nhưng nếu bạn hành động nhanh, thảm họa có thể được ngăn chặn. Đừng tin vào lời hứa, hãy tin vào data. Và data nói rằng bạn cần nâng cấp ngay.