中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行spring-messaging遠程代碼執行漏洞分析

發布時間:2021-12-20 19:51:23 來源:億速云 閱讀:182 作者:柒染 欄目:大數據

這篇文章給大家介紹如何進行spring-messaging遠程代碼執行漏洞分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

0x00 漏洞概述

2018年4月5日,Pivotal Spring官方發布安全公告,Spring框架中存在三個漏洞,其中編號為CVE-2018-1270的漏洞可導致遠程代碼執行。

360-CERT通過對此漏洞進行了相關分析,認為漏洞影響嚴重;目前相關PoC已經被發布,建議相關用戶盡快進行評估升級。

0x01 漏洞影響面

影響版本
  1. Spring Framework 5.0 to 5.0.4.

  2. Spring Framework 4.3 to 4.3.14

  3. 已不支持的舊版本仍然受影響

修復版本
  1. 5.0.x 用戶升級到5.0.5版本

  2. 4.3.x 用戶升級到4.3.15版本

0x02 漏洞詳情

CVE-2018-1270

Spring框架中通過spring-messaging模塊來實現STOMP(Simple Text-Orientated Messaging Protocol),STOMP是一種封裝WebSocket的簡單消息協議。攻擊者可以通過建立WebSocket連接并發送一條消息造成遠程代碼執行。如果使用了Spring Security項目中的權限認證,可以在一定程度上增加漏洞利用難度。

CVE-2018-1271

當Spring MVC的靜態資源存放在Windows系統上時,攻擊可以通過構造特殊URL導致目錄遍歷漏洞。

此漏洞觸發條件較高:

  1. Server運行于Windows系統上

  2. 從文件系統提供的文件服務(比如使用file協議,但不是file open)

  3. 沒有使用CVE-2018-1199漏洞的補丁

  4. 不使用Tomcat或者是WildFly做Server

CVE-2018-1272

在Spring MVC或者WebFlux應用把客戶端請求再轉向另一臺服務器的場景下,攻擊者通過構造和污染Multipart類型請求,可能對另一臺服務器實現權限提升攻擊。

0x03 CVE-2018-1270漏洞分析

SpEL

Spring表達式語言全稱Spring Expression Language,支持查詢和操作運行時對象導航圖功能.。語法類似于傳統EL,而且供額外的功能,能夠進行函數調用和簡單字符串的模板函數。

SpEL用法

String expression = "T(java.lang.Runtime).getRuntime().exec(/"calc/")";
String result = parser.parseExpression(expression).getValue().toString();
漏洞觸發流程

搭建spring-message 項目demo(https://github.com/spring-guides/gs-messaging-stomp-websocket

其中靜態資源app.js運行在客戶端與服務器做websocket交互,使用connect()函數建立Stomp鏈接

function connect() {
       var socket = new SockJS('/gs-guide-websocket');
       stompClient = Stomp.over(socket);
       stompClient.connect({}, function (frame) {
           setConnected(true);
           console.log('Connected: ' + frame);
           stompClient.subscribe('/topic/greetings', function (greeting) {
               showGreeting(JSON.parse(greeting.body).content);
           });
       });
   }

Step1

增加一個header頭部,添加selector項,value為payload,Stomp協議規范中通過指定selector對訂閱的信息進行過濾

如何進行spring-messaging遠程代碼執行漏洞分析

Web應用在handleMessageInternal對消息進行處理,注冊訂閱者registerSubscription,最后調用DefaultSubscriptionRegistry函數對header參數進行處理,對selector值進行了解析,并將其保存至這次會話中。

如何進行spring-messaging遠程代碼執行漏洞分析

Step2

點擊send向服務器發送任意消息。Spring 在向訂閱者分發消息時會調用filterSubscription對消息進行過濾,會執行expression.getValue(context, Boolean.class)造成任意命令執行

如何進行spring-messaging遠程代碼執行漏洞分析

補丁分析

補丁地址(https://github.com/spring-projects/spring-framework/commit/e0de9126ed8cf25cf141d3e66420da94e350708a#diff-ca84ec52e20ebb2a3732c6c15f37d37a

-import org.springframework.expression.spel.support.StandardEvaluationContext;
+import org.springframework.expression.spel.support.SimpleEvaluationContext;

如何進行spring-messaging遠程代碼執行漏洞分析

刪除了StandardEvaluationContext引用,采用了SimpleEvaluationContext StandardEvaluationContext可以執行任意SpEL表達式,Spring官方在5.0.5之后換用SimpleEvaluationContext,用于實現簡單的數據綁定,保持靈活性減少安全隱患

SimpleEvaluationContext地址(https://github.com/spring-projects/spring-framework/blob/v5.0.5.RELEASE/spring-expression/src/main/java/org/springframework/expression/spel/support/SimpleEvaluationContext.java

StandardEvaluationContext地址(https://github.com/spring-projects/spring-framework/blob/v5.0.5.RELEASE/spring-expression/src/main/java/org/springframework/expression/spel/support/StandardEvaluationContext.java

關于如何進行spring-messaging遠程代碼執行漏洞分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

营口市| 洞口县| 扎赉特旗| 双江| 咸宁市| 兴化市| 凤庆县| 文水县| 巫山县| 长春市| 肇庆市| 会宁县| 韶山市| 潞西市| 雷波县| 高尔夫| 龙泉市| 余干县| 南平市| 通许县| 蒙山县| 天门市| 高唐县| 张家港市| 绥芬河市| 莱西市| 福清市| 石楼县| 通渭县| 南江县| 长汀县| 古蔺县| 凤台县| 泾源县| 泰安市| 民和| 冷水江市| 台安县| 和平县| 石泉县| 盱眙县|