DDos
VIP Members
-
22/10/2013
-
524
-
2.191 bài viết
Khai thác lỗ hổng chèn lệnh CVE-2022-33891 trong Apache Spark
Apache Spark là một framework xử lý dữ liệu mã nguồn mở trên quy mô lớn. Spark cung cấp rất nhiều API cho Scala, Java, Python, và R, được áp dụng rất nhiều trong big data và machine learning, vốn đòi sức mạnh tính toán để làm việc trên các kho dữ liệu lớn.
Vào ngày 18 tháng 7, một lỗ hổng chèn lệnh nghiêm trọng được phát hiện trong framework này. Có mã định danh CVE-2022-33891 (CVSS:8.8), lỗ hổng cho phép hacker thực thi các lệnh shell tùy ý. Lỗi ảnh hưởng đến các phiên bản Apache Spark 3.0.3 hoặc cũ hơn, phiên bản 3.1.1 tới 3.1.2, và phiên bản 3.2.0 tới 3.2.1.Trong bài viết này, mình sẽ hướng dẫn bạn cách khai thác lỗ hổng này.
Trong đó tồn tại một bộ lọc xác thực có chức năng kiểm tra xem người dùng có quyền truy cập để xem hoặc sửa đổi ứng dụng hay không. Nếu ACL được bật, một đường dẫn mã trong HttpSecurityFilter có thể cho phép hacker thực hiện hành vi mạo danh bằng cách cung cấp tên người dùng tùy ý. Với cấu hình spark.acls.enable true sẽ kích hoạt lỗi chèn lệnh tùy ý. Đoạn mã này có nhiệm vụ kiểm tra quyền của người dùng bằng cách sử dụng lệnh bash shell kết hợp với lệnh unix id. Đoạn mã tồn tại lỗi:
Hacker có thể khai thác bằng cách thiết lập một lệnh bash shell trong tham số ?doAs
Các lệnh của được xử lý thông qua tham số ?doAs và không có gì được phản ánh lại trên trang trong quá trình thực thi lệnh, vì vậy đây là một lỗi blind OS injection.
Bước 2: Thiết lập các tham số phù hợp
Bước 3: Tiến hành khai thác và giành quyền thực thi các lệnh shell
Vào ngày 18 tháng 7, một lỗ hổng chèn lệnh nghiêm trọng được phát hiện trong framework này. Có mã định danh CVE-2022-33891 (CVSS:8.8), lỗ hổng cho phép hacker thực thi các lệnh shell tùy ý. Lỗi ảnh hưởng đến các phiên bản Apache Spark 3.0.3 hoặc cũ hơn, phiên bản 3.1.1 tới 3.1.2, và phiên bản 3.2.0 tới 3.2.1.Trong bài viết này, mình sẽ hướng dẫn bạn cách khai thác lỗ hổng này.
Phân tích lỗ hổng
Apache Spark UI cho phép kích hoạt tính năng danh sách điều khiển truy cập (ACL) thông qua tùy chọn cấu hình spark.acls.enable.Trong đó tồn tại một bộ lọc xác thực có chức năng kiểm tra xem người dùng có quyền truy cập để xem hoặc sửa đổi ứng dụng hay không. Nếu ACL được bật, một đường dẫn mã trong HttpSecurityFilter có thể cho phép hacker thực hiện hành vi mạo danh bằng cách cung cấp tên người dùng tùy ý. Với cấu hình spark.acls.enable true sẽ kích hoạt lỗi chèn lệnh tùy ý. Đoạn mã này có nhiệm vụ kiểm tra quyền của người dùng bằng cách sử dụng lệnh bash shell kết hợp với lệnh unix id. Đoạn mã tồn tại lỗi:
Mã:
private def getUnixGroups(username: String): Set[String] = {
val cmdSeq = Seq("bash", "-c", "id -Gn " + username)
// we need to get rid of the trailing "\n" from the result of command execution
Utils.executeAndGetOutput(cmdSeq).stripLineEnd.split(" ").toSet
Utils.executeAndGetOutput(idPath :: "-Gn" :: username :: Nil).stripLineEnd.split(" ").toSet
}
}
Hacker có thể khai thác bằng cách thiết lập một lệnh bash shell trong tham số ?doAs
Mã:
http://<spark-ip>:8080/?doAs=`[command injection here]`
Các lệnh của được xử lý thông qua tham số ?doAs và không có gì được phản ánh lại trên trang trong quá trình thực thi lệnh, vì vậy đây là một lỗi blind OS injection.
Khai thác lỗ hổng
Bước 1: Khởi chạy metasploit và sử dụng module: exploit/linux/http/apache_spark_rce_cve_2022_33891Bước 2: Thiết lập các tham số phù hợp
Bước 3: Tiến hành khai thác và giành quyền thực thi các lệnh shell
Cách khắc phục
Do tính chất nguy hiểm và cách thức khai thác dễ dàng của lỗ hổng, người dùng nên cập nhật Apache Spark lên phiên bản 3.1.3, 3.2.2, hoặc 3.3.0 sớm nhất có thể để tránh bị khai thác.
Chỉnh sửa lần cuối bởi người điều hành: