octodemo/demo-java-war-syft
GitHub: octodemo/demo-java-war-syft
一个故意包含过时依赖的Java Maven WAR演示应用,用于展示Syft SBOM扫描与GitHub高级安全功能的集成效果。
Stars: 0 | Forks: 0
# Demo Java WAR — Syft + GitHub Dependency Graph 演示
一个极简的 Maven WAR 应用程序,包含故意设置的**过时依赖项**,用于演示:
- 从打包的 WAR 文件生成 **Syft** SBOM
- **GitHub Dependency Graph Submission API** — Syft 作为依赖项数据的权威来源
- 仅通过 Syft 而非原生 pom.xml 扫描揭示的 **GHAS Dependabot 警报**
- 针对 Java 的 **CodeQL** 代码扫描
## 演示的工作原理
原生的 GitHub Dependency Graph 扫描器**无法**解析此仓库中的依赖项,因为:
1. `pom.xml`(根目录)是一个**纯粹的聚合器 POM**,没有 `` — 只有一个 `` 声明
2. `webapp/pom.xml`(子模块)将版本声明为 **Maven 属性占位符**(`${log4j.version}`、`${spring.version}` 等),静态扫描器无法解析它们
构建工作流使用 `anchore/sbom-action` (Syft) 扫描已编译的 `demo-java-war.war`,并将 SPDX SBOM 直接提交给 **GitHub Dependency Submission API**。这将填充 Dependency Graph 并触发 Dependabot 警报 — 证明 Syft 找到了原生工具遗漏的内容。
## 包含的易受攻击依赖项
| 库 | 版本 | CVE | 严重性 | 通用名称 |
|---------|---------|-----|----------|-------------|
| `log4j-core` | 2.14.1 | CVE-2021-44228 | 严重 | Log4Shell |
| `log4j-core` | 2.14.1 | CVE-2021-45046 | 严重 | Log4Shell 变种 |
| `spring-webmvc` | 5.3.17 | CVE-2022-22965 | 严重 | Spring4Shell |
| `commons-text` | 1.9 | CVE-2022-42889 | 严重 | Text4Shell |
| `jackson-databind` | 2.13.0 | CVE-2022-42003 | 高危 | — |
| `snakeyaml` | 1.29 | CVE-2022-25857 | 高危 | — |
## 前置条件
- Java 11+
- Maven 3.8+
- [Syft](https://github.com/anchore/syft)(在 macOS 上使用 `brew install syft`)
## 构建
```
mvn package -DskipTests
# 输出:webapp/target/demo-java-war.war
```
## Syft SBOM 生成(本地)
### 表格视图(快速扫描)
```
syft scan webapp/target/demo-java-war.war -o table
```
### CycloneDX JSON
```
syft scan webapp/target/demo-java-war.war -o cyclonedx-json=sbom.cdx.json
```
### SPDX JSON
```
syft scan webapp/target/demo-java-war.war -o spdx-json=sbom.spdx.json
```
### 通过管道传递给 Grype 进行漏洞匹配
```
syft scan webapp/target/demo-java-war.war -o cyclonedx-json | grype
```
## GitHub Actions
每次推送到 `main` 时:
| 工作流 | 功能说明 |
|----------|--------------|
| `build-and-sbom.yml` | 构建 WAR → 生成 Syft CycloneDX 构件,并将 SPDX 提交至 Dependency Graph API |
| `codeql.yml` | CodeQL Java 分析,结果位于 Security → Code scanning |
SBOM 构件可从 **Actions → 最新运行 → Artifacts** 下载。
## 演示的 GHAS 功能
### Dependabot 警报
**Security → Dependabot alerts** — 通过提交 Syft SBOM 填充,而非通过 pom.xml 扫描。
### Dependency Graph
**Insights → Dependency graph** — 数据源自 `anchore/sbom-action` 的 SPDX 上传。
### CodeQL 代码扫描
**Security → Code scanning alerts** — CodeQL Java 分析结果。
### Secret Scanning
公共仓库默认启用 — **Security → Secret scanning alerts**。
标签:DevSecOps, JS文件枚举, Maven, SBOM, 上游代理, 域名枚举, 漏洞演示环境, 漏洞验证, 硬件无关