Lỗ hổng trong Apache Tomcat cho phép thay thế mã JSP và nhận tệp ứng dụng web

Các nhà nghiên cứu từ công ty Chaitin Tech của Trung Quốc đã phát hiện ra sự dễ bị tổn thương (CVE-2020-1938) Trong Apache Tomcat, một triển khai mở của các công nghệ Java Servlet, JavaServer Pages, Java Expression Language và Java WebSocket. Lỗ hổng này được gán tên mã Ghostcat và mức độ nghiêm trọng nghiêm trọng (9.8 CVSS). Sự cố cho phép, trong cấu hình mặc định, bằng cách gửi yêu cầu trên cổng mạng 8009, đọc nội dung của bất kỳ tệp nào từ thư mục ứng dụng web, bao gồm các tệp có cài đặt và mã nguồn ứng dụng.

Lỗ hổng này cũng cho phép nhập các tệp khác vào mã ứng dụng, cho phép thực thi mã trên máy chủ nếu ứng dụng cho phép tải tệp lên máy chủ (ví dụ: kẻ tấn công có thể tải lên tập lệnh JSP được ngụy trang dưới dạng hình ảnh thông qua mẫu tải lên hình ảnh). Cuộc tấn công có thể được thực hiện khi có thể gửi yêu cầu đến một cổng mạng bằng trình xử lý AJP. Theo dữ liệu sơ bộ, trực tuyến tìm hơn 1.2 triệu máy chủ chấp nhận yêu cầu thông qua giao thức AJP.

Lỗ hổng tồn tại trong giao thức AJP và không được gọi sai sót trong quá trình triển khai. Ngoài việc chấp nhận kết nối qua HTTP (cổng 8080), Apache Tomcat theo mặc định cho phép truy cập vào ứng dụng web thông qua giao thức AJP (Giao thức Apache Jserv, cổng 8009), là một dạng tương tự nhị phân của HTTP được tối ưu hóa để có hiệu suất cao hơn, thường được sử dụng khi tạo một cụm máy chủ Tomcat hoặc để tăng tốc độ tương tác với Tomcat trên proxy ngược hoặc bộ cân bằng tải.

AJP cung cấp một chức năng tiêu chuẩn để truy cập các tệp trên máy chủ, có thể được sử dụng, bao gồm cả việc lấy các tệp không bị tiết lộ. AJP được cho là chỉ có thể truy cập được đối với các máy chủ đáng tin cậy, nhưng trên thực tế, cấu hình mặc định của Tomcat đã chạy trình xử lý trên tất cả các giao diện mạng và chấp nhận các yêu cầu mà không cần xác thực. Có thể truy cập vào bất kỳ tệp ứng dụng web nào, bao gồm nội dung của WEB-INF, META-INF và bất kỳ thư mục nào khác được cung cấp thông qua lệnh gọi tới ServletContext.getResourceAsStream(). AJP cũng cho phép bạn sử dụng bất kỳ tệp nào trong các thư mục mà ứng dụng web có thể truy cập dưới dạng tập lệnh JSP.

Vấn đề đã xuất hiện kể từ khi nhánh Tomcat 13.x được phát hành cách đây 6 năm. Ngoài vấn đề Tomcat ảnh hưởng và các sản phẩm sử dụng nó, chẳng hạn như Red Hat JBoss Web Server (JWS), Nền tảng ứng dụng doanh nghiệp JBoss (EAP), cũng như các ứng dụng web độc lập sử dụng Khởi động mùa xuân. Lỗ hổng tương tự (CVE-2020-1745) hiện nay trong máy chủ web Lượng sóng đánh vào bờ, được sử dụng trong máy chủ ứng dụng Wildfly. Trong JBoss và Wildfly, AJP chỉ được bật theo mặc định trong các cấu hình độc lập-full-ha.xml, độc lập-ha.xml và ha/full-ha trong miền.xml. Trong Spring Boot, hỗ trợ AJP bị tắt theo mặc định. Hiện tại, các nhóm khác nhau đã chuẩn bị hơn chục ví dụ khai thác (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

Lỗ hổng đã được sửa trong bản phát hành Tomcat 9.0.31, 8.5.51 и 7.0.100 (bảo trì nhánh 6.x kết thúc). Bạn có thể theo dõi tính khả dụng của các bản cập nhật trong bộ công cụ phân phối trên các trang này: Debian, Ubuntu, RHEL, Fedora, SUSE, FreeBSD. Để khắc phục, bạn có thể tắt dịch vụ Tomcat AJP Connector (liên kết ổ cắm nghe với localhost hoặc nhận xét dòng có Connector port = "8009") nếu không cần thiết, hoặc thiết lập quyền truy cập được xác thực bằng cách sử dụng thuộc tính “bí mật” và “địa chỉ”, nếu dịch vụ được sử dụng để tương tác với các máy chủ và proxy khác dựa trên mod_jk và mod_proxy_ajp (mod_cluster không hỗ trợ xác thực).

Nguồn: opennet.ru

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