漏洞簡介
Apache Spark UI 提供了通過配置選項 spark.acls.enable, 使用身份驗證過濾器,這檢查用戶是否有訪問權限來查看或修改應用,如果啟用了 ACL,則 HttpSecurityFilter 中的代碼路徑可以允許某人通過提供任意用戶名來執行模擬,然后惡意用戶可能能夠訪問權限檢查功能,最終將根據他們的輸入構建一個 Unix shell 命令,并且執行它,這將導致任意 shell 命令執行,
影響版本:Apache Spark 版本 3.0.3 及更早版本,版本 3.11 至 3.1.2 ,以及版本 3.2.0 至 3.2.1
漏洞復現
下載 Apache Spark 3.2.1 https://archive.apache.org/dist/spark/
https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop2.7.tgz
根據描述是需要開啟 acl 功能才可以觸發漏洞
開啟 ACL 可以通過設定啟動時的引數 ./spark-shell --conf spark.acls.enable=true 或者在 conf/spark-defaults.conf 中添加 spark.acls.enable true
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
?
構造 poc
http://localhost:4040/?doAs=`[command injection here]`
漏洞分析
為了方便除錯在啟動腳本中添加上除錯引數
export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
輸入錯誤的執行陳述句時的報錯資訊
?
漏洞的觸發大概就在
org.apache.spark.security.ShellBasedGroupsMappingProvider.getUnixGroups
漏洞的呼叫堆疊應該為
org.apache.spark.ui.HttpSecurityFilter.doFilter(HttpSecurityFilter.scala:71) org.apache.spark.SecurityManager.checkUIViewPermissions(SecurityManager.scala:238) org.apache.spark.SecurityManager.isUserInACL(SecurityManager.scala:381) org.apache.spark.util.Utils$.getCurrentUserGroups(Utils.scala:2523) org.apache.spark.security.ShellBasedGroupsMappingProvider.getGroups(ShellBasedGroupsMappingProvider.scala:34) org.apache.spark.security.ShellBasedGroupsMappingProvider.getUnixGroups(ShellBasedGroupsMappingProvider.scala:43)
加上斷點進行除錯分析
org.apache.spark.ui.HttpSecurityFilter#doFilter
獲取到引數 doAS 賦值為 effectiveUser 傳到函式 checkUIViewPermissions
org.apache.spark.SecurityManager#checkUIViewPermissions
org.apache.spark.SecurityManager#isUserInACL
org.apache.spark.util.Utils$#getCurrentUserGroups
org.apache.spark.security.ShellBasedGroupsMappingProvider#getGroups
org.apache.spark.security.ShellBasedGroupsMappingProvider#getUnixGroups
通過反引號將想要執行的命令包含起來,拼接到原本的命令執行陳述句中
org.apache.spark.util.Utils$#executeAndGetOutput
org.apache.spark.util.Utils$#executeCommand
漏洞補丁
新版本的修復 洗掉了 ShellBasedGroupsMappingProvider 中的 bash 的呼叫,最后執行命令的陳述句應該變為/usr/bin/id -Gn + 傳入引數
更多靶場實驗練習、網安學習資料,請點擊這里>>
合天智匯:合天網路靶場、網安實戰虛擬環境
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/517606.html
標籤:其他
