Tràn bộ đệm trong Toxcore bị khai thác bằng cách gửi gói UDP

Toxcore, triển khai tham chiếu của giao thức nhắn tin Tox P2P, có một lỗ hổng (CVE-2021-44847) có khả năng kích hoạt việc thực thi mã khi xử lý gói UDP được chế tạo đặc biệt. Tất cả người dùng các ứng dụng dựa trên Toxcore không bị vô hiệu hóa truyền tải UDP đều bị ảnh hưởng bởi lỗ hổng này. Để tấn công, chỉ cần gửi gói UDP biết địa chỉ IP, cổng mạng và khóa DHT công khai của nạn nhân là đủ (thông tin này được cung cấp công khai trong DHT, tức là cuộc tấn công có thể được thực hiện trên bất kỳ người dùng hoặc nút DHT nào).

Sự cố này đã xuất hiện trong các bản phát hành toxcore từ 0.1.9 đến 0.2.12 và đã được khắc phục trong phiên bản 0.2.13. Trong số các ứng dụng khách, cho đến nay chỉ có dự án qTox đã phát hành bản cập nhật giúp loại bỏ lỗ hổng này. Là một giải pháp bảo mật, bạn có thể tắt UDP trong khi vẫn duy trì hỗ trợ TCP.

Lỗ hổng này xảy ra do tràn bộ đệm trong hàm hand_request(), xảy ra do tính toán sai kích thước dữ liệu trong gói mạng. Cụ thể, độ dài của dữ liệu được mã hóa được xác định trong macro CRYPTO_SIZE, được xác định là "1 + CRYPTO_PUBLIC_KEY_SIZE * 2 + CRYPTO_NONCE_SIZE", sau đó được sử dụng trong thao tác trừ "length - CRYPTO_SIZE". Do trong macro không có dấu ngoặc đơn nên thay vì trừ tổng tất cả các giá trị thì nó trừ 1 và cộng các phần còn lại. Ví dụ: thay vì "độ dài - (1 + 32 * 2 + 24)", kích thước bộ đệm được tính là "độ dài - 1 + 32 * 2 + 24", dẫn đến việc ghi đè dữ liệu trên ngăn xếp vượt quá ranh giới bộ đệm.

Nguồn: opennet.ru

Thêm một lời nhận xét