Communitygithub.com

mstfknn/sast-skills

將你的 AI 編碼助手轉變為全面的靜態應用程式安全測試掃描器的技能集合。

sast-skills 是什麼?

sast-skills 是一個專為 AI 編碼助手設計的技能集,能將它們轉變為強大的靜態應用程式安全測試掃描器。它包含了 31 項技能,覆蓋 28 種漏洞類別,從注入攻擊、存取控制缺陷、弱加密,到業務邏輯和 LLM 特定的風險(如提示注入和輸出處理問題)。該工具採用四階段編排流程:偵察、並行檢測、報告合併和基於證據的審核,所有階段均由 `CLAUDE.md` 或 `AGENTS.md` 驅動。它支援多種 AI 助手,包括 Claude Code、Codex、OpenCode 和 Cursor,並能產生機器可讀的 JSON 或 SARIF 格式輸出,方便整合至 GitHub Code Scanning 和 CI/CD 流程。其運作是冪等的,支援中斷後續掃,並提供零配置的 CLI 工具進行安裝、更新、卸載和匯出。

相容平台✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/mstfknn/sast-skills/tree/main

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

預覽

來自技能 README

npm version
CI
License: MIT
Node.js

說明文件

sast-skills 是做什麼的?

npm version CI License: MIT Node.js

將你的 LLM 編碼助手轉變為功能全面的 SAST 掃描器。為 Claude Code、Codex、Opencode、Cursor 以及任何載入 CLAUDE.md / AGENTS.md 技能資料夾的助手提供即插即用的代理技能。

建議使用 Claude Code with Opus 以獲得最佳品質;任何有能力的模型均可使用。

亮點

  • 31 項技能涵蓋 28 種漏洞類別 — 注入、中斷的存取控制、弱加密、檔案處理、供應鏈、業務邏輯,以及 LLM 特定風險(提示注入、不安全的輸出處理)。
  • 四階段編排 — 偵察 → 並行檢測 → 合併報告 → 基於證據的審核,完全由 CLAUDE.md / AGENTS.md 驅動。
  • 冪等且可恢復 — 每個階段會跳過已存在輸出檔案的工作;修復問題後重新執行只會重新整理過時的內容。
  • 機器可讀輸出 — 每項技能都產生標準 JSON;sast-skills export 將其彙整為 JSON、SARIF 2.1.0 或 HTML 格式,適用於 GitHub Code Scanning 和 CI。
  • 跨助手支援 — 為 Claude Code (.claude/skills) 和每個 AGENTS.md 助手 (.agents/skills) 提供相同的技能。
  • 零設定 CLI — install / update / uninstall / doctor / export 指令,從 GitHub Actions 發布並帶有 npm 原始碼證明 (SLSA 證明)。

流程

編排器執行四個階段 — 偵察、並行檢測、綜合分析和審核:

