scadastrangelove/damn-vulnerable-rust-app

GitHub: scadastrangelove/damn-vulnerable-rust-app

一套故意包含多种漏洞的 Rust 安全代码审查基准与培训靶场,通过三个递进规模的实验环境帮助安全审计人员和安全工程师练习 Rust 特有的漏洞识别与审查技能。

Stars: 2 | Forks: 0

# Damn Vulnerable Rust Application (DVRA)

Damn Vulnerable Rust Application logo

此代码库包含三个 Rust 安全基准测试实现,它们均遵循 共享的 DVRA 规范。每个实现都模拟了一个故意包含漏洞的 工件处理应用程序,但规模各有不同:从密集的 仅依赖 std 的代码审查目标,到更完整的包含 Docker、Miri、Loom、 模糊测试和 SSRF 配置的 Axum Web 实验室。 所有实现都是故意设计为包含漏洞的。请勿将它们作为公共服务运行,请勿附加真实密钥,请勿挂载主目录,请勿暴露 SSH/GPG 代理,或 挂载 Docker socket。繁重的 Docker、Miri、模糊测试和 sanitizer 门禁应 仅在一次性环境中运行,例如本地 VM 或临时的远程 构建器。 ## 应用程序模型 DVRA 模拟了一个工件处理平台:租户拥有项目,上传或 获取工件,解析自定义二进制记录,运行 worker 端的后处理, 并与内部服务(如虚假的 metadata endpoint)进行交互。这种架构 有意设计得足够宽泛,以锻炼常规的 Web 安全和 Rust 特有的审查技能: - 多租户授权和对象所有权; - 解析器/验证器差异和模糊测试目标; - 文件系统和 bundle 解压边界; - 由配置或租户输入控制的命令执行; - HTTP 获取、重定向和 SSRF; - unsafe 代码的不变式、panic 安全性、`Send`/`Sync`、Miri 和 Loom; - 可疑代码是安全的、废弃的或不受 攻击者控制的误报。 ## 代码库结构表 | 路径 | 模拟内容 | 基准测试资产 | | --- | --- | --- | | `dvra-1/` | 用于密集代码审查练习的紧凑型仅 std 请求路由器:搜索、文档、文件处理、解析、认证、钩子、unsafe/FFI 审查。 | `instructor-oracle/` 中的 22 个黄金标签发现;`scenarios/public/index.toml` 中的学习者提示;本地和 Docker 审计门禁。 | | `dvra-2/` | 包含 Axum API、离线 worker、mock metadata 服务、解析器 crate、unsafe-cache 实验室和 Docker/Miri 配置的工件处理服务。 | `instructor-oracle/scenarios.yaml` 中的黄金标签;公开的 YAML 场景;`dvra-labctl` 复现脚本和审计。 | | `dvra-3/` | 更完整的 Axum Web 实验室,包含漏洞/修复对比路由、bundle 上传/解压、URL 获取/SSRF、虚假 metadata、解析器和 unsafe-cache 场景。 | `instructor-oracle/scenarios.yaml` 中的黄金标签;公开的 Markdown 场景;`labctl` 复现脚本和 Compose SSRF 配置。 | | `tools/dvra-docker` | 代码库级别的 Docker/Compose 门面,用于一致地运行这三个实现。 | `config`、`build`、test、audit、Miri 和 SSRF 配置命令。 | | `rust-security-code-review-canonical_1.md` | 用作共享审查词汇的 Rust 安全审查清单。 | 用于手动审查和评分标准设计的参考材料。 | 有关已发布的黄金标签 oracle 位置,请参见 `BENCHMARK.md`。 ## 共享 Docker 门面 从代码库根目录使用 `tools/dvra-docker` 来发现并运行 容器化工作流: ``` tools/dvra-docker list tools/dvra-docker dvra-1 test tools/dvra-docker dvra-1 audit tools/dvra-docker dvra-2 config tools/dvra-docker dvra-2 up tools/dvra-docker dvra-3 config tools/dvra-docker dvra-3 ssrf-config ``` 默认命令是刻意保持保守的。危险或繁重的门禁 仍需显式调用(`dvra-1 test-ffi`、`dvra-2 miri-008`、`dvra-2 miri-013`、 `dvra-3 ssrf-up`)。 ## 实现 1 `dvra-1` 是一个紧凑的审查基准测试,具有明确的学习者/黄金标签划分: - 它是一个小型的仅依赖 std 的请求路由器,而不是实时 Web 服务器。 - 该领域是一个内部服务,包含用于用户搜索、文档 访问、文件下载/上传、代理、解析、认证、钩子和可选 FFI 的路由。 - 它在设计上非常密集:22 个植入的审查案例包括可达的 bug、诱饵、 仅限 fuzz/Miri 的案例,以及依赖于威胁模型的发现。 - `source/` 包含面向学习者的 Rust crate; - `scenarios/public/index.toml` 包含面向学习者的场景提示; - `instructor-oracle/MANIFEST.toml` 和 `instructor-oracle/ANSWER_KEY.md` 发布基准测试的黄金标签; - `tools/dvra1` 构建学习者安全的 bundle 并审计布局; - `infrastructure/compose.yaml` 在 隔离的容器中运行默认的测试/审计门禁。 主要入口点: ``` cd dvra-1 ./tools/dvra1 test ./tools/dvra1 audit ./tools/dvra1 package-learner ../tools/dvra-docker dvra-1 test ``` ## 实现 2 `dvra-2` 是一个现实的工件处理服务,包含独立的应用程序、 crate、场景清单、Docker 支持和 QA 文档。 - `apps/api` 暴露了租户/项目工件 API 和一个故意 未注册的遗留解码器。 - `apps/worker` 在隔离的 `/tmp/dvra` 工作区下处理工件。 - `apps/mock-metadata-service` 支持隔离的网络/安全练习。 - 场景集涵盖了跨租户 IDOR、依赖于配置的 shell 执行、 解析器偏移不匹配、panic 不健全的 unsafe 集合、无效的 `Send`/`Sync`、 不可达的 unsafe 缺陷,以及固定的程序 `Command::new` 误 报。 - 繁重的路径使用 Docker 配置和 Miri/Loom 复现命令。 主要入口点: ``` cd dvra-2 cargo run -p dvra-labctl -- audit cargo run -p dvra-labctl -- doctor cargo test --workspace --locked ``` 文档: - `dvra-2/README.md` — 实现概述; - `dvra-2/docs/completeness.md` — MVP 完整性检查清单; - `dvra-2/docs/qa.md` — QA 计划和发布检查清单; - `dvra-2/docs/verification.md` — 本地和 Docker/Miri 门禁; - `dvra-2/docs/instructor-guide.md` — 面向指导者的工作流。 繁重的 Docker/Miri 门禁应在具有 Docker Compose 的一次性环境中运行。 ## 实现 3 `dvra-3` 是一个更完整的 Axum 应用程序实验室: - `apps/api` 是一个带有漏洞和修复对比路由的 Axum Web API。 - 租户可以读取工件、提交 bundle、触发解析器路径、运行受限的 后处理,并要求服务获取 URL。 - `apps/metadata-service` 是一个由 SSRF 实验室使用的内部虚假云 metadata 服务。 - 各个 crate 将应用程序拆分为配置、bundle 解析、HTTP 获取策略、二进制 解析器、领域模型和 unsafe-cache 实验室。 - 场景集涵盖了 IDOR、命令注入、解析器标准化 bug、 panic 安全性、无效的 `Sync`、不可达的命令注入、调试密钥 日志记录、bundle 路径穿越,以及针对虚假 metadata 的 SSRF。 - `scenarios/public` 包含面向学习者的描述; `instructor-oracle/scenarios.yaml` 发布基准测试的黄金标签。 - `scripts/labctl` 和 `infrastructure/compose*.yaml` 提供本地、 Dockerized 和 SSRF 配置工作流。 主要入口点: ``` cd dvra-3 ./scripts/labctl verify-layout ./scripts/labctl doctor ./scripts/labctl test ../tools/dvra-docker dvra-3 config ``` 导入归档和生成的学习者 bundle 被刻意忽略,不受 git 管理; 已发布的代码库包含源代码、文档、场景和 Docker 工作流。 ## 共享规范 所有三个实现都遵循相同的高级规则: - 面向学习者的场景元数据和基准测试黄金标签是独立的文件; - 出于基准测试的目的,故意发布了植入的缺陷、诱饵、可达性标签和预期的工具信号; - 每个实现都需要清晰的复现和验证说明; - 危险的运行时路径需要显式的门禁以及 Docker/一次性执行 路径; - 历史、FFI、供应链和编译器漏洞实验室绝不能意外地 成为普通根构建的一部分。 ## 联系方式 Sergey Gordeychik - 电子邮件:scadastrangelove@gmail.com - X/Twitter:[@scadasl](https://x.com/scadasl) - 博客:[scadastrangelove.blogspot.com](https://scadastrangelove.blogspot.com/) 欢迎提交 Issue 和 pull request。 ## 许可证 Apache-2.0 — 参见 [LICENSE](https://github.com/scadastrangelove/damn-vulnerable-rust-app/blob/main/LICENSE)。
标签:Docker, Rust, Web安全, 可视化界面, 安全防御评估, 安全靶场, 版权保护, 网络流量审计, 蓝队分析, 请求拦截, 通知系统