Cycode MCP Server
公式開発ライフサイクルにおけるセキュリティを、CycodeによるSAST、SCA、シークレット、IaCスキャンで強化します。
ドキュメント
Cycode CLI ユーザーガイド
Cycode コマンドラインインターフェース (CLI) は、ローカルにインストールしてリポジトリをスキャンし、シークレット、Infrastructure as Code の設定ミス、ソフトウェア構成分析の脆弱性、静的アプリケーションセキュリティテストの問題を検出するためのアプリケーションです。
このガイドでは、インストールと使用方法の両方について説明します。
目次
- 前提条件
- インストール
- Cycode CLI コマンド
- MCP コマンド
- Platform コマンド
- 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 リリース からインストールする場合は、お使いのオペレーティングシステムとアーキテクチャに対応する実行可能ファイルをダウンロードし、次のコマンドを実行します。
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 で認証するためのデフォルトの方法になります。
-
Allow ボタンをクリックして、選択したビジネスグループで 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 経由で認証する場合は、OIDC ID トークン値を持つCYCODE_ID_TOKENも追加します。
-
パスに
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を使用します。SCA スキャンを有効にするには、フック IDcycode-scaを使用します。SAST スキャンを有効にするには、フック IDcycode-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-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] -
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) サーバーを起動し、AIとCycodeのスキャン機能との統合を可能にします。 |
| scan | シークレット/IaC/SCA/SAST違反についてコンテンツをスキャンします。実行するスキャンタイプ(commit-history/path/repositoryなど)を指定する必要があります。 |
| report | レポートを生成します。SBOMとして実行するレポートタイプを指定する必要があります。 |
| status | CLIのステータスを表示して終了します。 |
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環境変数を設定する必要はありません。
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"
}
}
}
}
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_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設定
Platform コマンド [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
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-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 |
| 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 | コミットから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 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 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 [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 の可能な値: 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:
- [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-file | Maven のみ、依存関係ツリーを構築する際にカスタム settings.xml ファイルを使用できます。 |
インポートコマンド
SBOM のインポート
ソフトウェア部品表(SBOM)は、アプリケーションの開発と提供に関わるすべての構成コンポーネントとソフトウェア依存関係の一覧です。 このコマンドを使用すると、ファイルシステムから Cycode に SBOM ファイルをインポートできます。
このコマンドで使用可能なオプションは次のとおりです。
| オプション | 説明 | 必須 | デフォルト |
|---|---|---|---|
-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 [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