前言
工作中遇到一个nacos服务认证绕过的问题,在此总结一下漏洞原因。
一、nacos简介
官方文档描述:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
二、漏洞复现
参考其它的文章:
Alibaba Nacos权限认证绕过 - 云+社区 - 腾讯云
三、漏洞原因
在AuthFilter过滤器中存在如下条件语句:
useragent请求头如果以Constants.NACOS_SERVER_HEADER开头,则直接放通,执行后续的业务处理,而Constants.NACOS_SERVER_HEADER定义的正是"Nacos-Server"。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (!authConfigs.isAuthEnabled()) {
chain.doFilter(request, response);
return;
}
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String userAgent = WebUtils.getUserAgent(req);
if (StringUtils.startsWith(userAgent, Constants.NACOS_SERVER_HEADER)) {
chain.doFilter(request, response);
return;
}
该功能用于内部服务之间的通信,但是实现方式不够安全。
官方文档描述如下:
开启鉴权功能后,服务端之间的请求也会通过鉴权系统的影响。考虑到服务端之间的通信应该是可信的,因此在1.2~1.4.0版本期间,通过User-Agent中是否包含Nacos-Server来进行判断请求是否来自其他服务端。
但这种实现由于过于简单且固定,导致可能存在安全问题。因此从1.4.1版本开始,Nacos添加服务身份识别功能,用户可以自行配置服务端的Identity,不再使用User-Agent作为服务端请求的判断标准。
四、防护措施
1.升级到最新版本,官方文档中描述1.2~1.4.0版本有该问题;
2.nacos服务尽量放在内部网络中运行,不要暴露到公网环境中,因为nacos默认提供的鉴权是弱鉴权,有被绕过的风险;
3.如果需要在公网环境运行,则按照官方指导自定义鉴权体系。
官方文档地址:
什么是 Nacos
五、测试总结
nacos服务默认端口为8848,在黑盒测试的时候,可以探测一下是否有这个端口,如果有,使用ip:port/nacos/#/login访问看看是否用了nacos服务,如果有使用再进行后续验证。
版权归原作者 xbpan_sec 所有, 如有侵权,请联系我们删除。