Apollo的env端点暴露导致安全扫码漏洞修复处理
1.背景
检测分析发现,目标系统存在远程代码执行漏洞。
漏洞链接地址:
http://apollo.mytest.xxx:8080/env
(外网IP为了配置域名,内网IP域名解析不了,如果是ip访问。没走nginx,如果走域名访问,可以在nginx中禁用/env访问路径)
漏洞分析与取证:
对目标公司相关资产开展测试,发现该系统开放springboot接口,env目录下发现参数spring.cloud.bootstrap.location,存在SnakeYaml远程代码执行漏洞。
2.本地环境/生产环境的配置
a) fat.meta=http://172.xx.2.xx:8080
pro.meta=http://47.xx.67.xx:8080
3.禁用思路
a) 临时方案,应对扫描。阿里云控制访问白名单和禁用外网访问端口,阿里云服务内网可以访问。存在问题:基础jar中的apollo配置的外网IP,这样会存在线上服务无法拉取最新的apollo配置问题。
b) 在源头上解决,springboot禁用env端点配置
4.遇到的问题
a) 加了配置未生效,/env端点仍然可以访问。可以通过idea工具智能提醒出来配置。
b) apollo-configservice,apollo-adminservice,apollo-portal三个是springboot项目都需要加上如下配置禁用:
endpoints:
enabled: false
health:
sensitive: false
enabled: true
env:
enabled: false
management:
security:
enabled: false
health:
status:
order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP
endpoint:
env:
enabled: false
a) 实际的原因是apollo-configservice,apollo-adminservice,apollo-portal 项目mvn打包jar有问题,服务器上面的的./script/startup.sh 启动脚本会覆盖新上传的问题。导致重新启动没有生效。
打包命令:mvn clean package -D maven.test.skip=true -P fat1 如果idea打包异常,可以重新拉了新的代码,可以打了。
5.解决方案
a) 将线上/测试环境的发布jar,通过压缩软件的方式打开,直接将配置在原文件上面修改。然后上传发布。运维同事解决。
7-zip打不开jar包,360可以打开,winrar也可以打开。
6.查看命令和分析是否添加配置配置
ps -ef | grep "8080" //根据端口号来查询服务等
http://172.xx.2.xx:8080/configprops 这是整个端点都禁用了。
{"timestamp":"2025-05-28T11:12:05.655+0800","status":404,"error":"Not Found","message":"No message available","path":"/configprops"}
http://172.xx.2.xx:8080/env 检查表示禁用成功。
{"exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method \u0027GET\u0027 not supported","status":400,"timestamp":"2025-05-28T11:13:03.428"}
{"timestamp":"2025-05-28T11:17:23.307+0800","status":404,"error":"Not Found","message":"No message available","path":"/info"}