flowchart TD
    U(["User: 執行漏洞掃描"]) --> R{"CLAUDE.md / AGENTS.md 編排器"}
    R --> S1["步驟 1 — sast-analysis<br/>程式碼庫和架構對映"]
    S1 -->|sast/architecture.md| S2["步驟 2 — 並行漏洞掃描<br/>28 項技能:偵察、批次驗證、合併"]
    S2 -->|sast/*-results.md 和 *-results.json| S3["步驟 3 — sast-report<br/>合併並排序"]
    S3 -->|sast/final-report.md| S4["步驟 4 — sast-triage<br/>假陽性消除、<br/>基於證據的嚴重性調整"]
    S4 -->|sast/final-report-triaged.md 和 triaged.json| EXP["npx sast-skills export<br/>JSON, SARIF, HTML"]
    EXP --> CS(["GitHub Code Scanning, CI, 儀表板"])

每個步驟都是冪等的:如果其輸出檔案已存在,編排器會跳過它。修復問題後重新執行掃描只會重新整理過時的內容。


它檢測的內容

所有技能都遵循相同的三階段模式:偵察 → 批次驗證(並行子代理,每批 3 個) → 合併。每個技能會寫入一份人類可讀的 Markdown 報告和一組標準 JSON 發現結果,sast-skills export 會對其進行彙整。

偵察與綜合分析

技能角色
sast-analysis程式碼庫偵察、架構對映、威脅模型
sast-report將各類別的發現結果合併為排序報告
sast-triage移除假陽性並根據程式碼庫證據調整嚴重性

注入

技能漏洞類別
sast-sqliSQL 注入
sast-nosqlNoSQL 注入 (Mongo, Firestore, DynamoDB)
sast-ldapLDAP 過濾器 / DN 注入
sast-graphql不安全的 GraphQL 文件建構
sast-xss跨站指令碼攻擊
sast-ssti伺服器端模板注入
sast-rce遠端程式碼執行 (指令注入, eval, 不安全的反序列化)
sast-xxeXML 外部實體
sast-ssrf伺服器端請求偽造
sast-openredirect開放重定向 (釣魚 / OAuth 令牌盜竊)

存取控制與認證

技能漏洞類別
sast-idor不安全的直接物件參照
sast-missingauth缺少認證 / 中斷的功能級別授權
sast-jwt不安全的 JWT 實作
sast-csrf跨站請求偽造
sast-corsCORS 設定錯誤

檔案、加密與執行時期

技能漏洞類別
sast-pathtraversal路徑 / 目錄遍歷
sast-fileupload不安全的檔案上傳
sast-crypto弱加密原語、不良模式、IV 重用、弱 PRNG
sast-prototypeJavaScript 原型污染
sast-redos災難性回溯正規表示式 DoS
sast-race競爭條件和 TOCTOU

資料暴露與供應鏈

技能漏洞類別
sast-hardcodedsecrets客戶端程式碼中的 API 金鑰 / 令牌 / 憑證
sast-pii記錄 / 遙測 / 錯誤頁面中的 PII 和憑證洩漏
sast-deps已知漏洞依賴項 (鎖定檔中的 CVE)
sast-iac不安全的 IaC (Dockerfile / Terraform / Kubernetes / GitHub Actions)

業務邏輯與 LLM 特定

技能漏洞類別
sast-businesslogic價格操縱、工作流程繞過、獎勵濫用
sast-promptinjection未受信任的文字到達 LLM 提示 (OWASP LLM #1)
sast-llmoutput未經驗證的 LLM 輸出到達程式碼 / HTML / SQL / Shell 接收器 (OWASP LLM #2)

安裝

npx sast-skills install

安裝程式會詢問要針對哪個助手 (claude / agents / all),以及要安裝到目前專案還是使用者家目錄 (project / global)。若要跳過提示:

npx sast-skills install --yes --assistant claude --scope project

如果你的專案已包含 CLAUDE.md 或 AGENTS.md,安裝程式預設會拒絕覆蓋 — 請先備份或傳遞 --force 參數。

手動安裝 (不使用 npx / npm)

如果你無法執行 npx (企業代理、npm 註冊表無法訪問、離線環境),或者你想鎖定此分支的原始碼而非已發布的 npm 套件,請使用此路徑。CLI 安裝程式只做兩件事 — 將編排器入口檔案放入專案根目錄,並將每個技能的 SKILL.md 鏡像到正確的隱藏目錄 — 因此簡單的 cp -R 即可完全重現。

1. 取得綑綁檔案

git clone https://github.com/mstfknn/sast-skills.git

你需要的所有檔案都在 sast-skills/sast-files/ 下:

sast-files/
├── CLAUDE.md                       # Claude Code 的編排器入口
├── AGENTS.md                       # Gemini CLI / Codex / OpenCode / Cursor 的編排器入口
├── .claude/skills/sast-*/SKILL.md  # 31 項 Claude Code 格式的技能
└── .agents/skills/sast-*/SKILL.md  # 為 AGENTS.md 助手鏡像的相同 31 項技能

這兩個技能樹由 npm run sync 保持同步 — 內容相同,僅目錄名稱不同。

2a. 為 Claude Code 安裝

設定 SAST_SRC 為克隆路徑,使以下命令保持可複製貼上:

export SAST_SRC=/absolute/path/to/sast-skills
cd /path/to/your-project

專案範圍 (建議使用 — 與你的儲存庫一同版本化):

cp "$SAST_SRC/sast-files/CLAUDE.md" ./CLAUDE.md
cp -R "$SAST_SRC/sast-files/.claude" ./

如果你已經使用專案層級的 CLAUDE.md,請勿覆蓋它 — Claude Code 每個專案只讀取一個 CLAUDE.md。請改為將編排器內容 (四個階段流程) 合併到你現有的檔案中。

全域範圍 (技能在每個專案中皆可用;編排器仍需按專案複製):

mkdir -p ~/.claude/skills
cp -R "$SAST_SRC/sast-files/.claude/skills/." ~/.claude/skills/
# 然後在你想要執行掃描流程的任何專案中:
cp "$SAST_SRC/sast-files/CLAUDE.md" /path/to/your-project/CLAUDE.md

2b. 為 Gemini CLI (和其他 AGENTS.md 助手) 安裝

export SAST_SRC=/absolute/path/to/sast-skills
cd /path/to/your-project
cp "$SAST_SRC/sast-files/AGENTS.md" ./AGENTS.md
cp -R "$SAST_SRC/sast-files/.agents" ./

AGENTS.md 是 Gemini CLI、Codex CLI、OpenCode 和 Cursor 遵循的跨助手慣例。如果你的 Gemini CLI 版本查詢的是 GEMINI.md,請重新命名 — 內容不變:

mv AGENTS.md GEMINI.md

3. 驗證安裝

# 專案範圍 (Claude Code)
ls CLAUDE.md && ls .claude/skills/ | head

# 專案範圍 (Gemini / AGENTS.md)
ls AGENTS.md && ls .agents/skills/ | head

# 全域範圍 (Claude Code)
ls ~/.claude/skills/ | head

你應該會看到所有 31 個 sast-* 技能目錄。在助手中開啟專案並提示 「執行漏洞掃描」 — CLAUDE.md / AGENTS.md 中的編排器會從那裡驅動四個階段。

4. 保持手動安裝更新

cd "$SAST_SRC" && git pull
# 重新執行步驟 2a / 2b 中的 cp 命令以重新整理 — 它們是冪等的。

如果你保留克隆,cd "$SAST_SRC" && git pull && <rerun cp> 等同於 npx sast-skills update。

CLI 命令

指令功能
npx sast-skills install將 CLAUDE.md / AGENTS.md 和技能樹複製到你的專案或 $HOME
npx sast-skills update使用當前綑綁的技能檔案重新整理現有安裝
npx sast-skills uninstall移除已安裝技能;未經 --force 參數會拒絕刪除修改過的 CLAUDE.md
npx sast-skills doctor驗證安裝並報告每個檔案的 OK / MISSING / MODIFIED 狀態;有問題時結束碼非零
npx sast-skills export --input sast/ --format sarif --output report.sarif將 sast/*-results.json 彙整為 JSON、SARIF 2.1.0 或 HTML
npx sast-skills export --input sast/ --triaged --format sarif優先使用審核後的 sast/triaged.json 而非原始的各技能結果
npx sast-skills --version列印已安裝的 CLI 版本

安裝時參數

標誌用途
--yes非互動模式;當 stdin 不是 TTY 時必須使用
--assistant <claude|agents|all>要安裝哪個技能樹
--scope <project|global>安裝到 ./.claude/skills/ 或 $HOME/.claude/skills/
--target <path>明確的安裝目標 (覆蓋 --scope)
--force覆蓋預先存在的 CLAUDE.md / AGENTS.md
--dry-run顯示檔案計劃但不進行寫入

執行掃描

安裝後,在 AI 助手中開啟專案並要求:

執行漏洞掃描

或

在此程式碼庫中尋找漏洞

編排器會接手。它會自動執行所有四個階段,遵循冪等性 (重新執行只會處理遺漏的部分),並將所有內容寫入專案根目錄的 sast/ 目錄。

輸出檔案

檔案描述
sast/architecture.md技術棧、架構、入口點、資料流
sast/*-results.md各漏洞類別的發現結果 (人類可讀)
sast/*-results.json標準機器可讀發現結果 (提供給 sast-skills export)
sast/final-report.md按嚴重性排序的合併原始報告
sast/final-report-triaged.md審核後的報告 — 假陽性已移除,嚴重性已根據證據調整
sast/triaged.json標準審核後發現結果 (sast-skills export --triaged 偏好使用)

發現結果結構

每個技能會將 sast/<skill>-results.json 寫入為純粹的發現結果列表:

{
  "findings": [
    {
      "id": "sast-sqli-0001",
      "skill": "sast-sqli",
      "severity": "critical|high|medium|low|info",
      "title": "/api/user 中的 SQL 注入",
      "description": "…",
      "location": { "file": "src/api/user.js", "line": 42, "column": 10 },
      "remediation": "…"
    }
  ]
}

sast-skills export 會將這些檔案彙整到一個包裝在 run 信封中的文件 — { "run": { "tool": "sast-skills", "version": "<cli-version>" }, "findings": [...] } — 並蓋上產生報告的 CLI 版本戳記。審核步驟會以相同的信封結構寫入 sast/triaged.json。

審核後的發現結果會加入 triage_status (confirmed|upgraded|downgraded|false_positive)、triage_original_severity (當嚴重性改變時) 和 triage_evidence,其中包含具體的程式碼庫引用。


CI 整合

GitHub Code Scanning (SARIF)

位於 .github/actions/scan/action.yml 的複合動作:

- uses: mstfknn/sast-skills/.github/actions/scan@main
  with:
    input: sast/
    output: sast-skills.sarif

這會執行 sast-skills export --format sarif 並透過 github/codeql-action/upload-sarif@v3 將結果上傳至 Code Scanning。

Pre-commit 鉤子

將 hooks/pre-commit 複製到 .git/hooks/pre-commit,讓 sast-skills doctor 在每次提交前進行檢查。

Docker

docker build -t sast-skills .
docker run --rm -v "$PWD:/work" sast-skills export --input sast/ --format sarif --output report.sarif

綑綁的 Dockerfile 基於 node:20-alpine,並將 sast-skills 設為入口點。


驗證與除錯

# 安裝是否符合預期形狀?
npx sast-skills doctor --target . --assistant claude

# 版本檢查
npx sast-skills --version
npm view sast-skills version    # 註冊表上的最新版本

# 升級
npx sast-skills update

如果目標中的每個綑綁檔案都與已安裝版本的副本相符,doctor 結束碼為 0;如果任何檔案是 MISSING 或 MODIFIED,則結束碼為 1。MODIFIED 表示檔案與綑綁副本不同 — 如果你編輯了入口檔案則屬預期情況,否則表示需要執行 update。


貢獻

請參閱 CONTRIBUTING.md。開發流程:

npm install
npm test                                  # vitest 套件 (啟用 TDD 防護)
npm run sync                              # 將 .claude/skills 鏡像到 .agents/skills
node scripts/scaffold-skill.js sast-foo   # 在兩個樹中建立新技能存根
node scripts/register-skill.js sast-foo foo "Foo" "Foo 注入描述"
npm run lint:md                           # markdownlint

…

[為翻譯而截斷]

相關技能