作者:且聽安全
原文鏈接:https://mp.weixin.qq.com/s/3EWju-IdsTfK7COKOK-c-w
漏洞信息
JIRA 存在 Seraph 組件認證繞過漏洞,影響范圍廣泛:

根據官方描述,大批量的默認和第三方插件受到影響:

關于Seraph Filter
對于認證繞過,猜測問題可能出現在 Filter 過濾上,JIRA 內部封裝了數量較為龐大的 Filter 列表:

由于漏洞出現在Seraph模塊,挨個查看 Filter 類,發現JiraSecurityFilter引用了com.atlassian.seraph包:

在doFilter中調用super.doFilter,即SecurityFilter.doFilter:

Security.doFilter根據客戶端請求用戶權限進行檢查,進一步判定是否需要認證,needAuth變量很容易引起注意:

通過動態調試可知有 3 種服務進行檢查,即JiraPathService、WebworkService和JiraSeraphSecurityService:

JiraPathService用于處理/secure/admin/請求,需要管理員訪問:

WebworkService從actions.xml文件webwork中讀取權限定義:

其getRequiredRoles函數代碼如下:

最后是JiraSeraphSecurityService,從插件Atlassian-plugin.xml文件中讀取webwork接口權限定義:

動態調試可知經過多次getRequiredRoles函數執行,最后調用了WebworkPluginSecurityServiceHelper.getRequiredRoles函數,而且這個函數代碼與WebworkService.getRequiredRoles相同:

該函數從request請求中提取 URI ,搜索最后一個/所在的位置,提取接口名稱得到targetURL。如果 URL 輸入為/secure/PerformOAuth2Authorization.jspa,那么targetURL為PerformOAuth2Authorization.jspa:

在actionMapper中搜索對應的Action名稱,這里得到為PerformOAuth2Authorization:

根據rolesMap得到接口的權限為admin,接口需要管理員登錄:

介紹完功能代碼,最后還要重點 Mark 一下,getRequiredRoles中獲取 URL 的方式為getRequestURI:

*.jspa的處理
查看atlassian-jira/WEB-INF/web.xml文件Servlet定義,*.jspa由com.atlassian.jira.web.dispatcher.JiraWebworkActionDispatcher處理:

JiraWebworkActionDispatcher.service函數從請求中獲取Action名稱:

使用/和.jspa切割字符串獲取ActionName,如果 URL 輸入/secure/PerformOAuth2Authorization.jspa,那么 Action 為PerformOAuth2Authorization,注意到使用getServletPath函數:

在executeAction函數中進行Action檢查:

Action工廠列表如下:

再一次 Mark ,GetActionName中使用了getServletPath函數。
Seraph Filter認證繞過
通過前邊的分析,我們能夠得知Seraph組件在 Filter 中使用getRequestURI提取 URL ,而 Servlet 中使用getServletPath,有經驗的小伙伴應該很快意識到存在一個典型的認證繞過場景。
簡單的來說就是如果 URL 中包含;,getServletURI結果會將分號保留,但getServletPath會自動將分號刪除。以發送/secure/PerformOAuth2Authorization.jspa;為例, Seraph 組件 Filter 中調用顯然找不到PerformOAuth2Authorization.jspa;對應的 Action ,從而進入 Servlet 處理,相當于完成了 Filter 層面的認證繞過:

getActionName獲取的結果示例如下:

利用WebWork繞過插件認證
繞過Seraph組件Filter后,可以看到回復報文存在差異,但是還是需要認證:

調試后發現在執行LookupAliasActionFactoryProxy時同樣讀取了PerformOAuth2Authorization權限并進行檢查:

同時其他Factory可能檢查Xsrf、checkWebSudoStatus等要素:

直接查找官方文檔,在編寫插件時可以使用webwork1元素添加roles-required屬性:

Atlassian 插件通常為 jar 或者 ocr 格式,為了驗證繞過,根據官方發布的插件影響列表下載 Insight 8.9.10 版本,找到一個webwork1元素:
成功繞過后臺限制:

受影響的其他頁面
JIRA 默認組件中一些可能繞過的功能,(尚未調試分析每個接口功能):




還有很多其他 URL ,需要繞過 XSRF:

部分接口可通過請求直接返回錯誤棧:

修復方式
典型的插件修補過程:

本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1896/
暫無評論