Kiểm toán Nym Mixnet và hợp đồng Vesting
Kiểm toán bảo mật của Nym mixnet và các hợp đồng vesting
Giới thiệu
Vào tháng 12 năm 2022, Nym đã trải qua một cuộc kiểm toán bảo mật độc lập thực hiện bởi Oak Security, một công ty tư vấn bảo mật mạng có trụ sở tại Đức, chuyên về kiểm toán blockchain thế hệ thứ ba và các giao thức phi tập trung. Với kinh nghiệm phong phú trong các hệ sinh thái như Cosmos, Terra, Polkadot và Flow, Oak Security đã được tin tưởng được đảm nhiệm nhiệm vụ đánh giá hai thành phần quan trọng của hệ sinh thái Nym: (1) Nym mixnet và các hợp đồng vesting (xem báo cáo đầy đủ) và (2) Ví Nym (xem báo cáo đầy đủ). Cuộc kiểm toán nhằm đánh giá tính bảo mật và độ mạnh mẽ của các thành phần này, xác định các lỗ hổng tiềm ẩn và đảm bảo tuân thủ các thực hành tốt nhất trong phát triển mã nguồn. Để dễ theo dõi hơn, chúng tôi đã tóm tắt các phát hiện cho từng thành phần. Bạn có thể xem tóm tắt kiểm toán Ví Nym tại đây.
Kiểm toán bảo mật Nym Mixnet và hợp đồng Vesting thực hiện bởi Oak Security
Cuộc kiểm toán kéo dài hai tuần, có sự tham gia của một nhóm bốn chuyên gia từ Oak Security. Nym đã cung cấp cho Oak Security quyền truy cập đầy đủ vào codebase của dự án, các thông số kỹ thuật chi tiết và tài liệu hỗ trợ. Phạm vi của cuộc kiểm toán bao gồm các hợp đồng/mixnet, các kho hợp đồng/vesting và các mục nhập có liên quan của những hợp đồng này tương ứng với Nym mixnet và các hợp đồng vesting.
Oak Security đã xem xét kỹ lưỡng mã, kết hợp mã nguồn tự động và phân tích phụ thuộc với kiểm tra từng dòng thủ công để phát hiện lỗ hổng bảo mật, đánh giá chất lượng mã và đánh giá việc tuân thủ các nguyên tắc lập trình an toàn. Phương pháp tiếp cận toàn diện này bao gồm phân tích chuyên sâu các lĩnh vực quan trọng như lỗ hổng về điều kiện tranh chấp, các vấn đề tràn và thiếu, thực hành quản lý khóa, độ mạnh của mật mã, rủi ro rò rỉ dữ liệu, xử lý mật khẩu, và các biện pháp kiểm soát truy cập và ủy quyền.
Trọng tâm của quá trình kiểm toán là đảm bảo chức năng chính xác của các giao thức, xác định bất kỳ lỗ hổng nào có thể bị khai thác hoặc lỗi hợp đồng thông minh, và đề xuất các cải tiến cho tính an toàn và khả năng đọc của mã.
Tổng quan về các phát hiện
Nym mixnet và các hợp đồng vesting đặc trưng bởi độ dễ đọc và sự rõ ràng cao, với phạm vi test mạnh mẽ hỗ trợ độ tin cậy của chúng. Trong đánh giá của mình, các kiểm toán viên đã xác định được 19 phát hiện, bao gồm 9 lỗ hổng bảo mật—được phân loại là những lỗi nghiêm trọng và mức độ cao—và mười điểm yếu chung được phân loại là nhỏ hoặc mang tính thông tin.
Đội ngũ Nym đã nhanh chóng giải quyết tất cả các vấn đề nghiêm trọng và mức độ cao. Nhóm Oak Security đã xác minh và phê duyệt các bản sửa lỗi của chúng tôi.
NYM-MIX-VEST-CONTRACT-1: Sự kiện thực thi theo khoảng thời gian hoặc epoch lỗi sẽ chặn vĩnh viễn sự tiến triển epoch (Nghiêm trọng)
Cuộc kiểm toán đã xác định một lỗ hổng trong việc xử lý các thông báo AdvanceCurrentEpoch trong contracts/mixnet/src/interval/transactions.rs. Một vòng lặp tuần tự xử lý tất cả các sự kiện đang chờ xử lý trực tiếp trong bối cảnh giao dịch, có nghĩa là một sự kiện thất bại duy nhất có thể làm lùi toàn bộ giao dịch, kết quả là làm ngừng tiến trình epoch và khoảng thời gian, và khiến giao thức bị kẹt.
Để giải quyết lỗi này, các kiểm toán viên đã khuyến nghị nên đóng gói việc thực thi sự kiện trong các thông báo phụ với chính sách phản hồi. Cách tiếp cận này sẽ cho phép hệ thống xử lý các lỗi một cách nhẹ nhàng mà không cần hoàn tác toàn bộ giao dịch. Tuy nhiên, chúng tôi quyết định không làm theo khuyến nghị này. Một sự cố trong quá trình thực thi sự kiện cho thấy một lỗi logic đáng kể có thể làm ảnh hưởng đến cơ chế thưởng, vì vậy nên ngừng tiến trình epoch để kiểm tra thủ công hơn là mạo hiểm hoạt động trong trạng thái lỗi. Thay vào đó, chúng tôi đã triển khai giám sát nâng cao trong Nym API để phát hiện và thông báo cho chúng tôi về các tiến trình epoch thất bại. Cách tiếp cận này đảm bảo rằng những lỗi như vậy được đánh dấu kịp thời, cho phép can thiệp nhanh chóng để giải quyết các vấn đề.
NYM-MIX-VEST-CONTRACT-2: Những kẻ tấn công có thể buộc các mix node đơn lẻ tham gia vào một nhóm node mà không được sự đồng ý của chúng để tập hợp một số lượng lớn mixnode loại này trong cùng một lớp (Nghiêm trọng)
Một lỗ hổng đã được xác định trong thông báo JoinFamilyOnBehalf, có thể cho phép kẻ tấn công thêm một mix node vào một nhóm node mà không có sự đồng ý của node đó. Bằng cách tạo ra một nhóm độc hại và sử dụng khóa định danh của mixnode nạn nhân được ký bằng khóa riêng của node đó làm chữ ký, kẻ tấn công có thể "nhốt" mixnode trong nhóm. Việc này có thể cho phép kẻ tấn công tập hợp các mixnode đơn lẻ lại thành một nhóm duy nhất, gây gián đoạn mạng bằng cách tập trung các node vào cùng một lớp và tăng xác suất cho kẻ tấn công có thể tác động đến định tuyến.
Để khắc phục lỗ hổng trong thông báo JoinFamilyOnBehalf, cơ chế ký của hợp đồng đã được thiết kế lại. Thay vì chỉ ký định danh của mixnode, các chữ ký đã được cập nhật để bao gồm một thông báo có ý định rõ ràng và một nonce duy nhất. Thay đổi này đảm bảo rằng chữ ký không thể được sử dụng lại hoặc phát lại.
NYM-MIX-VEST-CONTRACT-3: Lặp không giới hạn trong quá trình xử lý thông báo TrackUndelegation có thể khiến người dùng không thể hủy ủy quyền, lỗi này cũng ngăn chặn vĩnh viễn tiến trình epoch (Nghiêm trọng)
Lặp lại không giới hạn của thông báo TrackUndelegation có thể gây ra tình trạng cạn kiệt gas khi xử lý các tài khoản có nhiều quyền ủy quyền, ngăn cản người dùng hủy ủy quyền. Lỗi này cũng sẽ dừng tiến trình epoch, khiến giao thức bị kẹt ở trạng thái hiện tại.
Để giải quyết sự cố, chúng tôi đã thực hiện giới hạn 25 ủy quyền vesting cho mỗi tài khoản. Giải pháp này dựa trên số lượng ủy quyền vesting cao nhất được quan sát tại thời điểm đó.
Cập nhật: Tính đến năm 2024, tùy chọn thực hiện ủy quyền vetsing bị vô hiệu hóa hoàn toàn.
NYM-MIX-VEST-CONTRACT-4: Kẻ tấn công có thể chạy trước các tin nhắn BondMixnodeOnBehalf và CreateFamilyOnBehalf và sửa đổi nội dung của chúng (Nghiêm trọng)
Lỗ hổng này sẽ cho phép kẻ tấn công chạy trước các tin nhắn BondMixNodeOnBehalf và CreateFamilyOnBehalf, trích xuất chữ ký và sửa đổi nội dung. Trong trường hợp của BondMixNodeOnBehalf, kẻ tấn công cũng có thể tự đặt mình là proxy, giành quyền kiểm soát hoàn toàn đối với trái phiếu đã được đăng ký.
Để giải quyết lỗ hổng, chúng tôi đã thực hiện một giải pháp hai lớp. Đầu tiên, chúng tôi đã áp dụng những thay đổi về việc tạo chữ ký được mô tả trong NYM-MIX-VEST-CONTRACT-2, bổ sung thêm ý định rõ ràng và nonce duy nhất. Thứ hai, chúng tôi đã hạn chế địa chỉ proxy hợp pháp vào tài khoản vesting, đảm bảo rằng các kẻ tấn công không thể tự thiết lập quyền làm proxy và giành quyền kiểm soát trái phép đối với các trái phiếu đã đăng ký.
Cập nhật: Từ năm 2024, tất cả các hoạt động proxy đã bị vô hiệu hóa, khiến cho cuộc tấn công không thể thực hiện được.
NYM-MIX-VEST-CONTRACT-5: Chữ ký có thể được phát lại trong các giao dịch “thay mặt” để mạo danh người dùng (Nghiêm trọng)
Lỗ hổng này cho phép các chữ ký được sử dụng lại trong các giao dịch "thay mặt", cho phép kẻ tấn công mạo danh người dùng. Vì các chữ ký chỉ bao gồm dữ liệu thô mà không có siêu dữ liệu bổ sung như nonce hoặc định danh tin nhắn, một kẻ tấn công có thể sử dụng lại chữ ký từ một tin nhắn cho tin nhắn khác để buộc xóa các node trong nhóm. Ngoài ra, kẻ tấn công có thể tái sử dụng chữ ký cho cùng một loại tin nhắn, cho phép một node tham gia lại nhóm nhiều lần bằng cách sử dụng cùng một chữ ký.
Giải pháp cho vấn đề này tương tự như giải pháp được triển khai trong NYM-MIX-VEST-CONTRACT-4.
NYM-MIX-VEST-CONTRACT-6: Tạo khóa cho các cặp (chủ sở hữu, đại lý) có thể dẫn đến va chạm (Nghiêm trọng)
Lỗ hổng này cho phép hai cặp địa chỉ (chủ sở hữu, proxy) khác nhau tạo ra cùng một kết quả XOR trong hàm generate_owner_storage_subkey, điều này có thể dẫn đến xung đột khóa và ghi đè dữ liệu.
Giải pháp giới hạn proxy hợp pháp với địa chỉ hợp đồng vesting duy nhất, được áp dụng trong NYM-MIX-VEST-CONTRACT-4, cũng áp dụng được đối với lỗ hổng này. Bằng cách đảm bảo rằng thao tác XOR luôn được thực hiện với một chuỗi không đổi, thay đổi này thực sự loại bỏ nguy cơ xung đột.
NYM-MIX-VEST-CONTRACT-7: track_delegation có thể ghi đè ủy quyền hiện có nếu có nhiều hơn một ủy quyền được xử lý trong cùng một khối (Nghiêm trọng)
Sự cố này sẽ cho phép xảy ra xung đột khóa nếu nhiều ủy quyền được thực hiện trong cùng một khối, có khả năng khiến hàm save_delegation ghi đè lên ủy quyền hiện có, dẫn đến mất ủy quyền trước đó.
Để giải quyết sự cố này, chúng tôi đã thay đổi logic của hàm save_delegation để trước tiên đọc số lượng ủy quyền hiện có trước khi lưu số lượng mới. Nếu đã có ủy quyền cho cùng một khóa, chúng tôi sẽ truy xuất số lượng hiện tại, thêm ủy quyền mới, sau đó lưu tổng số đã cập nhật, đảm bảo không có ủy quyền hiện có nào bị ghi đè.
NYM-MIX-VEST-CONTRACT-8: Chủ sở hữu trái phiếu không thể thực hiện các thao tác nếu trái phiếu được tạo ra “thay mặt” bởi proxy (Mức độ cao)
Sự cố này sẽ ngăn chặn chủ sở hữu trái phiếu thực hiện bất kỳ thao tác nào trên trái phiếu của họ nếu trái phiếu được tạo ra trên hình thức "thay mặt" và giao dịch hiện tại do chủ sở hữu khởi tạo thay vì proxy. Vì proxy có thể bị xâm phạm hoặc bị mất, và không có cách nào để chủ sở hữu thay đổi nó, điều này có thể dẫn đến việc chủ sở hữu mất kiểm soát đối với trái phiếu của họ.
Chúng tôi không coi đây là sự cố, vì đây là hành vi cố ý theo thiết kế. Khi một mixnode được gắn kết (hoặc các ủy quyền được thực hiện) thông qua hợp đồng vesting, tất cả các tương tác tiếp theo với hợp đồng hoặc ủy quyền sẽ chỉ diễn ra qua hợp đồng vesting.
Cập nhật: Kể từ năm 2024, hợp đồng vesting đã bị xóa.
NYM-MIX-VEST-CONTRACT-9: Việc thực thi các thông báo LeaveFamily và LeaveFamilyOnBehalf có thể không thành công nếu một lượng lớn các mixnode là thành viên của một nhóm (Mức độ cao)
Sự cố này sẽ dẫn đến lỗi của các thông báo LeaveFamily và LeaveFamilyOnBehalf do cạn kiệt gas khi duyệt qua một số lượng lớn các node thành viên trong nhóm trong bản đồ THÀNH VIÊN. Điều này sẽ ngăn chặn các mixnode rời khỏi nhóm, kết quả là khóa chúng trong nhóm hiện tại.
Giải pháp: Giải pháp bao gồm làm lại logic để truy cập trực tiếp vào bản đồ THÀNH VIÊN và xác minh tư cách thành viên của một mixnode. Thay đổi này loại bỏ nhu cầu lặp lại, có thể dẫn đến lỗi hết gas và đảm bảo rằng các thành viên có thể rời khỏi một nhóm thành công, ngay cả khi có nhiều thành viên trong nhóm.
Cập nhật: Kể từ năm 2024, các nhóm node đã bị xóa.
Tóm lại
Chúng tôi muốn cảm ơn đội ngũ Oak Security vì chuyên môn và sự tận tâm của họ trong suốt quá trình kiểm toán này. Chúng tôi cũng đánh giá cao sự hợp tác và tính chuyên nghiệp được thể hiện trong cả giai đoạn lập kế hoạch và thực hiện kiểm toán. Cam kết của chúng tôi đối với bảo mật vẫn là ưu tiên hàng đầu, và chúng tôi mong muốn tiếp tục hợp tác với các chuyên gia để duy trì các tiêu chuẩn cao nhất cho hệ sinh thái.