Derod memory consumption bug lead to DoS
Dero là một blockchain có công nghệ rất tốt, nhiều tiềm năng mà tôi đã có bài viết review . Trong quá trình tìm hiểu codebase của nó, tôi đã tìm ra một bug trong handshake protocol của derod - node của dero network. Lỗi này cho phép bất cứ attacker nào gửi một lượng lớn dữ liệu dẫn đến derod bị bội thực RAM mà chết :) Sau đây là quá trình tôi tìm ra bug, kèm theo mã khai thác. Package p2p phụ trách giao tiếp giữa các node với nhau. Package này xử lý một giao thức custom chạy trên tcp. Trong đó, bước đầu tiên là Handshake. Hãy cùng xem file handshake.go và xem nó handle handshake như thế nào. Handshake có nhiều trường, nhưng có một trường đáng chú ý là PeerList. Trường này chứa danh sách là địa chỉ ip:port của các peers đang kết nối đến node hiện tại. Mục đích của trường này là broadcast địa chỉ của các peers ra network. Nhờ đó mà network có thể hoạt động mà không cần một centralized server nào. Tuy nhiên, trong hàm Handle_Handshake lại không có điều kiện nào kiểm tra độ dài của trườn