漏洞元件概述
在現代軟體開發中,開發者大量依賴第三方套件與函式庫來加速開發流程。然而,這些外部元件可能包含已知的安全漏洞,成為攻擊者入侵系統的突破口。OWASP 將「已知漏洞元件使用(Vulnerable and Outdated Components)」列為 Top 10 安全風險之一,強調依賴管理的重要性。
什麼是已知漏洞元件?
已知漏洞元件指的是:
- 使用過時且不再維護的套件版本
- 包含已公開 CVE(Common Vulnerabilities and Exposures)的元件
- 未經安全審計的第三方程式碼
- 具有已知安全問題但尚未修補的函式庫
常見風險場景
1. 過時的框架版本
1
2
| # 檢查專案中的過時套件
npm outdated
|
使用過時的 Node.js 框架可能導致:
- 遠端程式碼執行(RCE)
- SQL 注入攻擊
- 跨站腳本攻擊(XSS)
2. 供應鏈攻擊
攻擊者可能透過以下方式入侵:
- 劫持熱門套件的維護權限
- 發布帶有惡意程式碼的套件更新
- 利用相似名稱的惡意套件(typosquatting)
3. 傳遞性依賴風險
您的專案可能直接依賴套件 A,而套件 A 又依賴存在漏洞的套件 B:
1
| 專案 → 套件 A(安全) → 套件 B(存在漏洞)
|
依賴管理重要性
有效的依賴管理策略包括:
- 定期更新依賴 - 保持套件版本最新
- 鎖定版本 - 使用 lock 檔案確保一致性
- 審計依賴 - 定期執行安全掃描
- 最小化依賴 - 只引入必要的套件
npm audit 使用
npm 內建的安全審計工具可以快速識別 Node.js 專案中的漏洞。
基本使用
1
2
3
4
5
6
7
8
| # 執行安全審計
npm audit
# 產生 JSON 格式報告
npm audit --json
# 只顯示高風險以上的漏洞
npm audit --audit-level=high
|
自動修復
1
2
3
4
5
6
7
8
| # 自動修復可修復的漏洞
npm audit fix
# 強制更新主要版本(可能破壞相容性)
npm audit fix --force
# 只執行乾跑,預覽變更
npm audit fix --dry-run
|
輸出範例
1
2
3
4
5
6
7
8
| # npm audit report
lodash <4.17.21
Severity: critical
Prototype Pollution - https://github.com/advisories/GHSA-jf85-cpcp-j695
fix available via `npm audit fix`
1 critical severity vulnerability
|
pip-audit 使用
Python 專案可使用 pip-audit 進行依賴安全掃描。
安裝與基本使用
1
2
3
4
5
6
7
8
9
10
11
| # 安裝 pip-audit
pip install pip-audit
# 掃描當前環境
pip-audit
# 掃描 requirements.txt
pip-audit -r requirements.txt
# 輸出 JSON 格式
pip-audit --format=json
|
進階選項
1
2
3
4
5
6
7
8
| # 使用 OSV 資料庫進行掃描
pip-audit --vulnerability-service osv
# 忽略特定漏洞
pip-audit --ignore-vuln PYSEC-2021-XXX
# 嚴格模式(發現漏洞時返回非零狀態碼)
pip-audit --strict
|
輸出範例
1
2
3
4
5
| Found 2 known vulnerabilities in 1 package
Name Version ID Fix Versions
------- ------- -------------- ------------
django 2.2.0 CVE-2019-14232 2.2.4,2.1.11
django 2.2.0 CVE-2019-14233 2.2.4,2.1.11
|
OWASP Dependency-Check
OWASP Dependency-Check 是一款功能強大的軟體組成分析(SCA)工具。
安裝
1
2
3
4
5
6
| # 使用 Homebrew 安裝(macOS)
brew install dependency-check
# 下載獨立版本
wget https://github.com/jeremylong/DependencyCheck/releases/download/v8.4.0/dependency-check-8.4.0-release.zip
unzip dependency-check-8.4.0-release.zip
|
基本使用
1
2
3
4
5
6
7
8
| # 掃描專案目錄
dependency-check --scan /path/to/project --out report
# 指定輸出格式
dependency-check --scan ./project --format HTML --out ./reports
# 更新漏洞資料庫
dependency-check --updateonly
|
Maven 整合
1
2
3
4
5
6
7
8
9
10
11
12
| <plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>8.4.0</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
|
執行掃描:
1
| mvn dependency-check:check
|
Snyk 掃描工具
Snyk 提供全面的軟體供應鏈安全解決方案。
安裝與設定
1
2
3
4
5
6
7
8
| # 使用 npm 安裝
npm install -g snyk
# 認證
snyk auth
# 或使用 token 認證
snyk auth YOUR_API_TOKEN
|
漏洞掃描
1
2
3
4
5
6
7
8
| # 測試專案漏洞
snyk test
# 掃描容器映像
snyk container test nginx:latest
# 掃描 IaC 配置
snyk iac test ./terraform
|
持續監控
1
2
3
4
5
6
7
8
| # 將專案加入監控
snyk monitor
# 指定專案名稱
snyk monitor --project-name=my-app
# 監控 Docker 映像
snyk container monitor nginx:latest
|
輸出範例
1
2
3
4
5
6
7
| Testing /path/to/project...
✗ High severity vulnerability found in express
Description: Prototype Pollution
Info: https://snyk.io/vuln/SNYK-JS-EXPRESS-1234567
Introduced through: express@4.17.0
Fix: Upgrade to express@4.18.2
|
自動化修補策略
GitHub Dependabot 設定
在專案根目錄創建 .github/dependabot.yml:
1
2
3
4
5
6
7
8
9
10
11
12
| version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
|
CI/CD 整合
在 GitHub Actions 中整合安全掃描:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| name: Security Scan
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run npm audit
run: npm audit --audit-level=high
- name: Run Snyk
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
|
防護措施
建立安全開發流程
導入軟體組成清單(SBOM)
1
2
3
| # 使用 CycloneDX 產生 SBOM
npm install -g @cyclonedx/cyclonedx-npm
cyclonedx-npm --output-file sbom.json
|
設定安全閾值
定期安全審查
最佳實踐清單
| 實踐項目 | 說明 |
|---|
| 版本鎖定 | 使用 package-lock.json 或 Pipfile.lock |
| 最小權限 | 只安裝必要的套件 |
| 定期更新 | 保持依賴版本最新 |
| 安全掃描 | 整合 CI/CD 自動化掃描 |
| 監控警報 | 訂閱安全公告與通知 |
參考資料