javascript
【web安全】Spring Data Commons 1.13.10 SpEL漏洞分析
一、簡介
Spring Data是一個用于簡化數據庫訪問,并支持云服務的開源框架,Spring Data Commons是Spring Data下所有子項目共享的基礎框架。Spring Data Commons 在2.0.5及以前版本中,存在一處SpEL表達式注入漏洞,攻擊者可注入惡意SpEL表達式以執行任意命令,漏洞編號為CVE-2018-1273。
? 該漏洞發生在屬性自動綁定階段,當用戶在項目中利用了Spring Data的相關Web特性對用戶的輸入參數進行自動匹配的時候,會將用戶提交的Form表單的key值作為SpEL的執行內容,利用該特性,發送Payload將可能導致遠程代碼執行。
二、影響版本
- Spring Data Commons 1.13 to 1.13.10 (Ingalls SR10)
- Spring Data REST 2.6 to 2.6.10 (Ingalls SR10)
- Spring Data Commons 2.0 to 2.0.5 (Kay SR5)
- Spring Data REST 3.0 to 3.0.5 (Kay SR5)
- Older unsupported versions are also affected
三、環境搭建
所使用Spring Data Commons 測試版本為1.13.10
搭建效果如下圖:
四、漏洞復現
【→所有資源關注我,私信回復“資料”獲取←】
1、網絡安全學習路線
2、電子書籍(白帽子)
3、安全大廠內部視頻
4、100份src文檔
5、常見安全面試題
6、ctf大賽經典題目解析
7、全套工具包
8、應急響應筆記
example:name[T(java.lang.Runtime).getRuntime().exec(“calc”)]
漏洞復現效果,如下圖所示:
五、漏洞原理
? 尋找漏洞代碼段,定位到spring-data-commons-1.13.10.RELEASE.jar!org.springframework.data.web.ProxyingHandlerMethodArgumentResolver.class#createAttribute(),程序錯誤將用戶輸入傳遞至MapDataBinder.bind方法。
惡意數據帶入,效果如下圖所示:
當用戶使用[]嵌套屬性語法,程序將[]中SPEL表達式解析并得到屬性(特性),于是攻擊者可注入惡意SpEL表達式以執行任意命令。
? 特性:通過一定的規則對及格進行篩選,構造出另一個集合 語法:“(list|map).? [選擇表達式]” 選擇表達式結果必須是boolean類型,如果true則選擇的元素將添加到新集合中,false將不添加到新集合中。
解析SPEL表達式,效果如下圖所示:
六、POC構造
? 在實戰中需要Fuzz字段,找尋自動屬性字段。實驗中Controller代碼Account.name 已使用Spring默認構造器屬性String getName()。故選取name為注入參數。
使用[]嵌套屬性語法,程序將[]中SPEL表達式解析并得到屬性,故POC 嘗試 name[T(java.util.Arrays).toString(T(java.nio.file.Files).list(T(java.nio.file.Paths).get(‘d:\i4Tools7’)).toArray())]
? 但Response頁面報錯并無回顯點,故此類文件讀取POC無法驗證漏洞存在,無法驗證代碼執行成功。
? 嘗試使用DNSLOG 驗證執行成功,故POC 調整為,如burp圖中所示。
驗證DNSLOG出網,效果如下圖所示:
七、修復方法
? 將pom.xml中的org.springframework.boot設置為1.13.11版本或更新版本。
補丁將StandardEvaluationContext替代為SimpleEvaluationContext。
因SimpleEvaluationContext不包括 Java 類型引用,構造函數和 bean 引用,所以安全性較高。
補丁修復,效果如下圖所示:
八、小結
? 在審計中,可使用關鍵字加快進展,如org.springframework.expression.spel.standard、 expression.getValue()、expression.setValue() 、StandardEvaluationContext。
? SPEL表達式較為靈活,其可以很好地適配業務中“經常變化”的部分,這可以是“業務規則”,也可以是“不同的數據處理邏輯”,SpEL的T{}表達式靈活具備反射的特點,在Spring環境下無需額外導包較為便捷。常見的SPEL實現資源的注入有如:調用各種資源的情況,包含普通文件、網址、配置文件、系統環境變量、使用預先定義模板的方式獲取或者設置某對象中指定屬性名的屬性值。
? 在項目中運用Spel技術的開發人員編程水平通常較高,也正是這種巧妙運用,使得漏洞較為隱蔽,較難實現一致性修復,需要安全人員付出足夠耐心去尋找查核修復完成情況。
總結
以上是生活随笔為你收集整理的【web安全】Spring Data Commons 1.13.10 SpEL漏洞分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【web安全】Spring boot h
- 下一篇: 【漏洞实战】从信息泄露到内网滲透