色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

技術(shù)解讀 | SpEL表達(dá)式注入漏洞分析、檢查與防御

華為DevCloud ? 來源:未知 ? 2023-03-25 07:55 ? 次閱讀

在安全角度來看外部來源的數(shù)據(jù),均應(yīng)視為不可信數(shù)據(jù),對(duì)外部數(shù)據(jù),其包含的所有信息都須經(jīng)過校驗(yàn)或者過濾,再向下游服務(wù)進(jìn)行傳遞。若無防護(hù)手段,攻擊者可以通過構(gòu)造惡意輸入,對(duì)服務(wù)進(jìn)行攻擊。程序中如果使用未經(jīng)校驗(yàn)的輸入構(gòu)造SpEL語句,就有可能造成SpEL表達(dá)式注入漏洞。部分SpEL表達(dá)式注入漏洞CVSS3.x 評(píng)分極高,nvd認(rèn)定為高危漏洞,具有高致命性。


一、SpEL表達(dá)式介紹


Spring表達(dá)式語言(Spring Expression Language,SpEL)是 Spring Framework的核心技術(shù)之一,其支持在運(yùn)行時(shí)查詢和操作對(duì)象圖。SpEL語法類似于Unified Expression Language,但提供了更加豐富的功能,最特別的是方法調(diào)用與字符串模板功能。SpEL主要支持以下功能:

  • 文字表達(dá)式

  • 布爾和關(guān)系運(yùn)算符

  • 正則表達(dá)式

  • 類表達(dá)式

  • 訪問properties, arrays, lists, maps

  • 方法調(diào)用

  • 關(guān)系運(yùn)算符

  • 參數(shù)

  • 調(diào)用構(gòu)造函數(shù)

  • Bean引用

  • 構(gòu)造Array

  • 內(nèi)嵌lists

  • 內(nèi)嵌maps

  • 三元運(yùn)算符

  • 變量

  • 用戶定義的函數(shù)

  • 集合投影

  • 集合篩選

  • 模板表達(dá)式


SpEL功能強(qiáng)大,可以操作類和方法:

  • 引用方法:dog.run()

  • 引用靜態(tài)方法:T(java.lang.Math).PI

  • 類實(shí)例化:使用new實(shí)例化對(duì)象,類名必須是全限定名,java.lang包內(nèi)的除外如Integer、String等

  • 變量定義及賦值引用


在解析SpEL之后,獲取表達(dá)式結(jié)果時(shí),可以指定表達(dá)式的上下文對(duì)象:EvaluationContext

  • StandardEvaluationContext(默認(rèn)):支持全套SpEL語言和功能配置選項(xiàng),功能強(qiáng)大但存在隱患

  • SimpleEvaluationContext:僅支持SpEL語法的子集,不包括Java類型引用,構(gòu)造函數(shù)和bean引用,功能相對(duì)簡(jiǎn)單但是安全


二、SpEL表達(dá)式注入漏洞


歷史報(bào)告的大部分SpEL漏洞大多涉及不受信任的用戶輸入的情況,惡意攻擊者可能利用SpEL實(shí)現(xiàn)任意代碼執(zhí)行、拒絕服務(wù)等攻擊,與SpEL相關(guān)的部分CVE漏洞見表1。


表1部分SpEL注入CVE漏洞


常見的SpEL注入攻擊流程如圖 1所示,漏洞的基本條件有:1.使用StandardEvaluationContext;2. 未對(duì)輸入的SpEL進(jìn)行校驗(yàn);3. 對(duì)表達(dá)式調(diào)用了getValue()或setValue()方法。當(dāng)滿足上述條件時(shí),就給了攻擊者可乘之機(jī)。


圖1常見的SpEL注入攻擊流程


三、漏洞實(shí)例


| 3.1CVE-2022-22963 Spring Cloud FunctionSpEL注入漏洞


|3.1.1基本信息

漏洞id:

CVE-2022-22963


漏洞簡(jiǎn)介:

在Spring Cloud Function 相關(guān)版本,存在SpEL表達(dá)式注入。惡意攻擊者無需認(rèn)證可通過構(gòu)造特定的 HTTP 請(qǐng)求頭注入 SpEL 表達(dá)式,最終執(zhí)行任意命令,獲取服務(wù)器權(quán)限。


漏洞發(fā)布地址:

https://nvd.nist.gov/vuln/detail/cve-2022-22963


漏洞安全級(jí)別:


漏洞代碼倉地址:

https://github.com/spring-cloud/spring-cloud-function


漏洞補(bǔ)丁提交地址:

https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f


漏洞影響包版本:

3.0.0 <= Spring Cloud Function <= 3.2.2


|3.1.2Spring Cloud Function介紹


Spring Cloud Function 是基于 Spring Boot 的函數(shù)計(jì)算框架。它提供了一個(gè)通用的模型,用于在各種平臺(tái)上部署基于函數(shù)的軟件,包括像 Amazon AWS Lambda 這樣的 FaaS(函數(shù)即服務(wù),function as a service)平臺(tái)。該項(xiàng)目致力于促進(jìn)函數(shù)為主的開發(fā)單元,它抽象出所有傳輸細(xì)節(jié)和基礎(chǔ)架構(gòu),并提供一個(gè)通用的模型,用于在各種平臺(tái)上部署基于函數(shù)的軟件。


|3.1.3CVE-2022-22963漏洞攻擊路徑


使用spring-cloud-function-web的Spring boot 應(yīng)用,通過設(shè)置Message Headers來傳達(dá)路由指令,也可以在請(qǐng)求頭中指定spring.cloud.function.definition 或spring.cloud.function.routing-expression作為應(yīng)用程序?qū)傩裕试S使用 Spring 表達(dá)式語言。


當(dāng)在application.properties中設(shè)置spring.cloud.function.definition=functionRouter從而將默認(rèn)路由綁定具體函數(shù)由用戶進(jìn)行控制。


攻擊者調(diào)用/functionRouter接口,并在請(qǐng)求頭的spring.cloud.function.routing-expression中使用攻擊性的SpEL語句,服務(wù)端就會(huì)解析SpEL并執(zhí)行。


漏洞攻擊圖示如圖 2所示。


圖2CVE-2022-22963漏洞攻擊路徑


|3.1.4CVE-2022-22963漏洞修復(fù)方式


該漏洞主要從四處進(jìn)行了修復(fù):

(1)聲明一個(gè)SimpleEvaluationContext,專用作來自header的SpEL的解析;

(2)新增一個(gè)布爾變量isViaHeader,用于標(biāo)記當(dāng)前Expression是否來自Header;

(3)如果是從Header中獲取的spring.cloud.function.routing-expression表達(dá)式,isViaHeader為true ;

(4)isViaHeader為true時(shí),expression.getValue指定使用headerEvalContext。

如圖 3所示。


圖3CVE-2022-22963漏洞修復(fù)


| 3.2CVE-2022-22980 Spring DataMongoDBSpEL表達(dá)式注入漏洞


|3.2.1基本信息

漏洞id:

CVE-2022-22980


漏洞簡(jiǎn)介:

Spring Data for MongoDB是 Spring Data 項(xiàng)目的一部分,該項(xiàng)目旨在為新的數(shù)據(jù)存儲(chǔ)提供熟悉和一致的基于Spring的編程模型,同時(shí)保留存儲(chǔ)的特定特征和功能。Spring Data MongoDB應(yīng)用程序在對(duì)包含查詢參數(shù)占位符的SpEL表達(dá)式使用@Query或@Aggregation注解的查詢方法進(jìn)行值綁定時(shí),如果輸入未被過濾,則容易受到SpEL注入攻擊。


漏洞發(fā)布地址:

https://nvd.nist.gov/vuln/detail/CVE-2022-22980


漏洞安全級(jí)別:

高(CVSS3.x: 9.8)


漏洞代碼倉地址:

https://github.com/spring-projects/spring-data-mongodb


漏洞補(bǔ)丁提交地址:

3.3.xhttps://github.com/spring-projects/spring-data-mongodb/commit/7c5ac764b343d45e5d0abbaba4e82395b471b4c43.4.xhttps://github.com/spring-projects/spring-data-mongodb/commit/5e241c6ea55939c9587fad5058a07d7b3f0ccbd3


漏洞影響包版本:

Spring DataMongoDB== 3.4.0 3.3.0 <= Spring Data?MongoDB?<= 3.3.4?其他不維護(hù)的老版本


漏洞時(shí)間線:


|3.2.2Spring Data forMongoDB介紹


Spring Data for MongoDB是Spring Data的一個(gè)子模塊。目標(biāo)是為MongoDB提供一個(gè)相近的一致的基于Spring的編程模型。其核心功能是映射POJO到Mongo的DBCollection中的文檔,并且提供Repository 風(fēng)格數(shù)據(jù)訪問層。主要特性有:

  • Spring 配置支持:

    使用基于Java的@Configuration類或基于XML命名空間的配置來驅(qū)動(dòng)Mongo實(shí)例和副本

  • MongoTemplate輔助類:

    可提高執(zhí)行常見Mongo操作的效率,包括文檔和POJO之間的集成對(duì)象映射

  • 異常處理:

    異常轉(zhuǎn)換為Spring的可移植的數(shù)據(jù)訪問異常層次結(jié)構(gòu)

  • 功能豐富的對(duì)象映射與Spring的轉(zhuǎn)換服務(wù)集成

  • 基于注釋的映射元數(shù)據(jù)、并且可擴(kuò)展以支持其他元數(shù)據(jù)格式

  • 持久化和映射生命周期事件

  • 使用MongoReader/MongoWrite 抽象的低級(jí)映射

  • 基于Java的查詢、條件和更新DSL

  • Repository接口的自動(dòng)實(shí)現(xiàn),包括對(duì)自定義查詢方法的支持

  • QueryDSL集成以支持類型安全的查詢,以及地理空間整合

  • Map-Reduce集成

  • JMX管理和監(jiān)控

  • 對(duì)存儲(chǔ)庫的CDI支持

  • GridFS支持


|3.2.3CVE-2022-22980漏洞攻擊路徑

圖4CVE-2022-22980漏洞攻擊路徑


|3.2.4CVE-2022-22980復(fù)現(xiàn)


1)實(shí)驗(yàn)代碼:learnjavabug

2)運(yùn)行服務(wù),com.threedr3am.bug.spring.data.mongodb.Application#main

3)Postman發(fā)送請(qǐng)求,如圖5所示


圖5Postman填寫參數(shù)示例


4)現(xiàn)象:計(jì)算器程序被執(zhí)行


|3.2.5CVE-2022-22980修復(fù)方式


Spring Data for MongoDB在修復(fù)此漏洞時(shí),重新實(shí)現(xiàn)evaluator,指定EvaluationContext類型,如圖 6所示。


圖6CVE-2022-22980修復(fù)方式


四、檢測(cè)與防御手段


(1)對(duì)于SpEL表達(dá)式注入漏洞漏洞,可以使用靜態(tài)分析工具進(jìn)行代碼檢查,可以有效規(guī)避部分問題。

(2)在此類場(chǎng)景中,對(duì)于用戶輸入,應(yīng)當(dāng)仔細(xì)校驗(yàn),檢查用戶輸入的合法性,保障其內(nèi)容為正常數(shù)據(jù)。且在端側(cè)與服務(wù)側(cè)均應(yīng)對(duì)用戶數(shù)據(jù)進(jìn)行校驗(yàn),對(duì)非受信用戶輸入數(shù)據(jù)進(jìn)行凈化,避免用戶輸入任意內(nèi)容。

(3)及時(shí)更新Spring Framework版本,避免因版本老舊而被利用的問題發(fā)生。

(4)使用源碼靜態(tài)分析工具進(jìn)行白盒自動(dòng)化檢測(cè),在代碼合入階段、靜態(tài)分析監(jiān)控階段及時(shí)發(fā)現(xiàn)相關(guān)問題。


原文標(biāo)題:技術(shù)解讀 | SpEL表達(dá)式注入漏洞分析、檢查與防御

文章出處:【微信公眾號(hào):華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 華為
    +關(guān)注

    關(guān)注

    216

    文章

    34411

    瀏覽量

    251503

原文標(biāo)題:技術(shù)解讀 | SpEL表達(dá)式注入漏洞分析、檢查與防御

文章出處:【微信號(hào):華為DevCloud,微信公眾號(hào):華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解nginx中的正則表達(dá)式

    前言,我這里驗(yàn)證的nginx-v1.23.2單機(jī)環(huán)境下的nginx中的正則表達(dá)式、location路徑匹配規(guī)則和優(yōu)先級(jí)。
    的頭像 發(fā)表于 12-03 09:59 ?147次閱讀
    詳解nginx中的正則<b class='flag-5'>表達(dá)式</b>

    Verilog表達(dá)式的位寬確定規(guī)則

    很多時(shí)候,Verilog中表達(dá)式的位寬都是被隱式確定的,即使你自己設(shè)計(jì)了位寬,它也是根據(jù)規(guī)則先確定位寬后,再擴(kuò)展到你的設(shè)計(jì)位寬,這常常會(huì)導(dǎo)致結(jié)果產(chǎn)生意想不到的錯(cuò)誤。
    的頭像 發(fā)表于 10-22 15:41 ?449次閱讀
    Verilog<b class='flag-5'>表達(dá)式</b>的位寬確定規(guī)則

    通過工業(yè)智能網(wǎng)關(guān)實(shí)現(xiàn)中間變量表達(dá)式的快速配置

    ,出現(xiàn)告警可能是多個(gè)變量達(dá)到條件而觸發(fā)的,就需要對(duì)中間變量進(jìn)行配置。 對(duì)此,物通博聯(lián)提供基于工業(yè)智能網(wǎng)關(guān)實(shí)現(xiàn)中間變量表達(dá)式的快速配置操作。用戶可以根據(jù)生產(chǎn)現(xiàn)場(chǎng)的應(yīng)用需求,靈活配置中間變量表達(dá)式,實(shí)現(xiàn)多參數(shù)、多條件
    的頭像 發(fā)表于 10-08 17:10 ?237次閱讀
    通過工業(yè)智能網(wǎng)關(guān)實(shí)現(xiàn)中間變量<b class='flag-5'>表達(dá)式</b>的快速配置

    nginx中的正則表達(dá)式和location路徑匹配指南

    前言,我這里驗(yàn)證的nginx-v1.23.2單機(jī)環(huán)境下的nginx中的正則表達(dá)式、location路徑匹配規(guī)則和優(yōu)先級(jí)。
    的頭像 發(fā)表于 09-29 16:02 ?716次閱讀
    nginx中的正則<b class='flag-5'>表達(dá)式</b>和location路徑匹配指南

    求助,以下恒流源電路Io的計(jì)算表達(dá)式怎么計(jì)算?

    這個(gè)恒流源電路Io的計(jì)算表達(dá)式怎么計(jì)算,求給出詳細(xì)計(jì)算過程
    發(fā)表于 08-22 08:16

    TestStand表達(dá)式中常用的語法規(guī)則和運(yùn)算符使用

    TestStand也有自己的語言嘛?在回答這個(gè)問題之前大家可以想一下在使用TestStand時(shí)有一個(gè)和語言密切相關(guān)的屬性。沒錯(cuò)那就是表達(dá)式(Expressions),在這篇文章中,小編將以Q&A的方式來帶著大家來理解并熟悉TestStand表達(dá)式中較為常用的一些語法規(guī)則以
    的頭像 發(fā)表于 08-15 18:10 ?1355次閱讀
    TestStand<b class='flag-5'>表達(dá)式</b>中常用的語法規(guī)則和運(yùn)算符使用

    Java表達(dá)式引擎選型調(diào)研分析

    1 簡(jiǎn)介 我們項(xiàng)目組主要負(fù)責(zé)面向企業(yè)客戶的業(yè)務(wù)系統(tǒng), 企業(yè)的需求往往是多樣化且復(fù)雜的,對(duì)接不同企業(yè)時(shí)會(huì)有不同的定制化的業(yè)務(wù)模型和流程。 我們?cè)跇I(yè)務(wù)系統(tǒng)中 使用表達(dá)式引擎,集中配置管理業(yè)務(wù)規(guī)則,并實(shí)現(xiàn)
    的頭像 發(fā)表于 08-15 14:25 ?341次閱讀
    Java<b class='flag-5'>表達(dá)式</b>引擎選型調(diào)研<b class='flag-5'>分析</b>

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基本概念表達(dá)式(二)

    三、do-while 表達(dá)式 do-while 表達(dá)式的基本形式為: do { 循環(huán)體 } while (條件) 其中“條件”是布爾類型表達(dá)式,“循環(huán)體”是一個(gè)代碼塊。do-while 表達(dá)式
    發(fā)表于 08-09 14:26

    鴻蒙原生應(yīng)用元服務(wù)開發(fā)-倉頡基本概念表達(dá)式(一)

    不同操作,不會(huì)關(guān)注各分支最后一個(gè)表達(dá)式的值與類型,為了不讓上述類型檢查規(guī)則影響這一思維習(xí)慣,倉頡規(guī)定這種場(chǎng)景下的 if 表達(dá)式類型為 Unit、值為 (),且各分支不參與上述類型檢查
    發(fā)表于 08-08 10:27

    求助,有關(guān)表達(dá)式選項(xiàng)卡(ADS)的問題求解

    你好。 我看不到表達(dá)式選項(xiàng)卡中的某些變量值。 數(shù)組的大小顯然是 256,但我最多只能看到 100。 請(qǐng)問問題出在哪里? 謝謝。
    發(fā)表于 06-03 06:23

    mapgis屬性篩選表達(dá)式

    篇文章中,我們將詳細(xì)討論MapGIS的屬性篩選表達(dá)式,包括語法、操作符和函數(shù)等。 屬性篩選表達(dá)式是一種在MapGIS中用于指定要素選擇條件的代碼。它由一組操作符、函數(shù)和屬性字段組成,用于描述要篩選的要素的特征。在MapGIS中,屬性篩選
    的頭像 發(fā)表于 02-25 10:58 ?1613次閱讀

    西門子博途的算術(shù)表達(dá)式

    算術(shù)表達(dá)式既可以是一個(gè)數(shù)字值,也可以是由帶有算術(shù)運(yùn)算符的兩個(gè)值或表達(dá)式組合而成。 算術(shù)運(yùn)算符可以處理當(dāng)前 CPU 所支持的各種數(shù)據(jù)類型。如果在該運(yùn)算中有 2 個(gè)操作數(shù),那么可根據(jù)以下條件來確定結(jié)果的數(shù)據(jù)類型。
    的頭像 發(fā)表于 01-24 11:36 ?1000次閱讀

    你還不會(huì)gvim正則表達(dá)式?一文搞懂!

    gvim正則表達(dá)式常在命令行模式下使用,一般用于文本文件字符串的替換、刪除等操作。
    的頭像 發(fā)表于 01-19 16:47 ?1170次閱讀

    rs觸發(fā)器的邏輯表達(dá)式

    邏輯表達(dá)式是描述邏輯關(guān)系的符號(hào)表示,可以用于定義和描述各種電路和邏輯操作。在邏輯電路中,RS觸發(fā)器是一種基本的存儲(chǔ)器元件,也被稱為鎖存器。 RS觸發(fā)器是由兩個(gè)與門組成的,其輸出互相連接,形成一個(gè)反饋
    的頭像 發(fā)表于 01-12 14:09 ?3114次閱讀

    全加器的邏輯表達(dá)式怎么推

    全加器是計(jì)算機(jī)中常用的一種邏輯電路,用于實(shí)現(xiàn)二進(jìn)制加法運(yùn)算。全加器接受兩個(gè)輸入位和一個(gè)進(jìn)位位,并輸出一個(gè)和位和一個(gè)進(jìn)位位。它的邏輯表達(dá)式可以通過推導(dǎo)和分析得出。 首先,讓我們回顧一下二進(jìn)制加法的規(guī)則
    的頭像 發(fā)表于 12-25 16:09 ?4357次閱讀
    主站蜘蛛池模板: 日本精品久久久久中文字幕| 欧美含羞草免费观看全部完| 亚洲国产精品嫩草影院久久| 国产精品人妻无码99999| 午夜精品久久久久久久爽牛战| 国产精彩视频在线| 亚洲精品午夜VA久久成人| 久久AV喷吹AV高潮欧美| 中文字幕人成乱码中国| 欧美一级黄色影院| 国产v综合v亚洲欧美大片| 亚洲国产AV精品卡一卡二| 久久99re6国产在线播放| music radio在线收听| 午夜无码国产理论在线| 麻豆精品2021最新| 国产 高清 无码 在线播放| 亚洲三级在线中文字幕| 欧美极品尿交| 国产在线观看99| 动漫H片在线播放免费高清| 亚洲永久精品ww47| 日本视频中文字幕一区二区| 精品视频在线观看视频免费视频| wwwzzz日本| 又爽又黄又粗又大免费视频| 色哒哒影院| 欧美成人性色生活18黑人| 狠狠色狠色综合曰曰| 夫妻性姿势真人做视频| 2224x最新网站| 一本大道无码AV天堂欧美 | 亚洲国产精品一区二区动图| 毛片免费观看视频| 九九久久国产| 国产精品XXXXX免费A片| avv天堂| 最近日本字幕免费高清| 午夜AV国产欧美亚洲高清在线| 男助理憋尿PLAY灌尿BL出去| 老太婆风流特黄一级|