Cycode MCP Server

公式

開発ライフサイクルにおけるセキュリティを、CycodeによるSAST、SCA、シークレット、IaCスキャンで強化します。

ドキュメント

Cycode CLI ユーザーガイド

Cycode コマンドラインインターフェース (CLI) は、ローカルにインストールしてリポジトリをスキャンし、シークレット、Infrastructure as Code の設定ミス、ソフトウェア構成分析の脆弱性、静的アプリケーションセキュリティテストの問題を検出するためのアプリケーションです。

このガイドでは、インストールと使用方法の両方について説明します。

目次

  1. 前提条件
  2. インストール
    1. Cycode CLI のインストール
      1. Auth コマンドの使用
      2. Configure コマンドの使用
      3. 環境変数への追加
        1. Unix/Linux の場合
        2. Windows の場合
    2. Pre-Commit フックのインストール
  3. Cycode CLI コマンド
  4. MCP コマンド
    1. MCP サーバーの起動
    2. 利用可能なオプション
    3. MCP ツール
    4. 使用例
    5. 高度な設定
  5. Platform コマンド
    1. コマンドの検出
    2. 注意事項と制限事項
  6. Scan コマンド
    1. スキャンの実行
      1. オプション
        1. 重大度のしきい値
        2. モニター
        3. Cycode レポート
        4. パッケージの脆弱性
        5. ライセンスコンプライアンス
        6. ロックの復元
        7. エラー時に停止
      2. リポジトリスキャン
        1. ブランチオプション
      3. パススキャン
        1. Terraform プランスキャン
      4. コミット履歴スキャン
        1. コミット範囲オプション (差分スキャン)
      5. Pre-Commit スキャン
      6. Pre-Push スキャン
    2. スキャン結果
      1. シークレットの表示/非表示
      2. ソフトフェイル
      3. スキャン結果の例
        1. シークレット結果の例
        2. IaC 結果の例
        3. SCA 結果の例
        4. SAST 結果の例
      4. 企業のカスタム修復ガイドライン
    3. スキャン結果の無視
      1. シークレット値の無視
      2. シークレット SHA 値の無視
      3. パスの無視
      4. シークレット、IaC、または SCA ルールの無視
      5. パッケージの無視
      6. 設定ファイルによる無視
  7. Report コマンド
    1. SBOM レポートの生成
  8. Import コマンド
  9. スキャンログ
  10. 構文ヘルプ

前提条件

  • Cycode CLI アプリケーションには、Python バージョン 3.9 以降が必要です。MCP コマンドは Python 3.10 以降でのみ利用可能です。これより前の Python バージョンを使用している場合、このコマンドは利用できません。
  • cycode auth コマンド を使用して、CLI で Cycode に対して認証します。

インストール

以下のインストール手順は、Windows と UNIX / Linux の両方のオペレーティングシステムに適用されます。

[!NOTE] 以下の手順では、Python 関連のコマンドに python3pip3 を使用することを前提としていますが、Python 環境の設定によっては、システムによって pythonpip コマンドが使用される場合があります。

Cycode CLI のインストール

Cycode CLI アプリケーションをローカルマシンにインストールするには、次の手順を実行します。

  1. コマンドラインまたはターミナルアプリケーションを開きます。

  2. 次のいずれかのコマンドを実行します。

    • PyPI からインストールする場合:

      pip3 install cycode
      
    • Homebrew からインストールする場合:

      brew install cycode
      
    • GitHub リリース からインストールする場合は、お使いのオペレーティングシステムとアーキテクチャに対応する実行可能ファイルをダウンロードし、次のコマンドを実行します。

    cd /path/to/downloaded/cycode-cli
    chmod +x cycode
    ./cycode
    
  3. 最後に CLI を認証します。Cycode クライアント ID と資格情報 (クライアントシークレットまたは OIDC ID トークン) を設定するには、3 つの方法があります。

Auth コマンドの使用

[!NOTE] これは、Cycode CLI で認証するためにローカルマシンを設定する推奨される方法です。

  1. ターミナル/コマンドラインウィンドウに次のコマンドを入力します。

    cycode auth

  2. ブラウザウィンドウが表示され、Cycode へのログインを求められます (下図参照)。

    Cycode login
  3. このページでログイン資格情報を入力し、ログインします。

  4. 最終的に以下のページに移動し、Cycode を承認するビジネスグループを選択するよう求められます (該当する場合)。

    authorize CLI

    [!NOTE] これは、Cycode CLI で認証するためのデフォルトの方法になります。

  5. Allow ボタンをクリックして、選択したビジネスグループで Cycode CLI を承認します。

    allow CLI
  6. 完了すると、選択が成功した場合、次の画面が表示されます。

    successfully auth
  7. ターミナル/コマンドライン画面では、ブラウザウィンドウを閉じると次のように表示されます。

    Successfully logged into cycode

Configure コマンドの使用

[!NOTE] Linux または Windows の環境変数で Cycode クライアント ID とクライアントシークレットを既に設定している場合、それらの資格情報がこの方法よりも優先されます。

  1. ターミナル/コマンドラインウィンドウに次のコマンドを入力します。

    cycode configure
    
  2. Cycode API URL の値を入力します (空白のままにするとデフォルト値が使用されます)。

    Cycode API URL [https://api.cycode.com]: https://api.onpremise.com

  3. Cycode APP URL の値を入力します (空白のままにするとデフォルト値が使用されます)。

    Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com

  4. Cycode クライアント ID の値を入力します。

    Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d

  5. Cycode クライアントシークレットの値を入力します (OIDC ID トークンを使用する予定の場合はスキップします)。

    Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e

  6. Cycode OIDC ID トークンの値を入力します (オプション)。

    Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

  7. 値が正常に入力されると、次のメッセージが表示されます。

    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 の場合

  1. コントロールパネルから、システムメニューに移動します。

    system menu
  2. 次に、システムの詳細設定をクリックします。

    advanced system setting
  3. 開いたシステムのプロパティウィンドウで、環境変数ボタンをクリックします。

    environments variables button
  4. ID とシークレットキーにそれぞれ一致する値を持つ CYCODE_CLIENT_ID 変数と CYCODE_CLIENT_SECRET 変数を作成します。OIDC 経由で認証する場合は、OIDC ID トークン値を持つ CYCODE_ID_TOKEN も追加します。

    environment variables window
  5. パスに cycode.exe を挿入して、インストールを完了します。

Pre-Commit フックのインストール

Cycode の pre-commit および pre-push フックは、ローカルリポジトリ内に設定できるため、コードをコミットまたはコードベースにプッシュする前に、Cycode CLI アプリケーションがコードの問題を自動的に特定します。

[!NOTE] pre-commit および pre-push フックは、IaC スキャンでは利用できません。

pre-commit フックをインストールするには、次の手順を実行します。

Pre-Commit フックのインストール

  1. pre-commit フレームワークをインストールします (Python 3.9 以降がインストールされている必要があります)。

    pip3 install pre-commit
    
  2. 設定するローカル Git リポジトリの最上位ディレクトリに移動します。

  3. リポジトリの最上位ディレクトリに、次の内容を含む .pre-commit-config.yaml という名前の新しい YAML ファイルを作成します (先頭の . を含めます)。

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode
            stages: [pre-commit]
    
  4. 特定のニーズに合わせて作成したファイルを変更します。シークレットのスキャンを有効にするには、フック ID cycode を使用します。SCA スキャンを有効にするには、フック ID cycode-sca を使用します。SAST スキャンを有効にするには、フック ID cycode-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]
    
  5. Cycode のフックをインストールします。

    pre-commit install
    

    フックのインストールが成功すると、Pre-commit installed at .git/hooks/pre-commit というメッセージが表示されます。

  6. pre-commit フックを最新の状態に保ちます。

    pre-commit autoupdate
    

    これにより、.pre-commit-config.yaml 内の rev が、利用可能な最新バージョンの Cycode CLI に自動的に更新されます。

[!NOTE] トリガーは git commit コマンドで発生します。 フックは、コミット用にステージングされたファイルに対してのみトリガーされます。

Pre-Push フックのインストール

pre-commit フックに加えて、または代わりに pre-push フックをインストールするには:

  1. .pre-commit-config.yaml ファイルに pre-push フックを追加します。

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  2. pre-push フックをインストールします。

    pre-commit install --hook-type pre-push
    
  3. 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-notifierCLI のアップデートを確認しません。
-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アカウントに関連付けます。
configureCLIクライアント認証を設定するための初期コマンドです。
ignore特定の値、パス、またはルールIDを無視します。
mcpModel Context Protocol (MCP) サーバーを起動し、AIとCycodeのスキャン機能との統合を可能にします。
scanシークレット/IaC/SCA/SAST違反についてコンテンツをスキャンします。実行するスキャンタイプ(commit-history/path/repositoryなど)を指定する必要があります。
reportレポートを生成します。SBOMとして実行するレポートタイプを指定する必要があります。
statusCLIのステータスを表示して終了します。

MCP コマンド [実験的機能]

[!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 環境変数を設定する必要はありません。

Add MCP Server to Cursor using UV

MCPサーバーの起動

MCPサーバーを起動するには、次のコマンドを使用します。

cycode mcp

デフォルトでは、stdio トランスポートを使用してサーバーが起動します。これは、サブプロセスを生成できるローカル統合やAIアプリケーションに適しています。

利用可能なオプション

オプション説明
-t, --transportMCPサーバーのトランスポートタイプ: stdiosse、または streamable-http (デフォルト: stdio)
-H, --hostサーバーをバインドするホストアドレス (非stdioトランスポートでのみ使用) (デフォルト: 127.0.0.1)
-p, --portサーバーをバインドするポート番号 (非stdioトランスポートでのみ使用) (デフォルト: 8000)
--helpヘルプメッセージと利用可能なオプションを表示します。

MCPツール

MCPサーバーは、AIシステムが使用できる次のツールを提供します。

ツール名説明
cycode_secret_scanハードコードされたシークレットをスキャンします。
cycode_sca_scanSoftware Composition Analysis (SCA) - 脆弱性とライセンスの問題をスキャンします。
cycode_iac_scanInfrastructure as Code (IaC) の設定ミスをスキャンします。
cycode_sast_scanStatic Application Security Testing (SAST) - コード品質とセキュリティ上の欠陥をスキャンします。
cycode_statusCycode 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_URLCYCODE_APP_URL の値を設定してください(例:https://api.eu.cycode.comhttps://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"
      }
    }
  }
}

pipx インストールを使用した stdioトランスポート の場合:

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

uvx インストールを使用した stdioトランスポート の場合:

{
  "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_TIMEOUTClaudeやGitHub CopilotなどのMCPクライアントがツール呼び出しの完了を待つタイムアウト時間(秒単位)。長時間実行されるスキャンが完了前に切断される場合は、この値を増やします。

[!TIP] REQUESTS_CA_BUNDLESSL_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つあります。

  1. -v または --verbose フラグを使用する:
cycode -v mcp
  1. CYCODE_CLI_VERBOSE 環境変数を使用する:
CYCODE_CLI_VERBOSE=1 cycode mcp

デバッグログには、以下に関する詳細情報が表示されます。

  • サーバーの起動と設定
  • 接続試行とステータス
  • ツールの実行と結果
  • 発生したエラーまたは警告

この情報は、次のような場合に役立ちます。

  • 接続の問題の診断
  • 特定のツールが機能しない理由の理解
  • 認証の問題の特定
  • トランスポート固有の問題のデバッグ

MCP設定

Platform コマンド [BETA]

[!WARNING] platform コマンドは ベータ版 です。コマンド、引数、および出力形式はCycode API仕様から動的に生成され、リリース間で予告なく変更される可能性があります。まだ本番環境の自動化でこれらに依存しないでください。

cycode platform コマンドは、Cycodeプラットフォームの読み取りAPIをCLIコマンドとして公開します。エンドポイントをリソース(例:projectsviolationsworkflows)ごとにグループ化し、各エンドポイントのパラメーターを型付き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 scancycode 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

Platform の例

# 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'

Platform の注意事項と制限事項

  • 現在は読み取り専用です。 このベータ版では GET エンドポイントのみが公開されています。
  • 仕様駆動型です。 APIに新しいエンドポイントを追加すると、次回キャッシュが更新されたときに自動的に反映されます。
  • 仕様はバンドルされていません。 インストール後(または24時間のキャッシュが期限切れになった後)の最初の cycode platform 呼び出しでは、ネットワークフェッチが実行されます。低速な接続では、この最初の呼び出しに数秒かかる場合があります。後続の呼び出しは、キャッシュが期限切れになるまでほぼ瞬時に行われます。
  • キャッシュTTLを上書きする には CYCODE_SPEC_CACHE_TTL=<seconds> を使用します。

Scan コマンド

スキャンの実行

Cycode CLIアプリケーションは、ユースケースに最適なオプションを選択できるように、いくつかのタイプのスキャンを提供します。現在利用可能なオプションとコマンドは次のとおりです。

オプション説明
-t, --scan-type [secret|iac|sca|sast]実行するスキャンを指定します(secret/iac/sca/sast)。デフォルトは secret です。
--show-secret BOOLEANシークレットを平文で表示します。詳細は Show/Hide Secrets セクションを参照してください。
--soft-fail BOOLEAN失敗せずにスキャンを実行し、常にエラーでないステータスコードを返します。詳細は Soft Fail セクションを参照してください。
--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-fileMavenのみ。依存関係をスキャンする際にカスタム 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 ロールを持っている必要があります。

cli-report

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

パッケージ脆弱性オプション

[!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 フラグを使用します。

以下のエコシステムは、自動ロックファイル復元をサポートしています。

エコシステムマニフェストファイル生成されるロックファイル呼び出されるツール(ロックファイルが存在しない場合)
npmpackage.jsonpackage-lock.jsonnpm install --package-lock-only --ignore-scripts --no-audit
Yarnpackage.jsonyarn.lockyarn install --ignore-scripts
pnpmpackage.jsonpnpm-lock.yamlpnpm install --ignore-scripts
Denodeno.json / deno.jsoncdeno.lock(既存のロックファイルの読み取りのみ)
Gogo.modgo.mod.graphgo list -m -json all + go mod graph
Mavenpom.xmlbcde.mvndepsmvn dependency:tree
Gradlebuild.gradle / build.gradle.ktsgradle-dependencies-generated.txtgradle dependencies -q --console plain
SBTbuild.sbtbuild.sbt.locksbt dependencyLockWrite
NuGet*.csprojpackages.lock.jsondotnet restore --use-lock-file
RubyGemfileGemfile.lockbundle --quiet
Poetrypyproject.tomlpoetry.lockpoetry lock
PipenvPipfilePipfile.lockpipenv lock
PHP Composercomposer.jsoncomposer.lockcomposer 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 拡張子を持つ)。

設定ファイルしかない場合は、次の手順でプランを生成できます。

  1. Terraform設定ファイルを含む作業ディレクトリを初期化します。

    terraform init

  2. Terraform実行プランを作成し、バイナリ出力を保存します。

    terraform plan -out={tfplan_output}

  3. バイナリ出力ファイルを読み取り可能なJSONに変換します。

    terraform show -json {tfplan_output} > {tfplan}.json

  4. Cycode CLIで {tfplan}.json をスキャンします。

    cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json

コミット履歴スキャン

[!NOTE] コミット履歴スキャンはIaCスキャンでは利用できません。

コミット履歴スキャンコマンドは、主に2つの機能を提供します。

  1. 完全な履歴スキャン: リポジトリ履歴内のすべてのコミットを分析します
  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..commit2commit1からcommit2への変更abc123..def456
commit1...commit2commit2に含まれ、commit1に含まれない変更main...feature-branch
commitコミットからHEADへの変更HEAD~1
branch1..branch2branch1から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フレームワークを使用してプレプッシュフックを設定するには:

  1. pre-commitフレームワークをインストールします(まだインストールされていない場合):

    pip3 install pre-commit
    
  2. .pre-commit-config.yamlファイルを作成または更新して、プレプッシュフックを含めます:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  3. 複数のスキャンタイプには、この設定を使用します:

    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]
    
  4. プレプッシュフックをインストールします:

    pre-commit install --hook-type pre-push
    

    インストールが成功すると、次のメッセージが表示されます:Pre-push installed at .git/hooks/pre-push

  5. プレプッシュフックを最新の状態に保ちます:

    pre-commit autoupdate
    

プレプッシュスキャンの仕組み

プレプッシュフックは:

  • プッシュされるコミットに関する情報を受け取ります
  • スキャンする適切なコミット範囲を計算します
  • 新しいブランチの場合:デフォルトブランチとのマージベースからのすべてのコミットをスキャンします
  • 既存のブランチの場合:最後のプッシュ以降の新しいコミットのみをスキャンします
  • 他のCycodeスキャンモードと同じ包括的なスキャンを実行します

スマートデフォルトブランチ検出

プレプッシュフックは、以下の優先順位でマージベース計算のためのデフォルトブランチをインテリジェントに検出します:

  1. 環境変数: CYCODE_DEFAULT_BRANCH - 手動での上書きを許可します
  2. GitリモートHEAD: git symbolic-ref refs/remotes/origin/HEADを使用して実際のリモートデフォルトブランチを検出します
  3. Gitリモート情報: symbolic-refが失敗した場合、git remote show originにフォールバックします
  4. ハードコードされたフォールバック: 一般的なデフォルトブランチ名(origin/main、origin/master、main、master)を使用します

カスタムデフォルトブランチの設定:

export CYCODE_DEFAULT_BRANCH=origin/develop

このスマート検出により、リポジトリがmainmasterdevelop、またはその他のデフォルトブランチ名を使用しているかどうかに関係なく、プレプッシュフックが正しく動作します。

プレプッシュスキャンのスキップ

特定のプッシュ操作でプレプッシュスキャンをスキップするには、以下を使用します:

SKIP=cycode-pre-push git push

または、すべてのプレプッシュフックをスキップするには:

git push --no-verify

[!TIP] プレプッシュフックはgit pushコマンドでトリガーされ、プッシュされようとしているコミットのみをスキャンするため、リポジトリ全体をスキャンするよりも効率的です。

スキャンからのパス除外

.cycodeignoreファイルを使用して、Cycode CLIがスキャンから除外するファイルとディレクトリを指定できます。 これは.gitignoreファイルと同様に機能します。これにより、関連するコードにスキャンを集中させ、特定のパスがローカルで違反を引き起こすのを防ぐことができます。

仕組み

  1. 作業フォルダに.cycodeignoreという名前のファイルを作成します。
  2. .gitignoreと同じパターンを使用して、除外するファイルとディレクトリをリストします。
  3. cycode scanコマンドを実行する予定のディレクトリにこのファイルを配置します。

[!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 TEXTSCAスキャンの実行中に特定のパッケージバージョンのスキャンを無視します。期待されるパターン - name@version。詳細については、パッケージの無視を参照してください。
--by-cve TEXTSCAスキャンの実行中に特定の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 [email protected]

上記の例では、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 の可能な値: iacscasastsecret

ignoringType の可能な値: pathsvaluesrulespackagesshascves

[!WARNING] 「値による無視」の値は平文で保存されません! CLI は代わりに値の sha256 ハッシュを保存します。 手動で設定ファイルを変更する場合は、文字列のハッシュを入力する必要があります。

実際の config.yaml の例:

exclusions:
  iac:
    rules:
    - bdaa88e2-5e7c-46ff-ac2a-29721418c59c
  sca:
    packages:
    - [email protected]
  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-fileMaven のみ、依存関係ツリーを構築する際にカスタム settings.xml ファイルを使用できます。

インポートコマンド

SBOM のインポート

ソフトウェア部品表(SBOM)は、アプリケーションの開発と提供に関わるすべての構成コンポーネントとソフトウェア依存関係の一覧です。 このコマンドを使用すると、ファイルシステムから Cycode に SBOM ファイルをインポートできます。

このコマンドで使用可能なオプションは次のとおりです。

オプション説明必須デフォルト
-n, --name TEXTSBOM の表示名はい
-v, --vendor TEXTSBOM を提供したエンティティの名前はい
-l, --label TEXTSBOM にラベルを付加いいえ
-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 [email protected] /path/to/local/project

スキャンログ

すべての CLI スキャンは Cycode にログ記録されます。ログは Settings > CLI Logs で確認できます。

構文ヘルプ

任意のコマンドに --help 引数を追加することで、利用可能なオプションとその構文を表示するヘルプメッセージをいつでも表示できます。

一般的なヘルプを表示するには、次のコマンドを入力します。

cycode --help

スキャンオプションを表示するには、次のコマンドを入力します。

cycode scan --help

特定のスキャンタイプで利用可能なオプションを表示するには、次のコマンドを入力します。

cycode scan {{option}} --help

たとえば、パススキャンで利用可能なオプションを表示するには、次のように入力します。

cycode scan path --help

無視スキャン機能で利用可能なオプションを表示するには、次のコマンドを使用します。

cycode ignore --help

レポートで利用可能なオプションを表示するには、次のコマンドを使用します。

cycode report --help

特定のレポートタイプで利用可能なオプションを表示するには、次のコマンドを入力します。

cycode scan {{option}} --help