Lỗ hổng nghiêm trọng của máy chủ Jenkins có thể làm rò rỉ nhiều thông tin nhạy cảm

703
01-09-2020
Lỗ hổng nghiêm trọng của máy chủ Jenkins có thể làm rò rỉ nhiều thông tin nhạy cảm

Bizfly Cloud chia sẻ phần mềm máy chủ tự động mã nguồn mở Jenkins đã công bố một bản hướng dẫn bảo mật để vá một lỗ hổng nghiêm trọng trên máy chủ web Jetty. Nếu bị khai thác, lỗ hổng này có thể dẫn đến lỗi tràn bộ nhớ và làm rò rỉ thông tin mật.

Lỗ hổng đạt mức điểm 9,4 trên hệ thống đánh giá lỗ hổng CVSS (CVE-2019-17638) và ảnh hưởng tới các phiên bản Eclipse Jetty từ 9.4.27.v20200227 cho đến 9.4.29.v20200521. Eclipse Jetty là một công cụ tích hợp nhiều tính năng, có nhiệm vụ cung cấp máy chủ Java HTTP và web container để sử dụng trong các framework phần mềm.

"Jenkins đóng gói Winstone-Jetty, một lớp wrapper xung quanh Jetty, và hoạt động như máy chủ HTTP và servlet khi bắt đầu sử dụng java-jar jenkins.war. Đây là cách Jenkins thường chạy khi sử dụng các trình cài đặt hay gói tin (package), nhưng không phải cách nó chạy khi sử dụng các servlet container như Tomcat," bản hướng dẫn nêu rõ.

"Lỗ hổng này có thể cho phép kẻ tấn công không xác thực nhận được tiêu đề phản hồi HTTP từ một request của người dùng, và truy cập vào dữ liệu nhạy cảm của họ."

Có vẻ như lỗ hổng ảnh hưởng tới Jetty và Jenkins Core đã bắt đầu xuất hiện từ phiên bản Jetty 9.4.27. Được biết phiên bản này đã bổ sung một cơ chế để xử lý các tiêu đề phản hồi HTTP và ngăn chặn lỗi tràn bộ nhớ đệm.

"Đây là một lỗi tràn bộ nhớ đệm, chúng tôi đã cho phát hành bộ đệm tiêu đề (header buffer), nhưng vẫn chưa khắc phục được trường rỗng null," người đứng đầu dự án Jetty, Greg Wilkins cho biết.

Để giải thích cho sự cố này có thể hiểu như sau, Jetty đã tung ra một ngoại lệ (exception) để tạo lỗi HTTP 431. Lỗi này sẽ khiến tiêu đề phản hồi HTTP phát hành vào vùng đệm hai lần, và lần lượt gây ra lỗi tràn bộ nhớ và làm rò rỉ thông tin.

Do tiêu đề phản hồi được phát hành hai lần nên 2 thread sẽ nhận được cùng một buffer (bộ đệm) trong cùng 1 thời điểm từ vùng đệm. Điều này sẽ khiến khi một request được gửi đến thì một trong 2 thread có thể truy cập response của thread còn lại, và cho phép kẻ tấn công truy cập vào ID phiên (session ID), thông tin xác thực và nhiều thông tin nhạy cảm khác của người dùng.

Nói cách khác, "trong khi thread1 chuẩn bị sử dụng ByteBuffer để ghi dữ liệu response1, thì thread2 điền vào ByteBuffer với dữ liệu response2. Thread1 sau đó lại tiếp tục ghi vào buffer hiện chứa dữ liệu response2. Điều này dẫn đến việc client1, người đưa ra request1 và đang chờ response1, thì lại nhận được response2 mà có thể có chứa dữ liệu nhạy cảm của client2."

Lỗi bộ nhớ này đã khiến các máy khách có thể thay đổi giữa các phiên. Nó cho phép họ có quyền truy cập vào nhiều tài khoản, vì cookie xác thực từ phản hồi của một người dùng được gửi đến người dùng khác, từ đó cho phép người dùng A chuyển sang phiên của người dùng B.

Sau khi những vấn đề bảo mật được tiết lộ, lỗ hổng đã được giải quyết trong phiên bản Jetty 9.4.30.v20200611, được phát hành vào tháng trước. Còn Jenkins, phần mềm gói Jetty thông qua giao diện command-line Winstone cũng đã vá lỗ hổng trên tiện ích của nó bằng phiên bản Jenkins 2.243 và Jenkins LTS 2.235.5 vừa được phát hành vào hôm qua.

Các chuyên gia bảo mật khuyến nghị người dùng Jenkins nên nhanh chóng cập nhật phần mềm lên phiên bản mới nhất để giảm thiểu những rủi ro có thể xảy ra.

Tham khảo Thehackernews.com

>> Có thể bạn quan tâm: Google gỡ bỏ 295 tiện ích mở rộng trên Chrome store do có chứa mã độc gây nguy hại tới người dùng

SHARE