前言
工作中遇到一個nacos服務認證繞過的問題,在此總結一下漏洞原因。
一、nacos簡介
官方文檔描述:
Nacos 致力于幫助您發(fā)現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態(tài)服務發(fā)現、服務配置、服務元數據及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現代應用架構 (例如微服務范式、云原生范式) 的服務基礎設施。
二、漏洞復現
參考其它的文章:
Alibaba Nacos權限認證繞過 - 云+社區(qū) - 騰訊云
三、漏洞原因
在AuthFilter過濾器中存在如下條件語句:
useragent請求頭如果以Constants.NACOS_SERVER_HEADER開頭,則直接放通,執(zhí)行后續(xù)的業(yè)務處理,而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服務盡量放在內部網絡中運行,不要暴露到公網環(huán)境中,因為nacos默認提供的鑒權是弱鑒權,有被繞過的風險;
3.如果需要在公網環(huán)境運行,則按照官方指導自定義鑒權體系。
官方文檔地址:
什么是 Nacos文章來源:http://www.zghlxwxcb.cn/news/detail-411903.html
五、測試總結
nacos服務默認端口為8848,在黑盒測試的時候,可以探測一下是否有這個端口,如果有,使用ip:port/nacos/#/login訪問看看是否用了nacos服務,如果有使用再進行后續(xù)驗證。文章來源地址http://www.zghlxwxcb.cn/news/detail-411903.html
到了這里,關于【認證繞過】NACOS身份認證繞過漏洞分析的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!