在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

技術解讀 | SpEL表達式注入漏洞分析、檢查與防御

華為DevCloud ? 來源:未知 ? 2023-03-25 07:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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


一、SpEL表達式介紹


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

  • 文字表達式

  • 布爾和關系運算符

  • 正則表達式

  • 類表達式

  • 訪問properties, arrays, lists, maps

  • 方法調用

  • 關系運算符

  • 參數

  • 調用構造函數

  • Bean引用

  • 構造Array

  • 內嵌lists

  • 內嵌maps

  • 三元運算符

  • 變量

  • 用戶定義的函數

  • 集合投影

  • 集合篩選

  • 模板表達式


SpEL功能強大,可以操作類和方法:

  • 引用方法:dog.run()

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

  • 類實例化:使用new實例化對象,類名必須是全限定名,java.lang包內的除外如Integer、String等

  • 變量定義及賦值引用


在解析SpEL之后,獲取表達式結果時,可以指定表達式的上下文對象:EvaluationContext

  • StandardEvaluationContext(默認):支持全套SpEL語言和功能配置選項,功能強大但存在隱患

  • SimpleEvaluationContext:僅支持SpEL語法的子集,不包括Java類型引用,構造函數和bean引用,功能相對簡單但是安全


二、SpEL表達式注入漏洞


歷史報告的大部分SpEL漏洞大多涉及不受信任的用戶輸入的情況,惡意攻擊者可能利用SpEL實現任意代碼執行、拒絕服務等攻擊,與SpEL相關的部分CVE漏洞見表1。


表1部分SpEL注入CVE漏洞


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


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


三、漏洞實例


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


|3.1.1基本信息

漏洞id:

CVE-2022-22963


漏洞簡介:

在Spring Cloud Function 相關版本,存在SpEL表達式注入。惡意攻擊者無需認證可通過構造特定的 HTTP 請求頭注入 SpEL 表達式,最終執行任意命令,獲取服務器權限。


漏洞發布地址:

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


漏洞安全級別:


漏洞代碼倉地址:

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


漏洞補丁提交地址:

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 的函數計算框架。它提供了一個通用的模型,用于在各種平臺上部署基于函數的軟件,包括像 Amazon AWS Lambda 這樣的 FaaS(函數即服務,function as a service)平臺。該項目致力于促進函數為主的開發單元,它抽象出所有傳輸細節和基礎架構,并提供一個通用的模型,用于在各種平臺上部署基于函數的軟件。


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


使用spring-cloud-function-web的Spring boot 應用,通過設置Message Headers來傳達路由指令,也可以在請求頭中指定spring.cloud.function.definition 或spring.cloud.function.routing-expression作為應用程序屬性,允許使用 Spring 表達式語言。


當在application.properties中設置spring.cloud.function.definition=functionRouter從而將默認路由綁定具體函數由用戶進行控制。


攻擊者調用/functionRouter接口,并在請求頭的spring.cloud.function.routing-expression中使用攻擊性的SpEL語句,服務端就會解析SpEL并執行。


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


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


|3.1.4CVE-2022-22963漏洞修復方式


該漏洞主要從四處進行了修復:

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

(2)新增一個布爾變量isViaHeader,用于標記當前Expression是否來自Header;

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

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

如圖 3所示。


圖3CVE-2022-22963漏洞修復


| 3.2CVE-2022-22980 Spring DataMongoDBSpEL表達式注入漏洞


|3.2.1基本信息

漏洞id:

CVE-2022-22980


漏洞簡介:

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


漏洞發布地址:

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


漏洞安全級別:

高(CVSS3.x: 9.8)


漏洞代碼倉地址:

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


漏洞補丁提交地址:

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?其他不維護的老版本


漏洞時間線:


|3.2.2Spring Data forMongoDB介紹


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

  • Spring 配置支持:

    使用基于Java的@Configuration類或基于XML命名空間的配置來驅動Mongo實例和副本

  • MongoTemplate輔助類:

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

  • 異常處理:

    異常轉換為Spring的可移植的數據訪問異常層次結構

  • 功能豐富的對象映射與Spring的轉換服務集成

  • 基于注釋的映射元數據、并且可擴展以支持其他元數據格式

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

  • 使用MongoReader/MongoWrite 抽象的低級映射

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

  • Repository接口的自動實現,包括對自定義查詢方法的支持

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

  • Map-Reduce集成

  • JMX管理和監控

  • 對存儲庫的CDI支持

  • GridFS支持


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

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


|3.2.4CVE-2022-22980復現


1)實驗代碼:learnjavabug

2)運行服務,com.threedr3am.bug.spring.data.mongodb.Application#main

3)Postman發送請求,如圖5所示


圖5Postman填寫參數示例


4)現象:計算器程序被執行


|3.2.5CVE-2022-22980修復方式


Spring Data for MongoDB在修復此漏洞時,重新實現evaluator,指定EvaluationContext類型,如圖 6所示。


圖6CVE-2022-22980修復方式


四、檢測與防御手段


(1)對于SpEL表達式注入漏洞漏洞,可以使用靜態分析工具進行代碼檢查,可以有效規避部分問題。

(2)在此類場景中,對于用戶輸入,應當仔細校驗,檢查用戶輸入的合法性,保障其內容為正常數據。且在端側與服務側均應對用戶數據進行校驗,對非受信用戶輸入數據進行凈化,避免用戶輸入任意內容。

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

(4)使用源碼靜態分析工具進行白盒自動化檢測,在代碼合入階段、靜態分析監控階段及時發現相關問題。


原文標題:技術解讀 | SpEL表達式注入漏洞分析、檢查與防御

文章出處:【微信公眾號:華為DevCloud】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 華為
    +關注

    關注

    216

    文章

    35155

    瀏覽量

    255443

