
フォルダを開いた瞬間にコーディングエージェントにコードを実行させることができるリポジトリ。GuardSkillは、あなたが実行する前にそれをチェックします。
npx guardskill .
読み取り専用。ネットワーク呼び出しなし、テレメトリなし、設定なし、アカウントなし。git設定とフックスクリプトを読み取り、見つかった内容を表示して終了します。
コーディングエージェントは、プロジェクトを開くとすぐにgit statusやgit diffなどの通常のgitコマンドを実行してコンテキストを収集します。gitはリポジトリ自身の.git/configから設定を読み取り、その設定のいくつかはgitが実行するプログラムを指定します。core.fsmonitorにコマンドを入れると、あなたが何も入力する前に、あなたの権限で、サンドボックスの外で実行されます。
2つの公開研究がこれを具体的に示しています:
.git/configはクローンでは転送されないからです。リポジトリは、ファイルとして、.gitディレクトリがすでに内部に含まれた状態で到着する必要があります — zip、共有ドライブ、同期フォルダ、USBメモリ、アーカイブを展開するエージェントなどです。(, )@github/copilot 1.0.43でsafe.bareRepository=explicitを強制することで修正されました。(GitHub Advisory)両方の記事で推奨されているユーザー側の緩和策は同じです: エージェントでディレクトリを開く前にgit設定を検査すること。 これをツリー全体で手作業で行うのは面倒です。このツールは1秒で実行します。
GuardSkillはツリーを走査し、エージェントが取得できるすべてのgit設定を見つけます: プロジェクト自身の.git、コンテンツとして到着したネストされた.git、サブディレクトリに隠されたベアリポジトリ、サブモジュールやリンクされたワークツリーが残す.gitファイル、そしてgitがメインの設定の隣に保持する設定 — config.worktreeとすべての.git/modules/<name>/configです。それぞれが検査されます。
| クラス | チェック |
|---|---|
| 直接実行キー | core.fsmonitor、core.sshCommand、core.gitProxy、core.pager、core.editor、sequence.editor、diff.external、uploadpack.packObjectsHook |
| 間接実行キー | filter.*.clean / .smudge / .process、diff.*.textconv、merge.*.driver、mergetool.*.cmd、difftool.*.cmd、credential.helper |
| シェルエイリアス | 値が!で始まるalias.* |
| 他の場所から読み込まれる設定 | include.path、includeIf.*.path |
| フック | core.hooksPathのオーバーライド、.git/hooks内のアクティブな(.sample以外の)スクリプト、および実行前にダウンロードをシェルにパイプしたりbase64をデコードしたりするフックスクリプト |
| トランスポート | protocol.allowとprotocol.<name>.allowがalwaysに戻されているもの、および行の残りをシェルに渡すext::トランスポートを使用するリモートまたはサブモジュールURL |
| 構造 | ツリー内のベアリポジトリ(CVE-2026-45033のベクター)、登録されたサブモジュールではないネストされた.gitディレクトリ、ツリー内のgitディレクトリを指す.gitファイル |
npx guardskill . # 現在のプロジェクトをスキャン
npx guardskill ~/code/some-project # 特定のパスをスキャン
npx guardskill . --json # 機械可読形式
npx guardskill . --out report.md # Markdownレポートも書き出す
npx guardskill . --fail-on critical # 重大な発見でのみビルドを失敗させる
npx guardskill . --exclude test/fixtures # ディレクトリをスキップ
終了コード: 0 しきい値以上の発見なし、1 しきい値以上の発見あり(デフォルトのしきい値: high)、2 スキャン自体が失敗。
CIでの使用:
- name: Check for git execution vectors
run: npx guardskill . --fail-on high
出力例:
GuardSkill - git execution-vector scan (read-only)
Path: /Users/dev/projects/inherited-project
Git configurations inspected: 2 Directories walked: 148
[CRITICAL] vendor/payload.git - Bare git repository found inside the project tree
what Git discovers bare repositories while walking directories and applies their
configuration, including keys that execute commands.
found bare repository at vendor/payload.git
do Do not open this project with a coding agent until you have inspected the directory.
[CRITICAL] vendor/payload.git/config:3 - core.fsmonitor runs an external command
found core.fsmonitor = /tmp/.x/run.sh
2 critical, 0 high, 0 medium, 0 low.
Nothing was changed - this scan only reads.
狼が来たと叫ぶセキュリティツールはアンインストールされます。このスイートは29の現実的なクリーンなリポジトリ(git-lfs、git-crypt、husky、.githooks規約、登録済みサブモジュール、credentialヘルパー、カスタムエディタとページャ、署名設定)に対して実行され、そのいずれかが情報レベルの発見を超えるとビルドは失敗します。また、既知の攻撃パターンを中心に構築された22のリポジトリに対して実行され、いずれかが見逃されたり、間違ったルールで検出されたりすると失敗します。
その上に回避スイートがあります: その中のすべてのケースは、すでに自身のテストに合格したGuardSkillのバージョンを攻撃して見つけられたものであり、すべてのコミットで実行されるため、将来の変更が静かに1つを再び開くことはできません。これは、gitがまだ受け入れるすべての方法で綴られた同じキー(大文字小文字、引用符、行継続、CRLF、バイトオーダーマーク、セクション行のキー)、おなじみのツールにちなんで名付けられたペイロード、日常的に見えるように.huskyと名付けられたフックディレクトリ、そして最初のバージョンが決して見なかった場所に隠された設定をカバーします。堅牢性スイートは、バイナリ、空、切り詰められた、200,000行の設定、読み取り不能なディレクトリ、シンボリックリンクループ、ツリーの外を指すポインタを入力し、スタックトレースではなくレポートを要求します。
2つの意図的な設計上の選択:
.githooksディレクトリはリスクではなく情報(low)として報告されます — ただしGuardSkillはスクリプトを読み取り、その1つが実行前にコードを取得またはデコードする場合はcriticalにエスカレーションします。include / includeIfは常に報告されます。 includeは後でこのリストの任意のキーを導入でき、それはまさにキーを隠す方法です。自分で書いた共有の~/.gitconfigは、却下する通常の発見です。npm testを実行する.huskyは情報であり、発見には何が実行されるかがリストされます。/tmpから何かを実行する同じディレクトリはそうではありません。何も変更しません。絶対に。見つけたものを実行することはありません。ネットワーク呼び出しは行わず、テレメトリも収集しません — オフラインで実行しても同じように動作します。npm依存関係、.claude/settings.json、.vscode/tasks.json、MCPサーバー定義はまだスキャンしません。これらは次のクラスであり、今回の対象ではありません。そして、これはシグナルであり、判定ではありません: 発見を読み、証拠を見て、自分で判断してください。
このリポジトリのSKILL.mdにより、コーディングエージェントは馴染みのないプロジェクトを開く前にスキャン自体を実行できます。ディレクトリをスキルフォルダにコピーするか、エージェントをリポジトリに向けてください。
npm test # フィクスチャを再生成してからスイートを実行
フィクスチャはコード(test/fixtures/generate.js)によって生成され、手動でコミットされないため、クリーンまたは脆弱なセットの拡張は数行で済みます。新しい検出ルールはrules/git-exec-keys.jsonに入ります — 両側にフィクスチャのないルールはマージされません。
継続的モニタリング、Slack/Teamsアラート、自動修正プルリクエストは有料レイヤーとして計画されています。スキャナー自体は無料のMITライセンスのままです。検出ルールはオープンリポジトリに残ります — ルールを読めないセキュリティツールは信頼すべきではありません。
MIT。オランダのITサービスプロバイダーであるHelios IT Solutionsによって構築・保守されています。セキュリティ問題: SECURITY.mdを参照してください。