OWASP Dependency Check 導入指引
導入效應
| 效應 |
說明 |
| CVE 漏洞掃描 |
自動掃描專案所有依賴套件的已知安全漏洞(CVE) |
| AI 依賴地獄防護 |
AI 極易引用老舊套件(如 log4j 2.14、jackson 2.8),Dependency Check 直接攔截 |
| NVD 資料庫同步 |
與 NIST NVD 資料庫同步,保持最新漏洞資訊 |
| CVSS 評分 |
提供漏洞嚴重程度評分(Critical / High / Medium / Low) |
| CI 門檻 |
設定 CVSS ≥ 7.0 時阻斷 Pipeline |
| 合規報告 |
產生 XML/HTML/JSON 報告,適合稽核與合規需求 |
1. Maven 導入
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>11.1.1</version>
<configuration>
<failBuildOnCVSS>7</failBuildOnCVSS>
<suppressionFiles>
<suppressionFile>dependency-check-suppressions.xml</suppressionFile>
</suppressionFiles>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
2. Gradle 導入
plugins {
id 'org.owasp.dependencycheck' version '11.1.1'
}
dependencyCheck {
failBuildOnCVSS = 7.0f
suppressionFiles = ['dependency-check-suppressions.xml']
formats = ['HTML', 'JSON', 'SARIF']
}
3. 執行掃描
# Maven
mvn dependency-check:check
# Gradle
./gradlew dependencyCheckAnalyze
# 產生報告位置
# target/dependency-check-report.html
4. 設定門檻
4.1 CVSS 門檻
<!-- Maven -->
<configuration>
<!-- CVSS ≥ 7.0 才 fail -->
<failBuildOnCVSS>7</failBuildOnCVSS>
<!-- 或設為 0 來 fail 所有已知漏洞 -->
<failBuildOnCVSS>0</failBuildOnCVSS>
</configuration>
4.2 常見 CVSS 分級
| CVSS |
嚴重程度 |
CI 行為 |
| 9.0 - 10.0 |
Critical |
必須立即修復 |
| 7.0 - 8.9 |
High |
Pipeline Fail |
| 4.0 - 6.9 |
Medium |
警告 |
| 0.1 - 3.9 |
Low |
記錄 |
5. Suppression 管理
5.1 Suppression 檔案
<!-- dependency-check-suppressions.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
<suppress>
<notes>此漏洞僅影響 CLI 模式,我們只用 Library 模式</notes>
<filePath regex="true">\.gradle/.*</filePath>
<cve>CVE-2021-12345</cve>
</suppress>
</suppressions>
5.2 局部 Suppression
// 在程式碼中標記
@SuppressCVSS(
cvss = "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
reason = "此漏洞僅在特定配置下觸發,已評估風險可接受",
url = "https://nvd.nist.gov/vuln/detail/CVE-2021-12345"
)
6. CI 整合
6.1 Azure Pipeline
- stage: SecurityScan
jobs:
- job: DependencyCheck
steps:
- task: Maven@4
inputs:
goals: 'dependency-check:check'
displayName: 'OWASP Dependency Check'
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(Build.SourcesDirectory)/target/dependency-check-report.html'
artifactName: 'security-report'
condition: always()
6.2 GitHub Actions
- name: Dependency Check
uses: dependency-check/Dependency-Check_Action@main
with:
path: '.'
format: 'HTML'
fail_on_cvss: 7
7. AI 產碼常見漏洞依賴
| AI 常引用的套件 |
已知 CVE |
替代方案 |
| log4j 2.14 |
CVE-2021-44228 (Log4Shell) |
log4j 2.17+ |
| jackson-databind 2.8 |
CVE-2019-12384 |
jackson-databind 2.15+ |
| spring-core 5.x |
CVE-2022-22965 (Spring4Shell) |
spring-core 5.3.18+ |
| commons-collections 3.x |
CVE-2015-6420 |
commons-collections 4.x |
| guava 27.x |
CVE-2018-10237 |
guava 32.x |
8. NVD API Key(提升掃描速度)
# 申請 NVD API Key(免費)
# https://nvd.nist.gov/developers/request-an-api-key
# 設定
export NVD_API_KEY=your-api-key
# 或在 Maven 設定
-Dnvd.api.key=your-api-key
9. 與 Snyk 比較
| 特性 |
OWASP Dependency Check |
Snyk |
| 來源 |
NVD (NIST) |
多來源 + proprietary |
| 掃描速度 |
較慢(需同步 NVD) |
快(Snyk DB) |
| 自動修復 |
無 |
有 (Snyk Fix PR) |
| License |
免費開源 |
商業模式 |
| 容器掃描 |
無 |
有 |
| 適合 |
純 Library 掃描 |
全面安全掃描 |
10. 參考資源