morikumo/vuln-scanner-ci
GitHub: morikumo/vuln-scanner-ci
一个展示如何在 CI/CD 流水线中集成 OWASP ZAP 动态安全扫描的 DevSecOps 教学项目,涵盖 OWASP Top 10 常见漏洞的实际演示。
Stars: 0 | Forks: 0
# vuln-scanner-ci



CI/CD Pipeline,使用 **OWASP ZAP** 自动测试和扫描具有故意漏洞的 Web 应用程序。演示在 DevSecOps 流程中对 **OWASP Top 10** 漏洞的动态检测(DAST)。
## 🏗️ Pipeline 架构
```
Push sur main
│
▼
┌──────────────────┐
│ 🧪 Tests Jest │ ← Vérifie que chaque vulnérabilité est bien présente
└────────┬─────────┘
│ (si succès)
▼
┌──────────────────┐
│ 🚀 Démarrage │ ← L'app vulnérable démarre sur localhost:3000
│ de l'app │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 🔍 ZAP Baseline │ ← Headers manquants, misconfigurations (rapide)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 🔍 ZAP Full │ ← XSS, injections, auth failures (complet)
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 📊 Rapport HTML │ ← Artifact GitHub (30 jours)
└──────────────────┘
```
## 🛠️ 技术栈
| 工具 | 角色 |
|---|---|
| **Node.js + Express** | 故意存在漏洞的目标应用程序 |
| **Jest + Supertest** | 对漏洞路由进行单元测试 |
| **GitHub Actions** | Pipeline 编排 |
| **OWASP ZAP Baseline** | 快速扫描(headers, misconfigs) |
| **OWASP ZAP Full Scan** | 完整主动扫描(XSS, injections...) |
## 🐛 演示的 OWASP Top 10 漏洞
| OWASP | 漏洞 | 端点 | 示例 Payload |
|---|---|---|---|
| **A01** | IDOR | `GET /vuln/document/:id` | `/vuln/document/2` 无需认证 |
| **A01** | Mass Assignment | `PUT /vuln/user/:id` | `{"role":"admin"}` |
| **A02** | MD5 (算法已破解) | `POST /vuln/register` | Hash 明文返回 |
| **A03** | 反射型 XSS | `GET /vuln/hello?name=` | `?name=` |
| **A03** | SQL Injection | `GET /vuln/search?q=` | `?q='OR'1'='1` |
| **A05** | 配置泄露 | `GET /vuln/config` | 列出环境变量 |
| **A07** | Token 可预测 | `POST /vuln/login` | Token = base64(user:timestamp) |
| **A09** | 敏感日志 | `GET /vuln/admin/logs` | 明文密码 |
## 📁 项目结构
```
vuln-scanner-ci/
├── app/
│ ├── index.js # App Express avec routes vulnérables intégrées
│ ├── index.test.js # Tests Jest (vérifient les vulnérabilités)
│ └── package.json
├── Dockerfile
├── .zap/
│ └── rules.tsv # Seuils d'alerte ZAP (FAIL/WARN/IGNORE)
├── .github/
│ └── workflows/
│ └── ci.yml # Pipeline complet
├── .gitignore
└── README.md
```
## 🚀 本地运行
```
cd app
npm install
node index.js
# → http://localhost:3000
```
### 手动测试漏洞
```
# 反射型 XSS
curl "http://localhost:3000/vuln/hello?name="
# IDOR — 未登录访问 Alice 文档
curl "http://localhost:3000/vuln/document/2"
# SQL Injection
curl "http://localhost:3000/vuln/search?q='OR'1'='1"
# Config 系统暴露
curl "http://localhost:3000/vuln/config"
# Logs 包含明文密码
curl "http://localhost:3000/vuln/admin/logs"
# Login — token 可预测
curl -X POST http://localhost:3000/vuln/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
```
## 📊 查看 ZAP 报告
每次运行后 → **Actions → Artifacts** → 下载 `zap-baseline-report` 或 `zap-full-report`
| 颜色 | 级别 | 操作 |
|---|---|---|
| 🔴 红色 | High | 严重漏洞 |
| 🟠 橙色 | Medium | 重要漏洞 |
| 🟡 黄色 | Low | 未遵循最佳实践 |
| 🔵 蓝色 | Informational | 信息提示 |
## 🔄 自动每周扫描
Pipeline 会在**每周一 6 点**通过 GitHub Actions cron 自动触发,除 push/PR 外。
## 📚 参考资料
- [OWASP Top 10 2021](https://owasp.org/Top10/)
- [OWASP ZAP](https://www.zaproxy.org/)
- [OWASP Testing Guide](https://owasp.org/www-project-web-security-testing-guide/)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
## 📄 许可证
MIT
标签:CI/CD 安全, CISA项目, DAST, DevSecOps, Express, GitHub Actions, GNU通用公共许可证, GUI界面, Jest, meg, MITM代理, Node.js, OPA, OWASP Top 10, OWASP ZAP, SQL 注入检测, Web 安全, XSS 检测, 上游代理, 信息安全, 动态应用程序安全测试, 安全合规, 安全教育, 安全管道, 恶意软件分析, 数据投毒防御, 网络代理, 网络安全, 自动笔记, 自定义脚本, 请求拦截, 隐私保护, 靶场