Khai thác lỗ hổng chèn lệnh CVE-2022-33891 trong Apache Spark

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.

audit_Pentest.png

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.

1.jpg

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_33891

2.jpg

Bước 2: Thiết lập các tham số phù hợp

3.jpg

Bước 3: Tiến hành khai thác và giành quyền thực thi các lệnh shell

4.jpg

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:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
apache spark cve-2022-33891
Bên trên