Kong未授权访问漏洞(CVE-2020-11710)分析报告
1. 漏洞概述
Kong是一款开源的、"云原生"(cloud-native)的API Gateway应用程序,通过其丰富的插件可以实现对访问流量的精细控制、访问鉴权等功能。CVE-2020-11710是Kong社区版中存在的一个未授权访问漏洞,允许攻击者通过公开暴露的Admin Restful API端口管理Kong Gateway的全部功能。
2. 受影响版本
- Kong Gateway Community (社区版) version <= 2.0.2
- Kong Enterprise (企业版)不受影响,因其支持角色控制和鉴权
3. 漏洞原理
3.1 默认端口配置
Kong默认使用以下端口:
| 端口类型 | HTTP端口 | HTTPS端口 | 用途说明 |
|---|---|---|---|
| Admin Restful API | 8001 | 8444 | 管理接口,应仅限管理员访问 |
| Proxy Port | 8000 | 8443 | 提供给公网访问的代理端口 |
3.2 漏洞根本原因
漏洞源于不恰当的配置导致"Admin Restful API的端口可被公网访问"。具体表现为:
- 默认安装配置中,Admin API监听在
0.0.0.0(所有网络接口) - Docker容器映射时直接将8001和8444端口暴露给外部网络
4. 漏洞复现
4.1 漏洞环境搭建
使用修复漏洞前的官方安装步骤(使用Docker安装Kong Gateway Community):
$ docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
关键问题参数:
-p 8001:8001:将容器的8001端口映射到主机的8001端口,允许外部访问-p 8444:8444:同上,针对HTTPS端口KONG_ADMIN_LISTEN=0.0.0.0:8001:Admin API监听所有网络接口
4.2 漏洞验证
直接访问http://目标IP:8001或https://目标IP:8444,若能获取Kong的管理API响应,则存在漏洞。
5. 漏洞利用
攻击者可以利用此未授权访问漏洞执行以下操作:
5.1 信息泄露
通过Admin API获取当前配置信息,包括所有"服务"地址等敏感信息。
5.2 可回显的SSRF
通过添加Route到内网其他重要"(web)服务"实现可回显Response的SSRF攻击。在云环境中,此类SSRF危害更大,可能通过访问云提供商的管理API获取云服务器访问权限。
5.3 MITM攻击
攻击者可实现中间人攻击,劫持所有普通用户发向某个"(web)服务"的HTTP/HTTPS请求和响应。
MITM攻击流程
- 复制现有API:复制原本存在的Kong api_1得到Kong api_2,两者都指向service 1
- 创建并配置MITM站点:
- 创建中间人站点mitm.evil.com
- 配置该站点实现请求处理(保存/修改/丢弃等),并将处理后的请求转发到Kong api_2
- 修改原API指向:将Kong api_1指向的服务从service 1改为mitm.evil.com
劫持效果
用户访问流程变为:
client → Kong api_1(hijacking) → mitm.evil.com(forwarding) → api_2 → service 1
service 1 → api_2 → mitm.evil.com(forwarding) → Kong api_1(hijacking) → client
MITM检测特征
- 被劫持服务(service 1)只能收到来自mitm.evil.com的请求
- Kong服务器会主动连接互联网的mitm.evil.com
6. 修复方案
6.1 配置修复
-
限制Admin API访问:
- 修改docker-compose.yaml,将:
改为:-p 8001:8001 -p 8444:8444-p 127.0.0.1:8001:8001 -p 127.0.0.1:8444:8444 - 或者修改Kong配置中的
KONG_ADMIN_LISTEN为127.0.0.1:8001
- 修改docker-compose.yaml,将:
-
设置严格的ACL:仅允许必要的IP访问Admin API端口
6.2 升级建议
升级到Kong Gateway Community 2.0.3及以上版本,官方已修复此问题。
7. 总结
CVE-2020-11710的根本原因是Kong社区版默认配置不当导致Admin Restful API端口暴露给公网。由于Kong常作为API网关部署在云环境中,且管理南北向流量,一旦存在未授权访问漏洞,危害极大。管理员应:
- 严格限制Admin API的访问权限
- 定期检查Kong的配置安全性
- 及时更新到最新版本
此漏洞提醒我们,即使是功能强大的API网关,不当的配置也可能导致严重的安全问题,特别是在云环境中部署时更需谨慎。