octodemo/demo-java-war-syft
GitHub: octodemo/demo-java-war-syft
Stars: 0 | Forks: 0
# Demo Java WAR — Syft + GitHub Dependency Graph Demo
A minimal Maven WAR application with intentionally **outdated dependencies** for demonstrating:
- **Syft** SBOM generation from a packaged WAR file
- **GitHub Dependency Graph Submission API** — Syft as the authoritative source of dependency data
- **GHAS Dependabot alerts** surfaced exclusively via Syft, not native pom.xml scanning
- **CodeQL** code scanning for Java
## How the Demo Works
The native GitHub Dependency Graph scanner **cannot** resolve the dependencies in this repo because:
1. `pom.xml` (root) is a **bare aggregator POM** with no `` — just a `` declaration
2. `webapp/pom.xml` (child) declares versions as **Maven property placeholders** (`${log4j.version}`, `${spring.version}`, etc.) which the static scanner fails to resolve
The build workflow uses `anchore/sbom-action` (Syft) to scan the compiled `demo-java-war.war` and submit an SPDX SBOM directly to the **GitHub Dependency Submission API**. This populates the Dependency Graph and triggers Dependabot alerts — proving that Syft finds what the native tooling misses.
## Vulnerable Dependencies Included
| Library | Version | CVE | Severity | Common Name |
|---------|---------|-----|----------|-------------|
| `log4j-core` | 2.14.1 | CVE-2021-44228 | Critical | Log4Shell |
| `log4j-core` | 2.14.1 | CVE-2021-45046 | Critical | Log4Shell variant |
| `spring-webmvc` | 5.3.17 | CVE-2022-22965 | Critical | Spring4Shell |
| `commons-text` | 1.9 | CVE-2022-42889 | Critical | Text4Shell |
| `jackson-databind` | 2.13.0 | CVE-2022-42003 | High | — |
| `snakeyaml` | 1.29 | CVE-2022-25857 | High | — |
## Prerequisites
- Java 11+
- Maven 3.8+
- [Syft](https://github.com/anchore/syft) (`brew install syft` on macOS)
## Build
mvn package -DskipTests
# Output: webapp/target/demo-java-war.war
## Syft SBOM Generation (local)
### Table view (quick scan)
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
### Pipe into Grype for vulnerability matching
syft scan webapp/target/demo-java-war.war -o cyclonedx-json | grype
## GitHub Actions
On every push to `main`:
| Workflow | What it does |
|----------|--------------|
| `build-and-sbom.yml` | Builds WAR → Syft CycloneDX artifact + SPDX submission to Dependency Graph API |
| `codeql.yml` | CodeQL Java analysis, results in Security → Code scanning |
SBOM artifacts are downloadable from **Actions → latest run → Artifacts**.
## GHAS Features Demonstrated
### Dependabot Alerts
**Security → Dependabot alerts** — populated via Syft SBOM submission, not pom.xml scanning.
### Dependency Graph
**Insights → Dependency graph** — sourced from the `anchore/sbom-action` SPDX upload.
### CodeQL Code Scanning
**Security → Code scanning alerts** — CodeQL Java analysis results.
### Secret Scanning
Enabled by default for public repos — **Security → Secret scanning alerts**.
标签:域名枚举