作者:且聽安全
原文鏈接: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 種服務進行檢查,即JiraPathServiceWebworkServiceJiraSeraphSecurityService

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

WebworkServiceactions.xml文件webwork中讀取權限定義:

getRequiredRoles函數代碼如下:

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

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

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

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

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

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

*.jspa的處理

查看atlassian-jira/WEB-INF/web.xml文件Servlet定義,*.jspacom.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可能檢查XsrfcheckWebSudoStatus等要素:

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

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

成功繞過后臺限制:

受影響的其他頁面

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

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

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

修復方式

典型的插件修補過程:


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