Lỗ hổng có thể khai thác từ xa trong máy chủ thư qmail

Các nhà nghiên cứu bảo mật từ Qualys cho thấy cơ hội khai thác lỗ hổng trong máy chủ thư qmail, nổi danh trở lại năm 2005 (CVE-2005-1513), nhưng vẫn chưa được vá vì tác giả của qmail lập luận rằng việc tạo ra một khai thác hoạt động có thể được sử dụng để tấn công các hệ thống ở cấu hình mặc định là không thực tế. Qualys đã có thể chuẩn bị một cách khai thác để bác bỏ giả định này và cho phép một kẻ bắt đầu thực thi mã từ xa trên máy chủ bằng cách gửi một tin nhắn được thiết kế đặc biệt.

Sự cố xảy ra do tràn số nguyên trong hàm stralloc_readyplus(), điều này có thể xảy ra khi xử lý một thư rất lớn. Hoạt động yêu cầu hệ thống 64 bit với bộ nhớ ảo hơn 4GB. Khi lỗ hổng này được phân tích lần đầu vào năm 2005, Daniel J. Bernstein lập luận rằng giả định trong mã rằng kích thước của mảng được phân bổ luôn nằm trong giá trị 32 bit là dựa trên thực tế là không ai cung cấp hàng gigabyte bộ nhớ cho mỗi quy trình. Trong 15 năm qua, hệ thống 64 bit trên máy chủ đã thay thế hệ thống 32 bit và lượng bộ nhớ được cung cấp cũng như băng thông mạng đã tăng lên đáng kể.

Những người bảo trì gói qmail đã tính đến ghi chú của Bernstein và giới hạn bộ nhớ khả dụng khi bắt đầu quá trình qmail-smtpd (ví dụ: trong Debian 10, giới hạn được đặt thành 7 MB). Nhưng các kỹ sư từ Qualys nhận thấy rằng điều này là chưa đủ và ngoài qmail-smtpd, một cuộc tấn công từ xa có thể được thực hiện trên quy trình qmail-local, quy trình này vẫn không bị hạn chế trong tất cả các gói đã thử nghiệm. Bằng chứng là một nguyên mẫu khai thác đã được chuẩn bị phù hợp để tấn công gói Debian bằng qmail trong cấu hình mặc định.
Để tổ chức thực thi mã từ xa trong một cuộc tấn công, máy chủ cần có 4GB dung lượng ổ đĩa trống và 8GB RAM.
Việc khai thác cho phép bạn chạy bất kỳ lệnh shell nào với quyền của bất kỳ người dùng nào trong hệ thống, ngoại trừ người dùng root và hệ thống không có thư mục con riêng trong thư mục “/home” (quy trình qmail-local được khởi chạy với các quyền của người dùng địa phương mà việc giao hàng được thực hiện).

Cuộc tấn công được thực hiện
thông qua việc gửi một thư rất lớn, bao gồm một số dòng tiêu đề, có dung lượng khoảng 4GB và 576 MB. Việc xử lý chuỗi như vậy trong qmail-local dẫn đến tràn số nguyên khi cố gắng gửi thư đến người dùng cục bộ. Tràn số nguyên sau đó sẽ dẫn đến tràn bộ đệm khi sao chép dữ liệu và có khả năng ghi đè các trang bộ nhớ bằng mã libc. Bằng cách thao tác bố cục của dữ liệu được truyền, cũng có thể viết lại địa chỉ của hàm “open()”, thay thế bằng địa chỉ của hàm “system()”.

Tiếp theo, trong quá trình gọi qmesearch() trong qmail-local, file “.qmail-extension” được mở thông qua hàm open(), dẫn đến việc thực thi hàm thực tế
system(".qmail-extension"). Nhưng vì phần “tiện ích mở rộng” của tệp được tạo dựa trên địa chỉ của người nhận (ví dụ: “localuser-extension@localdomain”) nên kẻ tấn công có thể sắp xếp để gửi lệnh để chạy bằng cách chỉ định người dùng “localuser-;command ;@localdomain” là người nhận tin nhắn.

Trong quá trình phân tích mã, hai lỗ hổng cũng được xác định trong bản vá xác minh qmail bổ sung, một phần của gói dành cho Debian. Lỗ hổng đầu tiên (CVE-2020-3811) cho phép bạn bỏ qua việc xác minh địa chỉ email và tùy chọn thứ hai (CVE-2020-3812) dẫn đến rò rỉ thông tin cục bộ. Đặc biệt, lỗ hổng đầu tiên cho phép bạn bỏ qua việc xác minh tính chính xác của địa chỉ được sử dụng trong quá trình khai thác để gửi lệnh (xác minh không hoạt động đối với các địa chỉ không có miền, chẳng hạn như “localuser-;command;”). Lỗ hổng thứ hai có thể được sử dụng để kiểm tra sự hiện diện của các tệp và thư mục trên hệ thống, bao gồm cả những tệp chỉ có thể truy cập được bằng root (qmail-verify chạy với quyền root), thông qua lệnh gọi trực tiếp tới trình xử lý cục bộ.

Để giải quyết vấn đề, Bernstein khuyên bạn nên chạy các quy trình qmail với tổng giới hạn về bộ nhớ khả dụng (“softlimit -m12345678”), trong trường hợp đó sự cố sẽ bị chặn. Là một phương pháp bảo vệ thay thế, việc giới hạn kích thước tối đa của thư được xử lý thông qua tệp “control/databytes” cũng được đề cập (theo mặc định, nó không được tạo bằng cài đặt mặc định qmail vẫn dễ bị tấn công). Ngoài ra, "control/databytes" không bảo vệ khỏi các cuộc tấn công cục bộ từ người dùng hệ thống, vì giới hạn này chỉ được qmail-smtpd tính đến.

Sự cố ảnh hưởng đến gói netqmail, được bao gồm trong kho Debian. Một bộ bản vá đã được chuẩn bị cho gói này, loại bỏ cả các lỗ hổng cũ từ năm 2005 (bằng cách thêm giới hạn bộ nhớ cứng vào mã hàm alloc()) và các vấn đề mới trong qmail-verify. Riêng biệt chuẩn bị phiên bản cập nhật của bản vá xác minh qmail. Nhà phát triển chi nhánh notqmail đã chuẩn bị các bản vá của riêng họ để chặn các vấn đề cũ, đồng thời cũng bắt đầu làm việc để loại bỏ tất cả các lỗi tràn số nguyên có thể xảy ra trong mã.

Nguồn: opennet.ru

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