一个完整、真实、企业级风格的基于 Docker 的实验室,用于学习、测试和防御 CVE-2026-27483(MindsDB 路径遍历 → 远程代码执行)。本仓库提供可部署的实验室拓扑、配置文件、最小化容器镜像、检测规则和辅助脚本,使您能够安全地搭建一个隔离环境,练习发现、利用(已脱敏)和防御。
重要提示:本实验室有意包含存在漏洞的 MindsDB 版本,仅用于教育目的。请仅在隔离、离网环境中运行,切勿将其暴露于公共网络。
Internet (攻击者)
↓
反向代理 (nginx)
↓
┌─────────────────────────────────┐
│ MindsDB (存在漏洞) │ 端口 47334
│ - 易受 CVE-2026-27483 攻击 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ PostgreSQL 数据库 │ 端口 5432(内部)
│ - 存储 MindsDB 数据 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ ELK 技术栈(日志记录) │
│ - Elasticsearch, Logstash │ 端口 9200, 5000
│ - Kibana 仪表盘 │ 端口 5601
└─────────────────────────────────┘
各服务通过专用的 Docker 桥接网络(默认 172.20.0.0/16)连接。包含一个攻击者容器,用于对隔离的 MindsDB 服务执行受控的利用尝试。
默认情况下,Postgres 不打算暴露到公共互联网。compose 文件将内部服务映射到本地实验室使用。
前置条件:
git clone https://github.com/nabhan-mohy/cve-2026-27483-lab.git
cd cve-2026-27483-lab
cp .env.example .env
# 打开 .env 并确认 DB_PASSWORD 及其他值
重要提示:确保 .env 中的 DB_PASSWORD 与 compose 文件期望的密码一致。docker-compose.yml 中有一个默认值(${DB_PASSWORD:-P@ssw0rd123!})。请在 .env 中设置 DB_PASSWORD=P@ssw0rd123!,或编辑 docker-compose.yml 使用您偏好的密码。如果两者不匹配,MindsDB 将无法连接到 Postgres,服务将无法正常启动。
(可选)编辑 .env 以调整行为(启用/禁用功能、设置攻击者监听 IP 等)。
启动实验室(完整模式):
docker compose up -d --build
curl http://localhost:47334/api/statushttp://localhost:5601http://localhost:8080docker compose down
移除卷(破坏性操作):
docker compose down -v
README 中提到了最小化和监控配置档。为支持这些配置,您可以:
docker-compose.yml 中使用 profiles: 键将服务分离到 minimal 和 monitoring 配置档中,或docker-compose.minimal.yml),禁用重型组件(Elasticsearch/Kibana/Wazuh)以进行低资源测试。建议的最小化测试方法是注释掉或跳过 Elasticsearch/Kibana/Wazuh,仅运行:mindsdb、postgres、nginx-proxy 和 attacker。
反向代理(nginx-proxy):充当面向外部的端点,将攻击者流量路由到存在漏洞的 MindsDB 服务。代理还提供简单的仪表盘端口(8080)用于快速检查。
MindsDB(漏洞镜像):根据 README 中引用的漏洞版本打包。它将数据存储在 Postgres 中,并提供 API 端点,这些端点在旧版本中故意存在漏洞。
Postgres:存储 MindsDB 配置和工件。初始化 SQL 和种子数据在 configs/postgres/*.sql 中提供。
ELK 技术栈(Elasticsearch、Logstash、Kibana):从代理和应用程序收集日志,以便您构建检测规则和仪表盘。
Wazuh(可选):安全监控代理和管理器。作为占位符包含以演示集成;配置中的 TLS 证书和凭据是占位符,必须自行配置才能实现完整功能。
攻击者容器:包含实用工具(curl、netcat、python)的环境,并挂载了 exploits/ 文件夹,用于在同一 Docker 网络内运行挑战脚本(如果需要,可与主机网络隔离)。
备份服务:示例容器,用于演示真实的企业工作流(从 Postgres 拉取数据库转储的备份)。
docker compose exec -it attacker /bin/bash),对代理(端口 80/8080)和 MindsDB API(47334)进行侦察。exploits/ 和 docs/challenges/ 下添加,并附带指导和安全检查。示例:从攻击者容器执行基本侦察
# 进入攻击者容器
docker compose exec -it attacker /bin/bash
# 扫描网络或 curl 端点
curl -v http://nginx-proxy:80/
curl -v http://mindsdb:47334/api/status
冒烟测试脚本位于 scripts/smoke_test.sh(如果存在)。它执行以下检查:
/api/status 响应pg_isready 验证 Postgres 就绪状态在本地运行:
chmod +x scripts/smoke_test.sh
./scripts/smoke_test.sh
如果冒烟测试失败,请收集日志到 smoke_compose_logs.txt 并分享以进行调试:
docker compose logs --no-color > smoke_compose_logs.txt
Logstash 管道在 configs/logstash/logstash.conf 中提供,用于将日志转发到 Elasticsearch。附带的 Sigma 规则 rules/sigma/cve-2026-27483.yml 是一个简单示例,用于标记可疑的路径遍历模式(包含 .. 的请求)。将其作为起点并优化以减少误报。
创建 Kibana 仪表盘以可视化:
.env 和 docker-compose.yml 之间的数据库密码不匹配所致。请确保两者使用相同的密钥。docker compose logs -f mindsdb 以查看堆栈跟踪和数据库连接错误。docker-compose.yml 中的 ES_JAVA_OPTS(示例:-Xms256m -Xmx256m)以适配小型主机。mindsdb:47334),并且 mindsdb 容器健康。如果需要调试帮助,请运行冒烟测试并分享 smoke_compose_logs.txt。
欢迎贡献。建议的协助方式:
docs/ 下的文档(部署、挑战、检测、事件响应)exploits/ 中添加带分步学习指南的脱敏挑战脚本请针对 main 分支提交 PR,并在添加教育性利用材料时遵循 CONTRIBUTING 指南。
为安全社区用心制作 ❤️