Cycode
公式開発ライフサイクルにおけるセキュリティを、CycodeによるSAST、SCA、シークレット、IaCスキャンで強化します。
Cycode MCPで何ができますか?
- リポジトリパスをスキャンしてハードコードされたシークレットを検出 — アシスタントにローカルディレクトリで
cycode_secret_scanを実行させ、露出した認証情報を検出します。 - 既知の脆弱性がないか依存関係をチェック — プロジェクトパスに対して
cycode_sca_scanをトリガーし、脆弱性または非準拠のオープンソースパッケージを特定します。 - 設定ミスがないかInfrastructure as Codeファイルを監査 — TerraformまたはCloudFormationディレクトリで
cycode_iac_scanを使用して、リスクのある設定を表面化します。 - セキュリティ上の欠陥がないかソースコードをレビュー — コードベースで
cycode_sast_scanを実行し、コードレベルの弱点と品質問題を見つけます。 - CLI認証とバージョンステータスを検証 —
cycode_statusを呼び出して、Cycodeへの接続とアクティブなバージョンを確認します。
ドキュメント
Cycode CLI ユーザーガイド
Cycode コマンドラインインターフェース(CLI)は、ローカルにインストールして、リポジトリ内のシークレット、インフラストラクチャ・アズ・コード(IaC)の設定ミス、ソフトウェア構成分析(SCA)の脆弱性、静的アプリケーションセキュリティテスト(SAST)の問題をスキャンできるアプリケーションです。
このガイドでは、インストール方法と使用方法の両方を説明します。
目次
- 前提条件
- インストール
- Cycode CLI コマンド
- MCP コマンド
- Platform コマンド
- AI ガードレール
- Scan コマンド
- Report コマンド
- Import コマンド
- スキャンログ
- 構文ヘルプ
前提条件
- Cycode CLI アプリケーションには Python バージョン 3.9 以降が必要です。MCP コマンドは Python 3.10 以上でのみ利用可能です。それ以前の Python バージョンを使用している場合、このコマンドは利用できません。
cycode authコマンド を使用して CLI で Cycode に認証します。- または、サービスアカウントトークン および 個人アクセストークン のページで説明されている手順に従って、Cycode クライアント ID とクライアントシークレットキーを取得できます。これらのページには、これらの値を取得するための詳細が含まれています。
インストール
以下のインストール手順は、Windows および UNIX / Linux オペレーティングシステムの両方に適用されます。
[!NOTE] 以下の手順では、Python 関連のコマンドに
python3とpip3を使用することを前提としています。ただし、Python 環境の構成によっては、pythonとpipコマンドを使用するシステムもあります。
Cycode CLI のインストール
Cycode CLI アプリケーションをローカルマシンにインストールするには、次の手順を実行します。
-
コマンドラインまたはターミナルアプリケーションを開きます。
-
次のいずれかのコマンドを実行します。
-
PyPI からインストールする場合:
pip3 install cycode -
Homebrew からインストールする場合:
brew install cycode -
GitHub Releases からインストールする場合、オペレーティングシステムとアーキテクチャに合った実行可能ファイルをダウンロードして移動し、次のコマンドを実行します:
cd /path/to/downloaded/cycode-cli chmod +x cycode ./cycode -
-
最後に CLI を認証します。Cycode クライアント ID と認証情報(クライアントシークレットまたは OIDC ID トークン)を設定する方法は 3 つあります:
- cycode auth(推奨)
- cycode configure
- 環境変数 に追加する
Auth コマンドの使用
[!NOTE] これは、Cycode CLI で認証するためにローカルマシンを設定するための推奨方法です。
-
ターミナル/コマンドラインウィンドウに次のコマンドを入力します:
cycode auth -
ブラウザウィンドウが開き、Cycode へのログインを求められます(下記参照):
-
このページにログイン資格情報を入力してログインします。
-
最終的に下記のページに移動し、Cycode を認証するビジネスグループを選択するよう求められます(該当する場合):
[!NOTE] これが Cycode CLI での認証のデフォルト方法になります。
-
許可 ボタンをクリックして、選択したビジネスグループで Cycode CLI を認証します。
-
完了すると、正常に選択された場合、次の画面が表示されます:
-
ターミナル/コマンドライン画面では、ブラウザウィンドウを終了すると次のように表示されます:
Successfully logged into cycode
Configure コマンドの使用
[!NOTE] Linux または Windows の環境変数を通じて Cycode クライアント ID とクライアントシークレットをすでに設定している場合、それらの資格情報がこの方法よりも優先されます。
-
ターミナル/コマンドラインウィンドウに次のコマンドを入力します:
cycode configure -
Cycode API URL の値を入力します(デフォルト値を使用する場合は空白のままにできます)。
Cycode API URL [https://api.cycode.com]: https://api.onpremise.com -
Cycode APP URL の値を入力します(デフォルト値を使用する場合は空白のままにできます)。
Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com -
Cycode クライアント ID の値を入力します。
Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d -
Cycode クライアントシークレットの値を入力します(OIDC ID トークンを使用する予定の場合はスキップします)。
Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e -
Cycode OIDC ID トークンの値を入力します(オプション)。
Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... -
値が正常に入力された場合、次のメッセージが表示されます:
Successfully configured CLI credentials!または/および
Successfully configured Cycode URLs!
ユーザーフォルダーの下の .cycode フォルダーに移動すると、これらの資格情報が作成され、そのフォルダーの credentials.yaml ファイルに配置されていることがわかります。
URL はそのフォルダーの config.yaml ファイルに配置されています。
環境変数への追加
Unix/Linux の場合:
export CYCODE_CLIENT_ID={your Cycode ID}
および
export CYCODE_CLIENT_SECRET={your Cycode Secret Key}
組織が OIDC 認証を使用している場合は、代わりに(または追加で)ID トークンを提供できます:
export CYCODE_ID_TOKEN={your Cycode OIDC ID token}
Windows の場合
-
コントロールパネルから、システムメニューに移動します:
-
次に、システムの詳細設定 をクリックします:
-
開いたシステムのプロパティウィンドウで、環境変数 ボタンをクリックします:
-
ID とシークレットキーにそれぞれ一致する値を持つ
CYCODE_CLIENT_IDとCYCODE_CLIENT_SECRET変数を作成します。OIDC で認証する場合は、CYCODE_ID_TOKENに OIDC ID トークンの値も追加します:
-
インストールを完了するには、
cycode.exeをパスに挿入します。
Pre-Commit フックのインストール
Cycode の pre-commit および pre-push フックは、ローカルリポジトリ内に設定できるため、コードをコードベースにコミットまたはプッシュする前に、Cycode CLI アプリケーションがコードの問題を自動的に特定します。
[!NOTE] pre-commit および pre-push フックは IaC スキャンでは利用できません。
pre-commit フックをインストールするには、次の手順を実行します:
Pre-Commit フックのインストール
-
pre-commit フレームワークをインストールします(Python 3.9 以上がインストールされている必要があります):
pip3 install pre-commit -
設定するローカル Git リポジトリの最上位ディレクトリに移動します。
-
リポジトリの最上位ディレクトリに、次の内容を含む
.pre-commit-config.yamlという名前の新しい YAML ファイルを作成します(先頭の.を含めます):repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode stages: [pre-commit] -
作成したファイルを特定のニーズに合わせて変更します。フック ID
cycodeを使用してシークレットのスキャンを有効にします。フック IDcycode-scaを使用して SCA スキャンを有効にします。フック IDcycode-sastを使用して SAST スキャンを有効にします。すべてのスキャンタイプを有効にする場合は、次の構成を使用します:repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode stages: [pre-commit] - id: cycode-sca stages: [pre-commit] - id: cycode-sast stages: [pre-commit] -
Cycode のフックをインストールします:
pre-commit installフックのインストールが成功すると、次のメッセージが表示されます:
Pre-commit installed at .git/hooks/pre-commit。 -
pre-commit フックを最新の状態に保ちます:
pre-commit autoupdateこれにより、
.pre-commit-config.yaml内のrevが Cycode CLI の最新の利用可能なバージョンに自動的に更新されます。
[!NOTE] トリガーは
git commitコマンドで発生します。 フックは、コミット用にステージングされたファイルのみでトリガーされます。
Pre-Push フックのインストール
pre-commit フックに加えて、またはその代わりに pre-push フックをインストールするには:
-
pre-push フックを
.pre-commit-config.yamlファイルに追加します:repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode-pre-push stages: [pre-push] -
pre-push フックをインストールします:
pre-commit install --hook-type pre-push -
pre-commit フックと pre-push フックの両方に使用します:
pre-commit install pre-commit install --hook-type pre-push
[!NOTE] Pre-push フックは
git pushコマンドでトリガーされ、プッシュされようとしているコミットのみをスキャンします。
Cycode CLI コマンド
以下は、Cycode CLI アプリケーションで利用可能なオプションとコマンドです:
| オプション | 説明 |
|---|---|
-v、--verbose | 詳細なログを表示します。 |
--no-progress-meter | 進行状況メーターを表示しません。 |
--no-update-notifier | CLI の更新を確認しません。 |
-o、--output [rich|text|json|table] | 出力タイプを指定します。デフォルトは rich です。 |
--client-id TEXT | この特定のスキャン実行用の Cycode クライアント ID を指定します。 |
--client-secret TEXT | この特定のスキャン実行用の Cycode クライアントシークレットを指定します。 |
--id-token TEXT | この特定のスキャン実行用の Cycode OIDC ID トークンを指定します。 |
--install-completion | 現在のシェルの補完をインストールします。 |
--show-completion [bash|zsh|fish|powershell|pwsh] | 指定されたシェルの補完を表示して、コピーまたはインストールをカスタマイズします。 |
-h、--help | 指定されたコマンドのオプションを表示します。 |
| コマンド | 説明 |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| auth | マシンを認証して、CLI を Cycode アカウントに関連付けます。 |
| configure | CLI クライアント認証を設定するための初期コマンドです。 |
| ignore | 特定の値、パス、またはルール ID を無視します。 |
| mcp | Model Context Protocol (MCP) サーバーを起動して、Cycode のスキャン機能と AI を統合できるようにします。 |
| scan | Secrets/IaC/SCA/SAST 違反のコンテンツをスキャンします。実行するスキャンタイプ(commit-history/path/repository など)を指定する必要があります。 |
| report | レポートを生成します。SBOM など、実行するレポートタイプを指定する必要があります。 |
| status | CLI のステータスを表示して終了します。 |
MCP コマンド [EXPERIMENT]
[!WARNING] MCP コマンドは Python 3.10 以降でのみ利用可能です。それより前の Python バージョンを使用している場合、このコマンドは利用できません。
Model Context Protocol (MCP) コマンドを使用すると、Cycode のスキャン機能を AI システムやアプリケーションに公開する MCP サーバーを起動できます。これにより、AI モデルは標準化されたプロトコルを介して Cycode CLI ツールと対話できるようになります。
[!TIP] 最適なエクスペリエンスを得るには、
pip install cycodeまたはbrew install cycodeを使用して Cycode CLI をシステムにグローバルインストールし、cycode authで一度認証してください。グローバルインストールと認証後は、MCP 設定ファイルでCYCODE_CLIENT_IDおよびCYCODE_CLIENT_SECRET環境変数を設定する必要はありません。
MCP サーバーの起動
MCP サーバーを起動するには、次のコマンドを使用します:
cycode mcp
デフォルトでは、このコマンドは stdio トランスポートを使用してサーバーを起動します。これはローカル統合やサブプロセスを生成できる AI アプリケーションに適しています。
利用可能なオプション
| オプション | 説明 |
|---|---|
-t, --transport | MCP サーバーのトランスポートタイプ:stdio、sse、または streamable-http(デフォルト:stdio) |
-H, --host | サーバーをバインドするホストアドレス(stdio 以外のトランスポートでのみ使用)(デフォルト:127.0.0.1) |
-p, --port | サーバーをバインドするポート番号(stdio 以外のトランスポートでのみ使用)(デフォルト:8000) |
--help | ヘルプメッセージと利用可能なオプションを表示します。 |
MCP ツール
MCP サーバーは、AI システムが使用できる次のツールを提供します:
| ツール名 | 説明 |
|---|---|
cycode_secret_scan | ハードコードされたシークレットをスキャンします。 |
cycode_sca_scan | Software Composition Analysis (SCA) をスキャンします - 脆弱性とライセンスの問題。 |
cycode_iac_scan | Infrastructure as Code (IaC) の設定ミスをスキャンします。 |
cycode_sast_scan | Static Application Security Testing (SAST) をスキャンします - コード品質とセキュリティ上の欠陥。 |
cycode_status | Cycode CLI のバージョン、認証ステータス、設定情報を取得します。 |
各スキャンツールは、相互に排他的な 2 つの入力モードを受け入れます:
paths(推奨) — ディスク上に存在する 1 つ以上のファイルまたはディレクトリパス。ディレクトリは再帰的にスキャンされます。Cycode エンジンがファイルの発見とフィルタリングを処理します。これは CLI からのcycode scan -t <type> path ./srcと同様です。files(フォールバック) — ファイルパスをその完全なコンテンツ(文字列)にマッピングする辞書。これは、ファイルがディスク上で利用できない場合(例:まだ保存されていないメモリ内の編集)にのみ使用します。
[!TIP] 可能な限り
pathsを使用してください。大きなファイル(package-lock.jsonなど)をインラインコンテンツとして渡すと、トークン制限を超えたり、AI クライアントが遅くなったりする可能性があります。pathsを使用すると、Cycode エンジンがファイルをディスクから直接読み取ります。
すべてのスキャンツールは、完全な "detections" 配列に加えて、人間が読める違反数(例:"Cycode found 3 violations: 1 CRITICAL, 2 HIGH.")を含む "summary" フィールドを持つ JSON オブジェクトを返します。
使用例
基本的なコマンド例
デフォルト設定(stdio トランスポート)で MCP サーバーを起動します:
cycode mcp
明示的な stdio トランスポートで MCP サーバーを起動します:
cycode mcp -t stdio
Server-Sent Events (SSE) トランスポートで MCP サーバーを起動します:
cycode mcp -t sse -p 8080
カスタムホストとポートでストリーミング可能な HTTP トランスポートを使用して MCP サーバーを起動します:
cycode mcp -t streamable-http -H 0.0.0.0 -p 9000
MCP トランスポートタイプの詳細については、MCP Protocol Specification – Transports を参照してください。
設定例
Cursor/VS Code/Claude Desktop などで MCP を使用する(mcp.json)
[!NOTE] EU の Cycode 環境では、環境変数に適切な
CYCODE_API_URLおよびCYCODE_APP_URL値を設定してください(例:https://api.eu.cycode.comおよびhttps://app.eu.cycode.com)。
このガイド に従って、VS Code/GitHub Copilot で MCP サーバーを設定します。settings.json には、スタンドアロンの mcpServers オブジェクトではなく、ネストされた servers サブオブジェクトを含む mcp オブジェクトがあることに注意してください。
stdio トランスポート(直接実行)の場合:
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
stdio トランスポートと pipx インストールの場合:
{
"mcpServers": {
"cycode": {
"command": "pipx",
"args": ["run", "cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
stdio トランスポートと uvx インストールの場合:
{
"mcpServers": {
"cycode": {
"command": "uvx",
"args": ["cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
SSE トランスポート(Server-Sent Events)の場合:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
SSE トランスポートをカスタムポートで使用する場合:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8080/sse"
}
}
}
ストリーミング可能な HTTP トランスポートの場合:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
バックグラウンドで MCP サーバーを実行する
SSE トランスポートの場合(最初にサーバーを起動し、その後クライアントを設定):
# Start the MCP server in the background
cycode mcp -t sse -p 8000 &
# Configure in mcp.json
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
ストリーミング可能な HTTP トランスポートの場合:
# Start the MCP server in the background
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &
# Configure in mcp.json
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.2:9000/mcp"
}
}
}
高度な設定
カスタム証明書とタイムアウト(プロキシ環境)
組織が企業プロキシまたは HTTPS 検査用のカスタム CA バンドルを使用している場合、Cycode CLI(および基盤となる Python TLS スタック)に信頼された証明書バンドルの場所を指定する必要があります。また、スキャンが途中で終了する場合は、MCP ツール呼び出しのタイムアウトを増やすこともできます。
| 環境変数 | 説明 |
|---|---|
REQUESTS_CA_BUNDLE | カスタム CA バンドルファイルへのパス(.pem または .crt)。Cycode CLI によるすべての HTTPS 呼び出しに requests ライブラリによって使用されます。 |
SSL_CERT_FILE | カスタム CA バンドルファイルへのパス。Python の低レベル ssl モジュールによって使用されます。完全なカバレッジのために REQUESTS_CA_BUNDLE と一緒に設定します。 |
MCP_TOOL_TIMEOUT | Claude や GitHub Copilot などの MCP クライアントがツール呼び出しの完了を待機するタイムアウト(秒)。長時間実行されるスキャンが完了前に中断される場合は、これを増やします。 |
[!TIP]
REQUESTS_CA_BUNDLEとSSL_CERT_FILEの両方を同じ CA バンドルパスに設定します。REQUESTS_CA_BUNDLEは HTTP レイヤーをカバーし、SSL_CERT_FILEは低レベルの TLS レイヤーをカバーします。片方だけを設定すると、一部の環境で証明書エラーが発生する可能性があります。
カスタム証明書とより長いタイムアウトを使用した mcp.json 設定の例:
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"REQUESTS_CA_BUNDLE": "/path/to/your/corporate-ca-bundle.pem",
"SSL_CERT_FILE": "/path/to/your/corporate-ca-bundle.pem",
"MCP_TOOL_TIMEOUT": "1800"
}
}
}
}
[!NOTE] MCP サーバーが機能するには、適切な Cycode CLI 認証が必要です。MCP サーバーを起動する前に、
cycode authを使用して認証したか、資格情報を設定していることを確認してください。
サブエージェント用ツールの事前承認(Claude Code)
Claude Code がバックグラウンドのサブエージェントに作業を委任する場合(例:スキャンを並列実行するため)、それらのサブエージェントは対話型の権限プロンプトを表示できません。Cycode ツールが事前承認されていない場合、サブエージェントコンテキストではスキャンが静かに失敗します。
Cycode MCP ツールを事前承認して、サブエージェントを含むすべてのコンテキストで機能するようにするには、Claude Code 設定(~/.claude/settings.json)の allowedTools リストに追加します:
{
"allowedTools": [
"mcp__cycode__cycode_secret_scan",
"mcp__cycode__cycode_sca_scan",
"mcp__cycode__cycode_iac_scan",
"mcp__cycode__cycode_sast_scan",
"mcp__cycode__cycode_status"
]
}
追加すると、Claude Code はこれらのツールが呼び出されたときに承認を求めず、サブエージェント内でも正しく機能します。
MCP のトラブルシューティング
MCP サーバーで問題が発生した場合は、デバッグログを有効にして、何が起こっているかについてより詳細な情報を取得できます。デバッグログを有効にする方法は 2 つあります:
-vまたは--verboseフラグを使用する:
cycode -v mcp
CYCODE_CLI_VERBOSE環境変数を使用する:
CYCODE_CLI_VERBOSE=1 cycode mcp
デバッグログには、次の詳細情報が表示されます:
- サーバーの起動と設定
- 接続試行とステータス
- ツールの実行と結果
- 発生したエラーや警告
この情報は、次の場合に役立ちます:
- 接続の問題の診断
- 特定のツールが機能しない理由の理解
- 認証の問題の特定
- トランスポート固有の問題のデバッグ
MCP 設定
プラットフォームコマンド [BETA]
[!WARNING]
platformコマンドはベータ版です。コマンド、引数、出力形式は Cycode API 仕様から動的に生成され、リリース間で予告なく変更される場合があります。本番環境の自動化ではまだ依存しないでください。
cycode platform コマンドは、Cycode プラットフォームの読み取り API を CLI コマンドとして公開します。エンドポイントをリソースごとにグループ化し(例:projects、violations、workflows)、各エンドポイントのパラメータを型付き CLI 引数と --option フラグに変換します。
cycode platform projects list --page-size 50
cycode platform violations count
cycode platform workflows view <workflow-id>
OpenAPI 仕様は、最初の使用時に Cycode API から取得され、~/.cycode/openapi-spec.json に 24 時間キャッシュされます。無関係なコマンド(cycode scan、cycode status など)はフェッチをトリガーしません。
[!NOTE]
cycode platformがコマンドを検出して実行するには、認証されている必要があります(cycode authまたはCYCODE_CLIENT_ID/CYCODE_CLIENT_SECRET環境変数)。他の Cycode CLI コマンドは認証なしで機能します。
コマンドの検出
コマンドは仕様から生成されるため、利用可能なものの真実の情報源は --help です:
cycode platform --help # list all resource groups
cycode platform projects --help # list actions on a resource
cycode platform projects list --help # list options/arguments for an action
プラットフォームの例
# List projects with pagination
cycode platform projects list --page-size 25
# View a single project by ID
cycode platform projects view <project-id>
# Count violations across the tenant
cycode platform violations count
# Filter using query parameters (see `--help` for what each endpoint supports)
cycode platform violations list --severity CRITICAL
すべての出力はデフォルトで JSON です。アドホックなフィルタリングのために jq にパイプします:
cycode platform projects list --page-size 100 | jq '.items[].name'
プラットフォームの注意事項と制限事項
- 現時点では読み取り専用です。 このベータ版では、
GETエンドポイントのみが公開されています。 - 仕様駆動型。 API に新しいエンドポイントを追加すると、キャッシュが次回更新されたときに自動的に表示されます。
- バンドルされた仕様はありません。 インストール後(または 24 時間のキャッシュ期限切れ後)の最初の
cycode platform呼び出しは、ネットワークフェッチを実行します。低速な接続では、この最初の呼び出しに数秒かかる場合があります。キャッシュが期限切れになるまでの後続の呼び出しはほぼ瞬時です。 - キャッシュ TTL を上書きするには、
CYCODE_SPEC_CACHE_TTL=<seconds>を使用します。
AI ガードレール [BETA]
AI Guardrailsは、対応するAIコーディングエージェント(Claude Code、Cursor、Copilot、Codex)にフックをインストールし、プロンプト、エージェントが読み取るファイル、MCPツールの引数がモデルに到達する前にシークレットがスキャンされるようにします。
AI Guardrailsによって収集されるデータ
スキャンはサーバー側で行われるため、スキャンされたコンテンツはマシンから送信されます。プロンプトテキスト、エージェントが読み取るファイルの内容、MCPツールの引数は、シークレットをチェックするためにCycodeテナントに送信されます。
各イベントは、開発者とマシンに関するコンテキストとともに報告されるため、検出結果をデバイスとユーザーに帰属させることができます。この一部は個人データです:
- デバイス識別子 — マシンのホスト名とハードウェアのシリアル番号。
- ユーザー識別子 — AIコーディングエージェントにサインインしているユーザーのメールアドレス、およびローカルのオペレーティングシステムのユーザー名。
- 環境の詳細 — オペレーティングシステムとバージョン、AIエージェント、そのバージョンと使用中のモデル、エージェントのMCP設定ファイルの内容、および有効なプラグイン。
ハードウェアのシリアル番号はローカルの一時ファイルにキャッシュされ、コマンドを実行したユーザーのみが読み取れるため、フックの呼び出しが繰り返されてもハードウェアに再クエリされることはありません。
このデータの収集がお使いの環境で許容されない場合は、ガードレールフックをインストールしないでください(cycode ai-guardrails uninstallは既にインストールされているフックを削除します)。
スキャンコマンド
スキャンの実行
Cycode CLIアプリケーションは、お客様のケースに最適なオプションを選択できるように、いくつかのタイプのスキャンを提供しています。以下は、現在利用可能なオプションとコマンドです:
| オプション | 説明 |
|---|---|
-t, --scan-type [secret|iac|sca|sast] | 実行するスキャンを指定します(secret/iac/sca/sast)。デフォルトはsecretです。 |
--show-secret BOOLEAN | シークレットを平文で表示します。詳細はシークレットの表示/非表示セクションを参照してください。 |
--soft-fail BOOLEAN | 失敗せずにスキャンを実行し、常に非エラーのステータスコードを返します。詳細はソフトフェイルセクションを参照してください。 |
--severity-threshold [INFO|LOW|MEDIUM|HIGH|CRITICAL] | 指定したレベル以上の違反のみを表示します。 |
--sca-scan | 実行するSCAスキャンを指定します(package-vulnerabilities/license-compliance)。デフォルトは両方です。 |
--monitor | 指定すると、スキャン結果がCycodeに記録されます。 |
--cycode-report | コンソール出力にCycodeプラットフォームのスキャンレポートへのリンクを表示します。 |
--no-restore | 指定すると、Cycodeはリストアコマンドを実行しません。これにより、直接の依存関係のみがスキャンされます! |
--stop-on-error | ファイル収集または依存関係のリストアに失敗した場合、失敗したファイルをスキップして続行する代わりに、スキャンを中止します。 |
--gradle-all-sub-projects | すべてのサブプロジェクトに対してgradleリストアコマンドを実行します。これは、以下から実行する必要があります。 |
--maven-settings-file | Mavenのみ、依存関係のスキャン時にカスタムのsettings.xmlファイルを使用できます。 |
--help | 指定されたコマンドのオプションを表示します。 |
| コマンド | 説明 |
|---|---|
| commit-history | コミット履歴をスキャンするか、特定のコミット間の差分スキャンを実行します |
| path | コマンドで指定されたパス内のファイルをスキャンします |
| pre-commit | まだコミットされていないコンテンツをスキャンするためにこのコマンドを使用します |
| repository | 履歴を含むgitリポジトリをスキャンします |
オプション
重大度オプション
スキャン結果を特定の重大度しきい値に制限するには、引数--severity-thresholdをスキャンコマンドに追加できます。
例えば、次のコマンドは、重大度が中以上のポリシー違反をリポジトリでスキャンします:
cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase
モニターオプション
[!NOTE] このオプションはSCAスキャンでのみ利用可能です。
SCAタイプのスキャンで見つかったSCAポリシーに関連するスキャン結果をCycodeにプッシュするには、引数--monitorをスキャンコマンドに追加します。
例えば、次のコマンドは、SCAポリシー違反をリポジトリでスキャンし、Cycodeプラットフォームにプッシュします:
cycode scan -t sca --monitor repository ~/home/git/codebase
Cycodeレポートオプション
Cycode CLIを使用して実行されるすべてのスキャンについて、レポートが自動的に生成され、その結果がCycodeに送信されます。これらの結果は、Cycodeプラットフォーム内の関連ポリシー(例:リポジトリースキャンのSCAポリシー)に関連付けられます。
スキャン完了後にこのCycodeレポートへの直接URLをCLI出力に表示するには、引数--cycode-reportをスキャンコマンドに追加します。
cycode scan --cycode-report repository ~/home/git/codebase
CLIからのすべてのスキャン結果は、CycodeのCLIログセクションに表示されます。コマンドに--cycode-reportフラグを含めた場合、スキャン結果の後に、特定のレポートへの直接リンクがターミナルに表示されます。
[!WARNING] このページを表示するには、Cycodeで
ownerまたはadminロールが必要です。

レポートページは以下のようになります:

パッケージの脆弱性オプション
[!NOTE] このオプションはSCAスキャンでのみ利用可能です。
ローカルリポジトリの特定のパッケージの脆弱性をスキャンするには、-t scaまたは--scan-type scaオプションに続けて引数--sca-scan package-vulnerabilitiesを追加します。
前の例で、パッケージの脆弱性についてのみSCAスキャンを実行したい場合は、次のコマンドを実行できます:
cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase
ライセンスコンプライアンスオプション
[!NOTE] このオプションはSCAスキャンでのみ利用可能です。
ローカルリポジトリの特定のブランチをスキャンするには、引数--sca-scan license-complianceに続けて、スキャンしたいブランチの名前を追加します。
前の例で、devという名前のブランチのみをスキャンしたい場合は、次のコマンドを実行できます:
cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev
ロックリストアオプション
[!NOTE] このオプションはSCAスキャンでのみ利用可能です。
SCAスキャンを実行すると、Cycode CLIは、見つかったサポートされている各マニフェストファイルに対して依存関係ロックファイルのリストア(生成)を自動的に試みます。これにより、マニフェストに直接リストされている依存関係だけでなく、推移的な依存関係もスキャンできます。このステップをスキップして直接の依存関係のみをスキャンするには、--no-restoreフラグを使用します。
以下のエコシステムが自動ロックファイルリストアをサポートしています:
| エコシステム | マニフェストファイル | 生成されるロックファイル | 呼び出されるツール(ロックファイルがない場合) |
|---|---|---|---|
| npm | package.json | package-lock.json | npm install --package-lock-only --ignore-scripts --no-audit |
| Yarn | package.json | yarn.lock | yarn install --ignore-scripts |
| pnpm | package.json | pnpm-lock.yaml | pnpm install --ignore-scripts |
| Deno | deno.json / deno.jsonc | deno.lock | (既存のロックファイルのみ読み取り) |
| Go | go.mod | go.mod.graph | go list -m -json all + go mod graph |
| Maven | pom.xml | bcde.mvndeps | mvn dependency:tree |
| Gradle | build.gradle / build.gradle.kts | gradle-dependencies-generated.txt | gradle dependencies -q --console plain |
| SBT | build.sbt | build.sbt.lock | sbt dependencyLockWrite |
| NuGet | *.csproj | packages.lock.json | dotnet restore --use-lock-file |
| Ruby | Gemfile | Gemfile.lock | bundle --quiet |
| Poetry | pyproject.toml | poetry.lock | poetry lock |
| pip | pyproject.toml / requirements.txt | pylock.toml | pip lock . / pip lock -r requirements.txt -o pylock.toml |
| Pipenv | Pipfile | Pipfile.lock | pipenv lock |
| PHP Composer | composer.json | composer.lock | composer update --no-cache --no-install --no-scripts --ignore-platform-reqs |
マニフェストと一緒にロックファイルが既に存在する場合、Cycodeはインストールコマンドを実行せずに直接読み取ります。
SBTの前提条件: sbt-dependency-lockプラグインがインストールされている必要があります。project/plugins.sbtに次の行を追加します:
addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")
エラー時停止オプション
デフォルトでは、Cycodeは、ファイルを読み取れない場合(例:権限エラー)や、SCAスキャン中に依存関係ロックファイルを生成できない場合でも、スキャンを続行します。失敗した項目は警告とともにスキップされ、スキャンは残りのファイルで続行されます。
--stop-on-errorを使用してこの動作を変更します:スキャンは最初のそのような失敗で直ちに中止され、エラーを報告します。
cycode scan -t sca --stop-on-error path ~/home/git/codebase
これは、サイレントな失敗が不完全なスキャン結果を生成するCIパイプラインで役立ちます。--stop-on-errorがトリガーされた場合、根本的な問題を修正するか、SCAリストアの失敗に特化して、--no-restoreを追加してロックファイルの生成をスキップし、直接の依存関係のみをスキャンできます。
--stop-on-errorが使用されると、CLIは終了コードを介してスキャンエラーとポリシー違反を区別します:
| 終了コード | 意味 |
|---|---|
0 | 違反なしでスキャンが完了しました |
1 | スキャンが完了し、違反が見つかりました |
2 | エラーのためスキャンが中止されました(--stop-on-errorが設定されている場合のみ) |
リポジトリースキャン
リポジトリースキャンは、ローカルリポジトリ全体を、公開されたシークレットや安全でない設定ミスがないか調べます。このより包括的なスキャンタイプは、すべてを調べます:リポジトリの現在の状態とそのコミット履歴。リポジトリ内で現在公開されているシークレットだけでなく、以前に削除されたシークレットも探します。
完全なリポジトリースキャンを実行するには、次のコマンドを実行します:
cycode scan repository {{path}}
例えば、~/home/git/codebaseに保存されているリポジトリをスキャンしたい場合は、次のコマンドを実行できます:
cycode scan repository ~/home/git/codebase
このコマンドで使用できるオプションは次のとおりです:
| オプション | 説明 |
|---|---|
-b, --branch TEXT | スキャンするブランチ。設定されていない場合はデフォルトブランチをスキャンします |
ブランチオプション
ローカルリポジトリの特定のブランチをスキャンするには、引数-b(または--branch)に続けて、スキャンしたいブランチの名前を追加します。
前の例で、devという名前のブランチのみをスキャンしたい場合は、次のコマンドを実行できます:
cycode scan repository ~/home/git/codebase -b dev
パススキャン
パススキャンは、GITリポジトリのみに焦点を当てるのではなく、特定のローカルディレクトリとその中のすべての内容を調べます。
ディレクトリスキャンを実行するには、次のコマンドを実行します:
cycode scan path {{path}}
例えば、~/home/git/codebaseにあるディレクトリをスキャンしたいシナリオを考えてみましょう。次のコマンドを実行できます:
cycode scan path ~/home/git/codebase
Terraformプランスキャン
Cycode CLIはTerraformプランスキャンをサポートしています(Terraform 0.12以降をサポート)
TerraformプランファイルはJSON形式である必要があります(.json拡張子を持つ)
設定ファイルしかない場合は、以下の手順でプランを生成できます:
-
Terraform設定ファイルを含む作業ディレクトリを初期化します:
terraform init -
Terraform実行プランを作成し、バイナリ出力を保存します:
terraform plan -out={tfplan_output} -
バイナリ出力ファイルを読み取り可能なJSONに変換します:
terraform show -json {tfplan_output} > {tfplan}.json -
Cycode CLIで
{tfplan}.jsonをスキャンします:cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json
コミット履歴スキャン
[!NOTE] コミット履歴スキャンはIaCスキャンでは利用できません。
コミット履歴スキャンコマンドには、主に2つの機能があります:
- 全履歴スキャン:リポジトリ履歴内のすべてのコミットを分析します
- 差分スキャン:特定のコミット間の変更のみをスキャンします
シークレットスキャンは、リポジトリ履歴内のすべてのコミットを分析できます。これは、導入後に削除されたシークレットでも漏洩または露出する可能性があるためです。SCAおよびSASTスキャンの場合、コミット履歴コマンドはコミット間の差分/変更のスキャンに焦点を当てており、プルリクエストのレビューや増分スキャンに最適です。
コミット履歴スキャンは、Gitリポジトリのコミット履歴を調査し、包括的な履歴分析と特定の変更のターゲットを絞った差分スキャンの両方に使用できます。
コミット履歴スキャンを実行するには、次のコマンドを実行します:
cycode scan commit-history {{path}}
例えば、~/home/git/codebaseに保存されているリポジトリのコミット履歴をスキャンしたいシナリオを考えてみましょう。その場合は、次のコマンドを実行できます:
cycode scan commit-history ~/home/git/codebase
このコマンドで使用できるオプションは次のとおりです:
| オプション | 説明 |
|---|---|
-r, --commit-range TEXT | このgitリポジトリのコミット範囲をスキャンします。デフォルトではcycodeはすべてのコミット履歴をスキャンします(例:HEAD~1) |
コミット範囲オプション(差分スキャン)
コミット範囲オプションは差分スキャンを有効にします – リポジトリ全体の履歴ではなく、特定のコミット間の変更のみをスキャンします。 これは特に以下の場合に役立ちます:
- プルリクエストの検証:PRで導入された変更のみをスキャンします
- 増分CI/CDスキャン:コードベース全体ではなく最近の変更に焦点を当てます
- フィーチャーブランチのレビュー:main/masterブランチとの変更を比較します
- パフォーマンスの最適化:関連する変更にスコープを限定することでスキャンを高速化します
コミット範囲の構文
--commit-range(-r)オプションは、標準のGitリビジョン構文をサポートしています:
| 構文 | 説明 | 例 |
|---|---|---|
commit1..commit2 | commit1からcommit2への変更 | abc123..def456 |
commit1...commit2 | commit2にありcommit1にない変更 | main...feature-branch |
commit | commitからHEADへの変更 | HEAD~1 |
branch1..branch2 | branch1からbranch2への変更 | main..feature-branch |
差分スキャンの例
最後のコミットの変更をスキャン:
cycode scan commit-history -r HEAD~1 ~/home/git/codebase
2つの特定のコミット間の変更をスキャン:
cycode scan commit-history -r abc123..def456 ~/home/git/codebase
mainと比較したフィーチャーブランチの変更をスキャン:
cycode scan commit-history -r main..HEAD ~/home/git/codebase
mainとフィーチャーブランチ間の変更をスキャン:
cycode scan commit-history -r main..feature-branch ~/home/git/codebase
最後の3つのコミットのすべての変更をスキャン:
cycode scan commit-history -r HEAD~3..HEAD ~/home/git/codebase
[!TIP] CI/CDパイプラインでは、
${{ github.event.pull_request.base.sha }}..${{ github.sha }}(GitHub Actions)や$CI_MERGE_REQUEST_TARGET_BRANCH_SHA..$CI_COMMIT_SHA(GitLab CI)などの環境変数を使用して、PR/MRの変更のみをスキャンできます。
プリコミットスキャン
プリコミットスキャンは、変更をリポジトリにコミットする前に問題を自動的に特定します。このスキャンを手動で実行する必要はありません。このガイドのインストールセクションで詳しく説明されているように、プリコミットフックを設定してください。
プリコミットフックをインストールした後、特定のコミット中にスキャンをスキップしたい場合があります。これを行うには、単一のコミットのスキャンをスキップするためにgitコマンドに以下を追加します:
SKIP=cycode git commit -m <your commit message>`
プリプッシュスキャン
プリプッシュスキャンは、変更をリモートリポジトリにプッシュする前に問題を自動的に特定します。このフックはクライアント側で実行され、プッシュされようとしているコミットのみをスキャンするため、問題がリモートリポジトリに到達する前に捕捉するのに効率的です。
[!NOTE] プリプッシュフックはIaCスキャンでは利用できません。
プリプッシュフックはpre-commitフレームワークと統合され、任意のgit push操作の前に実行するように設定できます。
プリプッシュフックのインストール
pre-commitフレームワークを使用してプリプッシュフックを設定するには:
-
pre-commitフレームワークをインストールします(まだインストールされていない場合):
pip3 install pre-commit -
プリプッシュフックを含めるように
.pre-commit-config.yamlファイルを作成または更新します:repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode-pre-push stages: [pre-push] -
複数のスキャンタイプの場合は、次の設定を使用します:
repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode-pre-push # Secrets scan stages: [pre-push] - id: cycode-sca-pre-push # SCA scan stages: [pre-push] - id: cycode-sast-pre-push # SAST scan stages: [pre-push] -
プリプッシュフックをインストールします:
pre-commit install --hook-type pre-pushインストールが成功すると、
Pre-push installed at .git/hooks/pre-pushというメッセージが表示されます。 -
プリプッシュフックを最新の状態に保ちます:
pre-commit autoupdate
プリプッシュスキャンの仕組み
プリプッシュフックは:
- プッシュされるコミットに関する情報を受け取ります
- スキャンする適切なコミット範囲を計算します
- 新しいブランチの場合:デフォルトブランチとのマージベースからすべてのコミットをスキャンします
- 既存のブランチの場合:最後のプッシュ以降の新しいコミットのみをスキャンします
- 他のCycodeスキャンモードと同じ包括的なスキャンを実行します
スマートデフォルトブランチ検出
プリプッシュフックは、次の優先順位でマージベース計算用のデフォルトブランチをインテリジェントに検出します:
- 環境変数:
CYCODE_DEFAULT_BRANCH– 手動での上書きを許可します - GitリモートHEAD:
git symbolic-ref refs/remotes/origin/HEADを使用して実際のリモートデフォルトブランチを検出します - Gitリモート情報:symbolic-refが失敗した場合に
git remote show originにフォールバックします - ハードコードされたフォールバック:一般的なデフォルトブランチ名(origin/main、origin/master、main、master)を使用します
カスタムデフォルトブランチの設定:
export CYCODE_DEFAULT_BRANCH=origin/develop
このスマート検出により、リポジトリがmain、master、develop、またはその他のデフォルトブランチ名を使用しているかどうかに関係なく、プリプッシュフックが正しく動作します。
プリプッシュスキャンのスキップ
特定のプッシュ操作でプリプッシュスキャンをスキップするには、次を使用します:
SKIP=cycode-pre-push git push
または、すべてのプリプッシュフックをスキップするには:
git push --no-verify
[!TIP] プリプッシュフックは
git pushコマンドでトリガーされ、プッシュされようとしているコミットのみをスキャンするため、リポジトリ全体をスキャンするよりも効率的です。
スキャンからパスを除外する
.cycodeignoreファイルを使用して、Cycode CLIがスキャンから除外するファイルとディレクトリを指定できます。
これは.gitignoreファイルと同様に機能します。これにより、関連するコードにスキャンを集中させ、特定のパスがローカルで違反をトリガーするのを防ぐことができます。
仕組み
- 作業フォルダーに
.cycodeignoreという名前のファイルを作成します。 .gitignoreと同じパターンを使用して、除外するファイルとディレクトリをリストします。- cycodeスキャンコマンドを実行する予定のディレクトリにこのファイルを配置します。
[!WARNING]
- 無効なファイル:
.cycodeignoreファイルに構文エラーが含まれている場合、CLIスキャンは失敗し、エラーを返します。- パスの無視と違反の無視:このファイルはパスを除外するためのものです。これは、CLIが特定の違反を無視する機能(たとえば、--ignore-violationフラグの使用)とは異なります。
サポートされているスキャナー
- SAST
- IaC(近日公開)
- SCA(近日公開)
スキャン結果
各スキャンは、問題が見つかったかどうかを示すメッセージで完了します。
問題が見つからない場合、スキャンは次の成功メッセージで終了します:
Good job! No issues were found!!! 👏👏👏
問題が見つかった場合、代わりに完了時に違反カードが表示されます。この場合は、結果メッセージで強調表示された特定の行について、問題のファイルを確認する必要があります。問題を解決するために必要な変更を実装し、スキャンを再度実行します。
シークレットの表示/非表示
以下の例では、cliサブフォルダーにあるファイルsecret_testでシークレットが見つかりました。メッセージの2番目の部分は、シークレットが表示される特定の行を示しています。この場合、googleApiKeyに割り当てられた値です。
この例では、実際のシークレット値がどのように難読化され、シークレットの大部分がアスタリスクに置き換えられているかに注目してください。スキャンはデフォルトでシークレットを難読化しますが、この機能を無効にして完全なシークレットを表示することもできます(スキャン結果を表示しているマシンが覗き見から十分に安全であると仮定します)。
シークレットの難読化を無効にするには、任意のタイプのスキャンに--show-secret引数を追加します。
次の例では、cliサブディレクトリに対してパススキャンが実行され、見つかったシークレットを完全に表示するオプションが有効になっています:
cycode scan --show-secret path ./cli
結果は難読化されません。
ソフトフェイル
通常の操作では、スキャン結果に問題が見つかった場合、CLIは終了コード1を返します。CI/CD設定によっては、これは通常、全体的な失敗になります。これが発生しないようにするには、ソフトフェイル機能を使用できます。
任意のタイプのスキャンに--soft-failオプションを追加すると、結果が見つかったかどうかに関係なく、終了コードは0に強制されます。
スキャン結果の例
シークレット結果の例
╭─────────────────────────────────────────────────────────────── Hardcoded generic-password is used ───────────────────────────────────────────────────────────────╮
│ Violation 12 of 12 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 34 }; │ │
│ │ In file /Users/cycodemacuser/NodeGoat/test/s │ │ 35 │ │
│ │ ecurity/profile-test.js │ │ 36 var sutUserName = "user1"; │ │
│ │ Secret SHA b4ea3116d868b7c982ee6812cce61727856b │ │ ❱ 37 var sutUserPassword = "Us*****23"; │ │
│ │ 802b3063cd5aebe7d796988552e0 │ │ 38 │ │
│ │ Rule ID 68b6a876-4890-4e62-9531-0e687223579f │ │ 39 chrome.setDefaultService(service); │ │
│ ╰────────────────────────────────────────────────────╯ │ 40 │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ A generic secret or password is an authentication token used to access a computer or application and is assigned to a password variable. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
IaC結果の例
╭──────────── Enable Content Encoding through the attribute 'MinimumCompressionSize'. This value should be greater than -1 and smaller than 10485760. ─────────────╮
│ Violation 45 of 110 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 20 BinaryMediaTypes: │ │
│ │ In file ...ads-copy/iac/cft/api-gateway/ap │ │ 21 - !Ref binaryMediaType1 │ │
│ │ i-gateway-rest-api/deploy.yml │ │ 22 - !Ref binaryMediaType2 │ │
│ │ IaC Provider CloudFormation │ │ ❱ 23 MinimumCompressionSize: -1 │ │
│ │ Rule ID 33c4b90c-3270-4337-a075-d3109c141b │ │ 24 EndpointConfiguration: │ │
│ │ 53 │ │ 25 Types: │ │
│ ╰────────────────────────────────────────────────────╯ │ 26 - EDGE │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ This policy validates the proper configuration of content encoding in AWS API Gateway. Specifically, the policy checks for the attribute │ │
│ │ 'minimum_compression_size' in API Gateway REST APIs. Correct configuration of this attribute is important for enabling content encoding of API responses for │ │
│ │ improved API performance and reduced payload sizes. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SCA結果の例
╭─────────────────────────────────────────────────────── [CVE-2019-10795] Prototype Pollution in undefsafe ────────────────────────────────────────────────────────╮
│ Violation 172 of 195 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 26758 "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", │ │
│ │ In file /Users/cycodemacuser/Node │ │ 26759 "dev": true │ │
│ │ Goat/package-lock.json │ │ 26760 }, │ │
│ │ CVEs CVE-2019-10795 │ │ ❱ 26761 "undefsafe": { │ │
│ │ Package undefsafe │ │ 26762 "version": "2.0.2", │ │
│ │ Version 2.0.2 │ │ 26763 "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", │ │
│ │ First patched version Not fixed │ │ 26764 "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", │ │
│ │ Dependency path nodemon 1.19.1 -> │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │ undefsafe 2.0.2 │ │
│ │ Rule ID 9c6a8911-e071-4616-86db-4 │ │
│ │ 943f2e1df81 │ │
│ ╰────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ undefsafe before 2.0.3 is vulnerable to Prototype Pollution. The 'a' function could be tricked into adding or modifying properties of Object.prototype using │ │
│ │ a __proto__ payload. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SAST結果の例
╭───────────────────────────────────────────── [CWE-208: Observable Timing Discrepancy] Observable Timing Discrepancy ─────────────────────────────────────────────╮
│ Violation 24 of 49 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 173 " including numbers, lowercase and uppercase letters."; │ │
│ │ In file /Users/cycodemacuser/NodeGoat/app │ │ 174 return false; │ │
│ │ /routes/session.js │ │ 175 } │ │
│ │ CWE CWE-208 │ │ ❱ 176 if (password !== verify) { │ │
│ │ Subcategory Security │ │ 177 errors.verifyError = "Password must match"; │ │
│ │ Language js │ │ 178 return false; │ │
│ │ Security Tool Bearer (Powered by Cycode) │ │ 179 } │ │
│ │ Rule ID 19fbca07-a8e7-4fa6-92ac-a36d15509 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │ fa9 │ │
│ ╰────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Observable Timing Discrepancy occurs when the time it takes for certain operations to complete can be measured and observed by attackers. This vulnerability │ │
│ │ is particularly concerning when operations involve sensitive information, such as password checks or secret comparisons. If attackers can analyze how long │ │
│ │ these operations take, they might be able to deduce confidential details, putting your data at risk. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
会社のカスタム修復ガイドライン
会社がCycodeポータルの関連ポリシーでカスタム修復ガイドラインを設定している場合、追加した修復ガイドラインを含む「会社のガイドライン」フィールドが表示されます。会社のガイドラインを追加していない場合、このフィールドはCLIツールに表示されないことに注意してください。
スキャン結果の無視
無視ルールを追加して、特定のシークレット値、特定のSHA512値、特定のパス、および特定のCycodeシークレットおよびIaCルールIDを無視できます。これにより、スキャンはこれらの値に対してアラートを出さなくなります。無視ルールは./.cycode/config.yamlファイルにローカルに書き込まれ、保存されます。
[!WARNING] 無視する値を追加する場合は、スキャンが真陽性を検出し続けるように、値、パス、およびポリシーを慎重に検討する必要があります。
cycode ignoreコマンドで使用できるオプションは次のとおりです:
| オプション | 説明 |
|---|---|
--by-value TEXT | シークレットのスキャン中に特定の値を無視します。詳細はシークレット値の無視を参照してください。 |
--by-sha TEXT | シークレットのスキャン中に文字列の特定のSHA512表現を無視します。詳細はシークレットSHA値の無視を参照してください。 |
--by-path TEXT | 特定のパスをスキャン対象から除外します。スキャンタイプを指定する必要があります。詳細はパスの無視を参照してください。 |
--by-rule TEXT | 特定のシークレットルールID/IaCルールID/SCAルールIDのスキャンを無視します。詳細はシークレットまたはIaCルールの無視を参照してください。 |
--by-package TEXT | SCAスキャン実行中に特定のパッケージバージョンのスキャンを無視します。期待されるパターン - name@version。詳細はパッケージの無視を参照してください。 |
--by-cve TEXT | SCAスキャン実行中に特定のCVEのスキャンを無視します。期待されるパターン: CVE-YYYY-NNN。 |
-t, --scan-type [secret|iac|sca|sast] | 実行するスキャンを指定します(secret/iac/sca/sast)。デフォルト値はsecretです。 |
-g, --global | 無視ルールを追加し、グローバルの.cycode設定ファイルに更新します。 |
シークレット値の無視
特定のシークレット値を無視するには、--by-valueフラグを使用する必要があります。これにより、指定したシークレット値が今後のすべてのスキャンから無視されます。無視するシークレット値を追加するには、次のコマンドを使用します:
cycode ignore --by-value {{secret-value}}
このセクションの冒頭の例では、特定のシークレット値を無視するコマンドは次のとおりです:
cycode ignore --by-value h3110w0r1d!@#$350
上記の例では、h3110w0r1d!@#$350値をマスクされていないシークレット値に置き換えます。スキャン結果でシークレット値を確認する方法の詳細については、Cycodeスキャンオプションを参照してください。
シークレットSHA値の無視
特定のシークレットSHA値を無視するには、--by-shaフラグを使用する必要があります。これにより、指定したシークレットSHA値が今後のすべてのスキャンから無視されます。無視するシークレットSHA値を追加するには、次のコマンドを使用します:
cycode ignore --by-sha {{secret-sha-value}}
このセクションの冒頭の例では、特定のシークレットSHA値を無視するコマンドは次のとおりです:
cycode ignore --by-sha a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
上記の例では、a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0値をシークレットSHA値に置き換えます。
パスの無視
シークレット、IaC、またはSCAスキャンの特定のパスを無視するには、--by-pathフラグを-t, --scan-typeフラグと組み合わせて使用する必要があります(スキャンタイプを指定する必要があります)。これにより、指定したパスが指定したスキャンタイプの今後のすべてのスキャンから無視されます。無視するパスを追加するには、次のコマンドを使用します:
cycode ignore -t {{scan-type}} --by-path {{path}}
このセクションの冒頭の例では、シークレットの特定のパスを無視するコマンドは次のとおりです:
cycode ignore -t secret --by-path ~/home/my-repo/config
上記の例では、~/home/my-repo/config値をパス値に置き換えます。
このセクションの冒頭の例では、IaCスキャンから特定のパスを無視するコマンドは次のとおりです:
cycode ignore -t iac --by-path ~/home/my-repo/config
上記の例では、~/home/my-repo/config値をパス値に置き換えます。
このセクションの冒頭の例では、SCAスキャンから特定のパスを無視するコマンドは次のとおりです:
cycode ignore -t sca --by-path ~/home/my-repo/config
上記の例では、~/home/my-repo/config値をパス値に置き換えます。
シークレット、IaC、SCA、またはSASTルールの無視
特定のシークレット、IaC、SCA、またはSASTルールを無視するには、--by-ruleフラグを-t, --scan-typeフラグと組み合わせて使用する必要があります(スキャンタイプを指定する必要があります)。これにより、指定したルールID値が今後のすべてのスキャンから無視されます。無視するルールID値を追加するには、次のコマンドを使用します:
cycode ignore -t {{scan-type}} --by-rule {{rule-ID}}
このセクションの冒頭の例では、特定のシークレットルールIDを無視するコマンドは次のとおりです:
cycode ignore -t secret --by-rule ce3a4de0-9dfc-448b-a004-c538cf8b4710
上記の例では、ce3a4de0-9dfc-448b-a004-c538cf8b4710値を無視したいルールIDに置き換えます。
このセクションの冒頭の例では、特定のIaCルールIDを無視するコマンドは次のとおりです:
cycode ignore -t iac --by-rule bdaa88e2-5e7c-46ff-ac2a-29721418c59c
上記の例では、bdaa88e2-5e7c-46ff-ac2a-29721418c59c値を無視したいルールIDに置き換えます。
このセクションの冒頭の例では、特定のSCAルールIDを無視するコマンドは次のとおりです:
cycode ignore -t sca --by-rule dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b
上記の例では、dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b値を無視したいルールIDに置き換えます。
パッケージの無視
[!NOTE] このオプションはSCAスキャンでのみ利用可能です。
SCAスキャンで特定のパッケージを無視するには、--by-packageフラグを-t, --scan-typeフラグと組み合わせて使用する必要があります(scaスキャンタイプを指定する必要があります)。これにより、{{package_name}}@{{package_version}}形式を使用して、指定したパッケージが今後のすべてのスキャンから無視されます。無視するパッケージとバージョンを追加するには、次のコマンドを使用します:
cycode ignore --scan-type sca --by-package {{package_name}}@{{package_version}}
または
cycode ignore -t sca --by-package {{package_name}}@{{package_version}}
以下の例では、特定のSCAパッケージを無視するコマンドは次のとおりです:
cycode ignore --scan-type sca --by-package pyyaml@5.3.1
上記の例では、pyyamlをパッケージ名に、5.3.1を無視したいパッケージバージョンに置き換えます。
設定ファイルによる無視
適用された無視ルールは、config.yamlという設定ファイルに保存されます。
このファイルは開発者間で簡単に共有したり、リモートのGitにコミットしたりすることもできます。
これらのファイルは常に.cycodeフォルダに配置されます。
フォルダはドット(.)で始まるため、表示するには隠しファイルの表示を有効にする必要があります。
設定ファイルのパス
デフォルトでは、すべてのcycode ignoreコマンドは、CLIが実行された現在のディレクトリに無視ルールを保存します。
例:/Users/name/projects/backendから無視CLIコマンドを実行すると、config.yamlが/Users/name/projects/backend/.cycodeに作成されます。
➜ backend pwd
/Users/name/projects/backend
➜ backend cycode ignore --by-value test-value
➜ backend tree -a
.
└── .cycode
└── config.yaml
2 directories, 1 file
2つ目のオプションは、無視ルールをグローバル設定ファイルに保存することです。
グローバル設定のパスは~/.cycode/config.yamlです。
ここで、~はmacOSではusers home directory, for example, /Users/name`を意味します。
グローバルスペースへの保存は、cycode ignoreコマンドの-gフラグを使用して実行できます。
例:cycode ignore -g --by-value test-value。
適切な作業ディレクトリ
.cycodeフォルダを配置し、CLIを同じ場所から実行することが非常に重要です。
CI/CD(GitHub Actions、Jenkinsなど)などの異なる環境で作業する場合は、これを再確認する必要があります。
.cycodeフォルダをリポジトリのルートにコミットできます。このシナリオでは、リポジトリのルートからCLIスキャンを実行する必要があります。それが要件に合わない場合は、.cycodeフォルダを任意の場所に一時的にコピーし、そのフォルダからCLIスキャンを実行できます。
設定内の無視ルールの構造
CLIが無視ルールをどのように保存するかを理解することは、CLIなしでこれらの設定ファイルを読み取ったり、変更したりするために重要です。
抽象的なYAML構造:
exclusions:
{scanTypeName}:
{ignoringType}:
- someIgnoringValue1
- someIgnoringValue2
scanTypeNameの可能な値:iac、sca、sast、secret。
ignoringTypeの可能な値:paths、values、rules、packages、shas、cves。
[!WARNING] 「値による無視」の値はプレーンテキストとして保存されません! CLIは値のsha256ハッシュを代わりに保存します。 設定ファイルを手動で変更する場合は、文字列のハッシュを配置する必要があります。
実際のconfig.yamlの例:
exclusions:
iac:
rules:
- bdaa88e2-5e7c-46ff-ac2a-29721418c59c
sca:
packages:
- pyyaml@5.3.1
secret:
paths:
- /Users/name/projects/build
rules:
- ce3a4de0-9dfc-448b-a004-c538cf8b4710
shas:
- a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
values:
- a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
- 60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752
レポートコマンド
SBOMレポートの生成
ソフトウェア部品表(SBOM)は、アプリケーションの開発と配信に関与するすべての構成コンポーネントとソフトウェア依存関係のインベントリです。 このコマンドを使用すると、ローカルプロジェクトまたはリポジトリURIのSBOMレポートを作成できます。
このコマンドで使用できるオプションは次のとおりです:
| オプション | 説明 | 必須 | デフォルト |
|---|---|---|---|
-f, --format [spdx-2.2|spdx-2.3|cyclonedx-1.4] | SBOM形式 | はい | |
-o, --output-format [JSON] | 出力ファイル形式を指定します | いいえ | json |
--output-file PATH | 出力ファイル | いいえ | 現在のディレクトリに保存される自動生成ファイル名 |
--include-vulnerabilities | 脆弱性を含める | いいえ | False |
--include-dev-dependencies | 開発依存関係を含める | いいえ | False |
このコマンドで使用できるサブコマンドは次のとおりです:
| コマンド | 説明 |
|---|---|
path | コマンドで指定されたパスのSBOMレポートを生成します |
repository-url | コマンドで指定されたリポジトリURIのSBOMレポートを生成します |
リポジトリ
リポジトリURIのSBOMレポートを作成するには:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> repository_url <repository url>
例:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies repository_url https://github.com/cycodehq/cycode-cli.git
ローカルプロジェクト
パスのSBOMレポートを作成するには:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> path </path/to/project>
例:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project
pathサブコマンドは、次の追加オプションをサポートしています:
| オプション | 説明 |
|---|---|
--no-restore | ロックファイルの復元をスキップし、直接依存関係のみをスキャンします。詳細はロック復元オプションを参照してください。 |
--gradle-all-sub-projects | すべてのサブプロジェクトでGradle復元コマンドを実行します(マルチプロジェクトのGradleビルドのルートから使用します)。 |
--maven-settings-file | Mavenのみ、依存関係ツリーの構築時にカスタムのsettings.xmlファイルを使用できます。 |
インポートコマンド
SBOMのインポート
ソフトウェア部品表(SBOM)は、アプリケーションの開発と配信に関与するすべての構成コンポーネントとソフトウェア依存関係のインベントリです。 このコマンドを使用すると、ファイルシステムからSBOMファイルをCycodeにインポートできます。
このコマンドで使用できるオプションは次のとおりです:
| オプション | 説明 | 必須 | デフォルト |
|---|---|---|---|
-n, --name TEXT | SBOMの表示名 | はい | |
-v, --vendor TEXT | SBOMを提供したエンティティの名前 | はい | |
-l, --label TEXT | SBOMにラベルを添付する | いいえ | |
-o, --owner TEXT | このSBOMの連絡先となるCycodeユーザーのメールアドレス | いいえ | |
-b, --business-impact [High | Medium | Low] | ビジネスへの影響 | いいえ | Medium |
例:
cycode import sbom --name example-sbom --vendor cycode -label tag1 -label tag2 --owner example@cycode.com /path/to/local/project
スキャンログ
すべてのCLIスキャンはCycodeに記録されます。ログは、設定 > CLIログの下にあります。
構文ヘルプ
任意のコマンドにいつでも--help引数を追加すると、利用可能なオプションとその構文を表示するヘルプメッセージが表示されます。
一般的なヘルプを表示するには、次のコマンドを入力するだけです:
cycode --help
スキャンオプションを表示するには、次のように入力します:
cycode scan --help
特定のタイプのスキャンで利用可能なオプションを表示するには、次のように入力します:
cycode scan {{option}} --help
たとえば、パススキャンで利用可能なオプションを表示するには、次のように入力します:
cycode scan path --help
ignoreスキャン機能で利用可能なオプションを表示するには、次のコマンドを使用します:
cycode ignore --help
レポートで利用可能なオプションを表示するには、次のコマンドを使用します:
cycode report --help
特定のタイプのレポートで利用可能なオプションを表示するには、次のように入力します:
cycode scan {{option}} --help