spring-boot 脆弱性调查

脆弱性:Vulnerability

1. 调查方法

1.1. 定位到工程文件夹

把依赖jar包统一输出到jarlist.txt中

# cd prj-a
prj-a# mvn dependency:tree -DoutputFile=jarlist.txt

1.2. 依次使用+-[空格],-[空格],|[空格],[空格],[:]->[,] 替换掉后,把文件转换成csv文件

2. 根据csv文件中的jar包,到以下网址查询已有脆弱性报告

https://snyk.io./vuln/

3. 安全性风险

3.1 spring-security-core

pom.xml

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>
...

保存下载所有依赖包,逐一调查脆弱性

发现:spring-security-core-5.3.5.RELEASE.jar 存在安全漏洞

https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORKSECURITY-1078232

原文

org.springframework.security:spring-security-core is a package that provides security services for the Spring IO Platform.

Affected versions of this package are vulnerable to Privilege Escalation. It fail to save the > SecurityContext if it is changed more than once in a single request. The SecurityContext can > fail to save to the HttpSession if a developer changes the SecurityContext twice in a single > request when both of the following conditions are met: First the developer must change the SecurityContext before the HttpResponse is committed and then the HttpResponse must be committed before the SecurityContextPersistenceFilter completes. Then the developer must attempt to change the SecurityContext again before the SecurityContextPersistenceFilter completes. A malicious user cannot cause the bug to happen (it must be programmed in). However, if the application's intent is to only allow the user to run with elevated privileges in a small portion of the application, the bug can be leveraged to extend those privileges to the rest of the application.

Remediation
Upgrade org.springframework.security:spring-security-core to version 5.4.4, 5.3.8.RELEASE, 5.2.9.RELEASE or higher.

译文

org.springframework.security:spring-security-core是一个为Spring IO Platform提供安全服务的软件包。

此软件包的受影响版本容易受到特权升级的影响。如果在单个请求中多次更改了SecurityContext,它将无法保存。如果同时满足以下两个条件,如果开发人员在单个请求中两次更改SecurityContext,则SecurityContext可能无法保存到HttpSession中:首先,开发人员必须在提交HttpResponse之前更改SecurityContext,然后必须在提交HttpResponse之前更改HttpResponse。 SecurityContextPersistenceFilter完成。然后,开发人员必须在SecurityContextPersistenceFilter完成之前再次尝试更改SecurityContext。恶意用户无法导致该错误的发生(必须对其进行编程)。但是,如果应用程序的目的仅是允许用户在应用程序的一小部分中以提升的特权运行,则可以利用该错误将这些特权扩展到应用程序的其余部分。

整治
将org.springframework.security:spring-security-core升级到5.4.4、5.3.8.RELEASE,5.2.9.RELEASE或更高版本。

3.2 mybatis

pom.xml

...
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>
...

保存下载所有依赖包,逐一调查脆弱性

发现:mybatis-3.5.5.jar 存在安全漏洞

https://snyk.io./vuln/SNYK-JAVA-ORGMYBATIS-1017032

原文

org.mybatis:mybatis is a SQL mapper framework

Affected versions of this package are vulnerable to Remote Code Execution (RCE). It mishandles deserialization of object streams. All of the following conditions needs to be met in order to trigger RCE.

  • the user enabled the built-in 2nd level cache [1]
  • the user did not setup JEP-290 filter
  • the attacker found a way to modify entries of the private Map field i.e. org.apache.ibatis.cache.impl.PerpetualCache.cache and a valid cache key
    Remediation

Remediation
Upgrade org.mybatis:mybatis to version 3.5.6 or higher.

译文

org.mybatis:mybatis是一个SQL映射器框架

此程序包的受影响版本容易受到远程代码执行(RCE)的影响。它对对象流的反序列化处理不当。为了触发RCE,需要满足以下所有条件。

用户启用了内置的二级缓存[1]
用户未设置JEP-290过滤器
攻击者找到了一种方法来修改私有Map字段的条目,即org.apache.ibatis.cache.impl.PerpetualCache.cache和有效的缓存键
整治
升级org.mybatis:mybatis到3.5.6或更高版本。

4. 解决办法

考虑小版本升级影响范围小

4.1 spring-security-core

pom.xml

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.9.RELEASE</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>
...

4.2 mybatis

pom.xml

...
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>
...

5. 总结

架构师使用中间件搭建原型系统后,最好调查一下是否存在已知的脆弱性报告。

原则:

    1. 如果项目刚刚启动,最好无脆弱jar包
    1. 如果有脆弱jar包存在,尽量升级小版本,以免影响范围过大。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容