OWASP Top 10 - 已知漏洞元件使用

OWASP Top 10 - Vulnerable and Outdated Components

漏洞元件概述

在現代軟體開發中,開發者大量依賴第三方套件與函式庫來加速開發流程。然而,這些外部元件可能包含已知的安全漏洞,成為攻擊者入侵系統的突破口。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(存在漏洞)

依賴管理重要性

有效的依賴管理策略包括:

  1. 定期更新依賴 - 保持套件版本最新
  2. 鎖定版本 - 使用 lock 檔案確保一致性
  3. 審計依賴 - 定期執行安全掃描
  4. 最小化依賴 - 只引入必要的套件

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 }}

防護措施

建立安全開發流程

  1. 導入軟體組成清單(SBOM)

    1
    2
    3
    
    # 使用 CycloneDX 產生 SBOM
    npm install -g @cyclonedx/cyclonedx-npm
    cyclonedx-npm --output-file sbom.json
    
  2. 設定安全閾值

    • 定義可接受的風險等級
    • 建立漏洞處理 SLA
  3. 定期安全審查

    • 每週執行依賴掃描
    • 每月審查安全報告

最佳實踐清單

實踐項目說明
版本鎖定使用 package-lock.json 或 Pipfile.lock
最小權限只安裝必要的套件
定期更新保持依賴版本最新
安全掃描整合 CI/CD 自動化掃描
監控警報訂閱安全公告與通知

參考資料

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy