掃描方式

本站收錄的 MCP 伺服器與 Skills 只要有 README,都會掃描其中有風險的指令。這個掃描只回答一個問題:README 要你(或你的 agent)執行的指令,有沒有要求危險的事?

運作方式

  • 我們從 GitHub 讀取 README,只看「像指令的文字」:程式碼區塊裡的每一行,以及行內程式碼。只是在句子裡提到危險指令不算。
  • 下面每條規則都是固定的樣式比對。沒有用模型,也沒有人為判斷,所以同一份 README 永遠得到同樣的結果。
  • 星數達 1,000 且建立滿 180 天的專案視為「有紀錄」。這類專案出現嚴重樣式時評為「注意」而不是「不安全」,輕微的樣式不計。
  • README 每 30 天重新讀取一次;評級每天重新計算,會隨專案累積紀錄而改變。

掃描結果

安全沒有規則符合,或只有輕微規則符合且專案有紀錄。
注意符合中度規則;或有紀錄的專案符合高度規則;或沒有紀錄的專案符合輕微規則。
不安全沒有紀錄的專案符合高度規則。頁面不提供安裝指令。
拒絕符合嚴重規則。頁面不提供安裝指令。
尚未掃描在常見檔名下找不到 README,或還沒讀取。這不等於安全。

規則

共 20 條,以下就是實際套用的內容。

嚴重一律評為「拒絕」。

把機密資料送到網路上讀取憑證或環境變數中的機密,再交給網路工具送出,是竊取資料的典型手法。

比對樣式 · secrets-to-network

(?:cat|echo|base64)\b[^|\n]*(?:\.env\b|id_rsa|id_ed25519|\.ssh\/|\.aws\/credentials|\.npmrc|\.netrc|\.git-credentials|\bprintenv\b|\$\{?[A-Z0-9_]*(?:API_?KEY|TOKEN|SECRET|PASSWORD)\b)[^|\n]*\|[^\n]*\b(?:curl|wget|nc|ncat|netcat)\b|(?:^|[\s;&|])(?:printenv|env)\s*\|[^\n]*\b(?:curl|wget|nc|ncat|netcat)\b|\b(?:curl|wget)\b[^\n]*(?:-d|--data(?:-binary|-raw)?|-F|--post-data)[ =][^\n]*(?:\$\(\s*cat\b[^)\n]*(?:\.env\b|id_rsa|id_ed25519|\.ssh\/|\.aws\/credentials|\.npmrc|\.netrc|\.git-credentials|\bprintenv\b|\$\{?[A-Z0-9_]*(?:API_?KEY|TOKEN|SECRET|PASSWORD)\b)|@~?\/?[^\s]*(?:id_rsa|id_ed25519|\.aws\/credentials|\.env\b))
把下載的內容寫進啟動檔或排程把下載的內容附加到 shell 啟動檔或 crontab,之後每次都會自動執行而不再詢問。

比對樣式 · payload-in-startup

\b(?:curl|wget)\b[^\n]*(?:>>?|\|\s*(?:sudo\s+)?tee\b)[^\n]*(?:\.bashrc|\.zshrc|\.bash_profile|\.zprofile|\.profile|\/etc\/profile|\/etc\/cron|crontab)|\becho\b[^\n]*\b(?:curl|wget)\b[^\n]*>>?[^\n]*(?:\.bashrc|\.zshrc|\.bash_profile|\.zprofile|\.profile|\/etc\/profile|\/etc\/cron|crontab)

高度評為「不安全」;有紀錄的專案評為「注意」。

下載腳本後直接執行把下載的內容直接交給 shell,等於執行對方伺服器送來的任何東西,而你看不到內容。

比對樣式 · pipe-to-shell

\b(?:curl|wget)\b(?![^|\n]*(?:raw\.githubusercontent\.com|astral\.sh|sh\.rustup\.rs|bun\.sh|deno\.land|get\.docker\.com|brew\.sh|install\.python-poetry\.org|get\.pnpm\.io|fnm\.vercel\.app|claude\.ai|ollama\.com|get\.helm\.sh|nodesource\.com))[^|\n]*\|\s*(?:sudo\s+)?(?:ba|z|da)?sh\b|\b(?:ba|z)?sh\s+<\(\s*(?:curl|wget)\b(?![^)\n]*(?:raw\.githubusercontent\.com|astral\.sh|sh\.rustup\.rs|bun\.sh|deno\.land|get\.docker\.com|brew\.sh|install\.python-poetry\.org|get\.pnpm\.io|fnm\.vercel\.app|claude\.ai|ollama\.com|get\.helm\.sh|nodesource\.com))|\b(?:iwr|irm|Invoke-WebRequest|Invoke-RestMethod)\b(?![^|\n]*(?:raw\.githubusercontent\.com|astral\.sh|sh\.rustup\.rs|bun\.sh|deno\.land|get\.docker\.com|brew\.sh|install\.python-poetry\.org|get\.pnpm\.io|fnm\.vercel\.app|claude\.ai|ollama\.com|get\.helm\.sh|nodesource\.com))[^|\n]*\|\s*(?:iex|Invoke-Expression)\b
開啟遠端 shell這類指令會讓別人取得你電腦上的互動式 shell。

比對樣式 · reverse-shell

\/dev\/tcp\/|\b(?:nc|ncat|netcat)\b[^\n]*\s-[a-z]*e\b|\bsocat\b[^\n]*\bexec:|\bmkfifo\b[^\n]*\|\s*(?:nc|ncat)\b
執行經過編碼或隱藏的程式先解碼再執行,會讓人看不出實際執行的內容。

比對樣式 · encoded-execution

\bbase64\s+(?:-d|--decode|-D)\b[^\n]*\|\s*(?:sudo\s+)?(?:ba|z)?sh\b|\beval\s+["']?\$\([^)\n]*\bbase64\b|\bpowershell(?:\.exe)?\b[^\n]*\s-e(?:nc|ncodedcommand)?\s+[A-Za-z0-9+/=]{20,}|\bpython3?\s+-c\b[^\n]*\bexec\([^\n]*\bb64decode\b
關閉系統防護關閉 Gatekeeper、SIP、SELinux 或防毒,會讓整台電腦失去防護,不只影響這個工具。

比對樣式 · disables-protection

\bspctl\s+--master-disable\b|\bcsrutil\s+disable\b|\bsetenforce\s+0\b|Set-MpPreference\b[^\n]*-DisableRealtimeMonitoring|\bchmod\s+(?:-R\s+)?777\s+\/(?:\s|$)
大範圍刪除或覆寫路徑打錯或有惡意時,可能清空整個磁碟或家目錄。

比對樣式 · destructive-command

\brm\s+-[a-z]*r[a-z]*f?[a-z]*\s+(?:--no-preserve-root\s+)?(?:\/|~|\$HOME)\/?(?:\s|$|\*)|\bmkfs(?:\.\w+)?\s+\/dev\/|\bdd\b[^\n]*\bof=\/dev\/(?:sd|nvme|disk)|:\(\)\s*\{\s*:\|:&\s*\}\s*;\s*:

中度評為「注意」。

執行知名來源的安裝腳本熱門工具常見的安裝方式,但執行的仍是你沒看過的腳本。

比對樣式 · pipe-to-shell-known-host

\b(?:curl|wget)\b[^|\n]*(?:raw\.githubusercontent\.com|astral\.sh|sh\.rustup\.rs|bun\.sh|deno\.land|get\.docker\.com|brew\.sh|install\.python-poetry\.org|get\.pnpm\.io|fnm\.vercel\.app|claude\.ai|ollama\.com|get\.helm\.sh|nodesource\.com)[^|\n]*\|\s*(?:sudo\s+)?(?:ba|z|da)?sh\b|\b(?:ba|z)?sh\s+<\(\s*(?:curl|wget)\b[^)\n]*(?:raw\.githubusercontent\.com|astral\.sh|sh\.rustup\.rs|bun\.sh|deno\.land|get\.docker\.com|brew\.sh|install\.python-poetry\.org|get\.pnpm\.io|fnm\.vercel\.app|claude\.ai|ollama\.com|get\.helm\.sh|nodesource\.com)|\b(?:iwr|irm)\b[^|\n]*(?:raw\.githubusercontent\.com|astral\.sh|sh\.rustup\.rs|bun\.sh|deno\.land|get\.docker\.com|brew\.sh|install\.python-poetry\.org|get\.pnpm\.io|fnm\.vercel\.app|claude\.ai|ollama\.com|get\.helm\.sh|nodesource\.com)[^|\n]*\|\s*iex\b
要求系統管理員權限使用 sudo 時,一個錯誤或被入侵的套件就可能更動整個系統。

比對樣式 · sudo

(?:^|[\s;&|(])sudo\s+\S
設定為自動執行開機項目、系統服務與排程工作,在你不注意之後仍會持續執行。

比對樣式 · persistence

\|\s*crontab\b|\bcrontab\s+-e\b|\blaunchctl\s+(?:load|bootstrap)\b|\bsystemctl\s+(?:--user\s+)?enable\b|\bschtasks\s+\/create\b|CurrentVersion\\+Run\b
要求 agent 略過權限確認略過確認後,agent 可以直接執行指令與修改檔案,你沒有機會拒絕。

比對樣式 · skips-agent-permissions

--dangerously-skip-permissions\b|--dangerously-bypass-approvals-and-sandbox\b|--yolo\b|--trust-all-tools\b|\bbypassPermissions\b|--allow-all-tools\b
讀取已儲存的憑證SSH 金鑰、雲端憑證與鑰匙圈能開啟的範圍,遠超過這個工具所需。

比對樣式 · credential-files

\b(?:cat|cp|scp|tar|zip|base64)\b[^\n]*(?:~|\$HOME)\/(?:\.ssh\/(?![\w.-]*\.pub\b)|\.aws\/credentials|\.netrc|\.git-credentials|\.config\/gcloud)|\bsecurity\s+find-(?:generic|internet)-password\b
下載檔案並設為可執行不經套件管理器下載的執行檔,沒有簽章與版本檢查。

比對樣式 · downloads-and-runs-binary

\b(?:curl|wget)\b[^\n]*(?:-o|-O|--output)\b[^\n]*(?:&&|;)\s*(?:sudo\s+)?chmod\s+\+x\b
讓容器存取主機特權容器、Docker socket 或掛載整個磁碟,會讓容器失去原本的隔離作用。

比對樣式 · container-host-access

\bdocker\b[^\n]*(?:--privileged\b|\/var\/run\/docker\.sock|-v\s+\/:\/|--pid[= ]host\b)
移除 macOS 對應用程式的隔離標記未簽章的應用程式常這樣做,但會略過 macOS 在首次開啟前的檢查。

比對樣式 · bypasses-gatekeeper

\bxattr\s+-[a-z]*d[a-z]*\s+com\.apple\.quarantine\b

輕微評為「注意」;有紀錄的專案不計。

在 shell 啟動檔加入一行通常是 PATH 或環境變數;它會在每個新終端機執行,請確認那一行做了什麼。

比對樣式 · edits-shell-profile

(?:>>|\|\s*tee\s+-a)\s*~?\/?[^\s]*(?:\.bashrc|\.zshrc|\.bash_profile|\.zprofile|\.profile)\b
關閉憑證檢查不檢查憑證時,下載的內容可能在傳輸途中被調包。

比對樣式 · tls-verification-off

\bcurl\b[^\n]*\s(?:-k|--insecure)\b|\bwget\b[^\n]*--no-check-certificate\b|NODE_TLS_REJECT_UNAUTHORIZED\s*=\s*['"]?0|\bgit\b[^\n]*http\.sslVerify[= ]false
執行專案內的安裝腳本腳本可以做任何事,執行前請先瀏覽內容。

比對樣式 · runs-repo-script

(?:^|[\s;&|])(?:ba|z)?sh\s+(?:\.\/)?[\w./-]*(?:install|setup|bootstrap)[\w.-]*\.sh\b|(?:^|[\s;&|])\.\/[\w./-]*(?:install|setup|bootstrap)[\w.-]*\.sh\b
繞過系統套件保護安裝到系統的 Python 或以 root 安裝,可能弄壞其他軟體。

比對樣式 · system-package-override

--break-system-packages\b|\bnpm\b[^\n]*--unsafe-perm\b

資訊僅供參考,不影響結果。

需要 API 金鑰或 token會呼叫外部服務的工具通常如此。請提供權限最小的金鑰。

比對樣式 · needs-credentials

\b[A-Z][A-Z0-9_]*(?:API_?KEY|ACCESS_TOKEN|AUTH_TOKEN|_TOKEN|_SECRET|PASSWORD)\b["']?\s*[=:]

掃描無法告訴你的事

  • 它讀的是 README,不是程式碼。README 無害而程式有害的專案存在,反過來也有。
  • 樣式比對的是文字,不是意圖。確實需要 sudo 的正當工具和草率的工具會得到同樣的標記;為了警告而示範攻擊手法的 README,也會被當成要你執行。
  • 寫法不在樣式涵蓋範圍內的就會漏掉。README 連結到的腳本不會被追蹤檢查。
  • 這只是第一道篩選,不是安全稽核。請自己看過要安裝的東西,並在接觸不到金鑰的環境執行不熟悉的工具。
  • 維護者若認為結果有誤,可以透過聯絡頁告訴我們;我們會修正規則讓所有專案適用,而不是個別豁免。