原文標題:技術解讀 | SpEL表達式注入漏洞分析、檢查與防御

文章出處:【微信號:華為DevCloud,微信公眾號:華為DevCloud】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Cubeide1.18.1在線調試改變\"現場表達式\"中的值提示找不到地址,為什么?

    Cubeide1.18.1在線調試時,在\"現場表達式\"中添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 06-12 06:50

    Cubeide1.18.1在線調試改變\"現場表達式\"中的值提示找不到地址是怎么回事?

    Cubeide1.18.1在線調試時,在\"現場表達式\"中添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 06-10 08:26

    干貨分享 | 零基礎上手!TSMaster圖形信號表達式實操指南

    TSMaster軟件支持在圖形里面的信號表達式功能,主要用于多信號表達式運算和顯示的場景。本文將以A2L中的標定變量為例,介紹如何使用圖形中的信號表達式功能進行多信號的后處理運算和顯示。本文關鍵詞
    的頭像 發表于 06-06 20:03 ?212次閱讀
    干貨分享 | 零基礎上手!TSMaster圖形信號<b class='flag-5'>表達式</b>實操指南

    Cubeide1.18.1在線調試改變\"現場表達式\"中的值提示找不到地址,怎么解決?

    Cubeide1.18.1在線調試時,在\"現場表達式\"中添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 06-06 08:27

    Cubeide1.18.1在線調試改變\"現場表達式\"中的值提示找不到地址怎么解決?

    Cubeide1.18.1在線調試時,在\"現場表達式\"中添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 04-27 06:18

    表達式畫Coms電路,最近二周有比賽第一次接觸Cmos,主要用與或非門電路畫

    用與或非門電路繪畫,通過表達式,來繪畫cmos門電路
    發表于 12-04 16:02

    詳解nginx中的正則表達式

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx中的正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 12-03 09:59 ?816次閱讀
    詳解nginx中的正則<b class='flag-5'>表達式</b>

    Verilog表達式的位寬確定規則

    很多時候,Verilog中表達式的位寬都是被隱式確定的,即使你自己設計了位寬,它也是根據規則先確定位寬后,再擴展到你的設計位寬,這常常會導致結果產生意想不到的錯誤。
    的頭像 發表于 10-22 15:41 ?1482次閱讀
    Verilog<b class='flag-5'>表達式</b>的位寬確定規則

    通過工業智能網關實現中間變量表達式的快速配置

    ,出現告警可能是多個變量達到條件而觸發的,就需要對中間變量進行配置。 對此,物通博聯提供基于工業智能網關實現中間變量表達式的快速配置操作。用戶可以根據生產現場的應用需求,靈活配置中間變量表達式,實現多參數、多條件
    的頭像 發表于 10-08 17:10 ?607次閱讀
    通過工業智能網關實現中間變量<b class='flag-5'>表達式</b>的快速配置

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

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx中的正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 09-29 16:02 ?1663次閱讀
    nginx中的正則<b class='flag-5'>表達式</b>和location路徑匹配指南

    求助,以下恒流源電路Io的計算表達式怎么計算?

    這個恒流源電路Io的計算表達式怎么計算,求給出詳細計算過程
    發表于 08-22 08:16

    TestStand表達式中常用的語法規則和運算符使用

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

    Java表達式引擎選型調研分析

    1 簡介 我們項目組主要負責面向企業客戶的業務系統, 企業的需求往往是多樣化且復雜的,對接不同企業時會有不同的定制化的業務模型和流程。 我們在業務系統中 使用表達式引擎,集中配置管理業務規則,并實現
    的頭像 發表于 08-15 14:25 ?619次閱讀
    Java<b class='flag-5'>表達式</b>引擎選型調研<b class='flag-5'>分析</b>

    鴻蒙原生應用元服務開發-倉頡基本概念表達式(二)

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

    鴻蒙原生應用元服務開發-倉頡基本概念表達式(一)

    不同操作,不會關注各分支最后一個表達式的值與類型,為了不讓上述類型檢查規則影響這一思維習慣,倉頡規定這種場景下的 if 表達式類型為 Unit、值為 (),且各分支不參與上述類型檢查
    發表于 08-08 10:27
    主站蜘蛛池模板: 日本 韩国 三级 国产 欧美 | 天天操天天干天天爽 | 欧美一级特黄aaaaaaa在线观看 | 国产精品欧美激情第一页 | 大量国产后进翘臀视频 | 亚洲三级视频在线观看 | 日本特黄特黄刺激大片免费 | 色五夜婷婷 | 国产美女久久久久 | 伊人久久成人成综合网222 | 亚洲精品午夜视频 | 国模吧一区二区三区精品视频 | 看黄网站免费 | 丁香视频在线 | 日本口工全彩无遮拦漫画大 | 午夜免费一级片 | 久久国产乱子伦精品免费看 | 香蕉久久夜色精品国产小说 | 久久观看午夜精品 | 天天看爽片 | 双性受粗大撑开白浊 | 35pao强力打造| 免费恐怖片 | 久久国产成人精品国产成人亚洲 | 女性一级全黄生活片免费看 | 特黄特色网站 | 日韩午夜在线视频不卡片 | 热久久这里只有精品 | 国产成人午夜精品影院游乐网 | 六月婷婷网视频在线观看 | 五月激情站| 午夜撸| 男女交性特一级 | 啊用力太猛了啊好深视频免费 | 亚洲精品香蕉婷婷在线观看 | 国产成人综合日韩精品婷婷九月 | 中国美女毛片 | 亚洲韩国日本欧美一区二区三区 | 男人天堂资源网 | 32pao强力打造免费高速高清 | 国产精品网站在线进入 |