您好,登錄后才能下訂單哦!
如何進行Nuxeo認證繞過和RCE漏洞分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Nuxeo Platform是一款跨平臺開源的企業級內容管理系統(CMS)。
nuxeo-jsf-ui組件處理facelet模板不當,當訪問的facelet模板不存在時,相關的文件名會輸出到錯誤頁面上,而錯誤頁面會當成模板被解析,文件名包含表達式也會被輸出同時被解析執行,從而導致遠程代碼執行漏洞。
在漏洞挖掘過程中發現nuxeo-jsf組件默認在10.2沒有安裝,歷史版本是默認就安裝的。可以通過nuxeoctl mp-install nuxeo-jsf-ui 命令安裝。
Nuxeo Server版本 < 10.3
通過在官網下載Nuxeo 10.2的安裝包在本地安裝,使用默認密碼登陸Administrator/Administrator。
在登陸狀態下訪問test${11*11}.xhtml,可以看到表達式被執行
Nuxeo 是構建在Seam Framework之上的, Seam是由Jboss開發的Web應用程序框架,在前幾年比較流行,但依然有很多應用程序使用了Seam。
當用EL來執行任意系統命令時,Seam內部對EL的解析有一定的防護,用下面的Payload可繞過。
${"".getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("calc",null).toString()}
在不登陸的情況下,是無法訪問facelet模板的,如果需要登陸才能命令執行,漏洞略顯得有點雞肋。發現可以通過
login.jsp/%24%7b%31%31%2a%31%31%7d.xhtml 繞過訪問。
通過查看web.xml配置文件,開發者為*.xhtml資源注冊了名為NuxeoAuthenticationFilter的過濾器和Faces Servlet。憑借經驗認證工作應該在filter處理。
通過調試發現,在NuxeoAuthenticationFilter類中的bypassAuth方法中有相關邏輯
進入到該方法中,unAuthenticatedURLPrefix是一個列表,值為["login.jsp","webservices/"] ,requestPag 只要以 unAuthenticatedURLPrefix 數組中的字符串開頭就不會驗證用戶身份。
根據注冊的Faces Servlet規則”*.html”, login.jsp/test.xhtml 肯定是匹配的,如果要對資源進行訪問控制肯定要先進入到訪問控制邏輯中的,但是訪問控制邏輯中只是通過startsWith方法來比較的,肯定也是符合的,所以login.jsp/test.xhtml這個路徑可以繞過NuxeoAuthenticationFilter認證控制進入到Faces Servlet(模版相關)中。
可能會問,那我使用/webservices/xx.xhtml是不是也可以繞過呢?答案是不可以。對/webservices/*資源注冊了另一個Servlet,一個請求只能被一個Servlet處理,這個注冊方式優先級更高。
先來一張案發現場的圖,is變量含有用戶可控的內容進入到了parse方法中。
src的handler為NuxeoNotFoundResourceHandler,看下實現,
getInputStream中的錯誤信息中包含表達式,也會進入parse方法中執行, 即請求的路徑不存在時將會把路徑當成源內容返回給調用者,這里就會進入到模版的parse方法中,然后就被解析執行了。
https://github.com/nuxeo/nuxeo/commit/eb54a9145c6d8297eba9d7dafc74556e735fa388#diff-cf2094833ef0eea473d03bf6559f1798R97
這是通過過濾的方式修復的,在getInputStream中,只有當路徑中不包含”#”和”$”時才會把路徑輸出到輸入流中,這樣就無法執行EL了。
看完上述內容,你們掌握如何進行Nuxeo認證繞過和RCE漏洞分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。