作者:陌溪
陌溪的学习笔记:note.moguit.cn
大家好,我是 陌溪
最近疲于公司业务,没有怎么肝文,小伙伴多多见谅~
前阵子,群里小伙伴发给我一个链接,说蘑菇的配置信息泄漏,要被删库啦!我一脸黑人问号。
蘑菇也不是第一次数据库受到安全问题,至少经历了两次生死考验了
随后就看到小伙伴给我发了一个链接地址:
http://ip:8603/actuator/env
陌溪用浏览器打开,显示一大串的信息
用 Json 格式化工具,格式后发现,里面就是蘑菇的 application.yml 配置信息!
蘑菇配置信息
往下翻了翻,找到数据库的账号和密码。还好没有直接将密码直接明文显示,竟然良心的加了掩码
加了掩码的密码
但是小伙伴以为上面这样就安全了么?
继续扒开 /actuator 目录下的内容,可以看到除了 env 外,还有其它的信息
/actuator/env # 提供对配置环境的访问
/actuator/beans # 描述应用程序上下文里全部的Bean
/actuator/health # 报告应用程序的健康指标
/actuator/info # 获取应用程序的定制信息
/actuator/trace # 显示最后几条HTTP消息
/actuator/logfile # 输出日志文件的内容
/actuator/heapdump # 堆栈快照
...
其中有意思的是 /actuator/heapdump 堆栈快照
heapdump 文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。heapdump 文件是指定时刻的Java 堆栈的快照,是一种镜像文件。
Heap Dump 中主要包含当生成快照时堆中的 Java 对象和类的信息,主要分为如下几类:
我们使用访问 /actuator/heapdump 获取到堆栈快照文件
http://ip:8603/actuator/heapdump
下载的时候,这个文件还是比较大的,大概有 100 多 MB
下载快照
下载完成后,需要使用专门的工具( heapdump_tool.jar )才能打开
下载地址:https://toolaffix.oss-cn-beijing.aliyuncs.com/wyzxxz/20220720/heapdump_tool.jar
声明:此工具仅用于企业安全人员自查验证自身企业资产的安全风险,或有合法授权的安全测试,请勿用于其他用途,如有,后果自负。
下载完成后,将工具以及刚刚的堆存储文件放一起
堆栈快照和工具
然后使用下面命令,读取堆栈快照
java -jar heapdump_tool.jar heapdump
然后会提示进行模式选择,有两个选项
选择模式
我们就输入 0,开始搜索数据
找到之前加了掩码的Key,即:spring.security.user.password,也就是下图的内容
加了掩码的密码
输入完成后,可以看到我们的数据库密码,直接被打印出来了!
mysql密码
同时在测试一下 Redis 的密码:spring.redis.password 也直接展示出来了
redis密码
直接使用 SQLLog 连接到数据库,蘑菇数据内容一览无遗,直接就芭比Q了
连上数据库了
Actuator 是 SpringBoot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。
在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息,从而导致信息泄露甚至服务器被接管的事件发生。
如上所示,actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块。其提供的执行器端点分为两类:原生端点和用户自定义扩展端点,原生端点主要有:
所有端点
也就是说,只要你使用的 SpringBoot 框架,并且添加了 Actuator 依赖,就可能有这个问题。
比如,蘑菇之前引入 SpringSecurity 配置的时候,直接从网上 Copy 了一份配置,把所有的内容允许匿名访问给开放放出去了,也给自己网站的安全问题造成隐患。
开放了actuator所有内容
可以直接在配置文件中,排除掉存在危险的端点,比如把:env,beans,heapdump 排除
management:
endpoints:
web:
exposure:
include: "*"
exclude: env,beans,heapdump
这样在访问 /actuator/env 地址的时候,就会访问不了的
另外,就是在 SpringSecurity 配置文件处,不能用 /actuator/** 让所有都匿名访问,而是配置不敏感的请求,允许匿名访问
而对于敏感的地址,我们需要验证 SpringSecurity 的账号和密码,如下所示,我们只允许访问以下几种方法
开放部分安全的接口
配置完后,再次访问就会出现访问拒绝了,这样也杜绝了泄漏堆栈快照的问题。
拒绝访问
如果访问配置允许匿名访问的接口,也还是可以拿到配置信息的
访问允许匿名访问的接口希望各位小伙伴们也检查一下自己的项目中,有没有存在这样的问题,并且赶快修复掉~好了,本期关于蘑菇漏洞的修复,就讲到这里了,我是陌溪,我们下次再见
博主就职于字节跳动后端研发,一直维护校招笔记仓库 LearningNote「在Gitee上已有 5.6k star,地址 https://gitee.com/moxi159753/LearningNotes」,公众号上的文章也会在此同步更新,欢迎各位小伙伴一起交流学习,回复 「PDF」获取PDF笔记。
同时,想要丰富项目经验的小伙伴,可以参考我维护的开源微服务博客项目:蘑菇博客「 Gitee 官方推荐项目,博客类搜索排名第一,在 Gitee 已有 5.3K star,仓库地址:https://gitee.com/moxi159753/mogu_blog_v2 」。
本公众号申请较晚,暂时没有开通留言功能,欢迎小伙伴们添加我的私人微信 coder_moxi【备注:加群】,我将邀请你加入到蘑菇博客交流群中,欢迎小伙伴们找陌溪一块聊天唠嗑,共同学习进步。最后,如果你觉得本文对你有所帮助,麻烦小伙伴们动动手指给文章点个「赞」和「在看」,非常感谢大家的支持。
快来找陌溪唠嗑吧
点个在看你最好看
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有