In this article
SnykでGitHub Actionsワークフローを保護し、JavaScriptのセキュリティを強化する方法
GitHubでソースコードリポジトリを管理しているなら、CI/CDワークフローにGitHub Actionsも活用していることでしょう。これは、JavaScriptアプリケーションのセキュリティを強化する絶好の機会です。
ソフトウェア開発者がGitHub Actionsで使用する主なワークフローは、ソフトウェア成果物のビルドとテストに関するものです。トランスパイルやTypeScriptの型チェックが必要なフロントエンドアプリケーションや、単体テスト、結合テストなどの継続的インテグレーションテストを実行するバックエンドアプリケーションなどが該当します。
Markdownファイルの書式をチェックしたり、READMEのリンク切れを検出したりするなど、便利な補助的GitHub Actionsワークフローも利用できます。
では、セキュリティテストも追加してみてはいかがでしょうか。データ侵害などのセキュリティ問題が起きてから知るよりも、早い段階で把握して修正するほうが賢明です。
GitHub ActionsワークフローにSnykのセキュリティ機能を追加する
Snykには、CIに追加できるカスタム済みのSnyk GitHub Actionsワークフローが用意されています。Snyk CLIを直接使って脆弱性スキャンを管理する手間を省けます。このGitHub Actionのコードリポジトリは、GitHubのsnyk/actionsにあります。
Snykトークンを取得する
まず、GitHub Actionに追加するSnykトークンを取得します。Snyk GitHub Actionsのドキュメントで、Snykトークンの取得方法をご確認ください。トークンを取得したら、GitHubの設定画面からActionsリポジトリのシークレットに追加します。

注:CIワークフローで複数の環境を管理している場合は、リポジトリ単位ではなく、環境ごとにシークレットとしてSnykトークンを設定するほうが安全です。
Snyk GitHub Actionワークフローを設定する
次に、基本的なSnykセキュリティスキャンワークフローを記述した.github/workflows/security.ymlファイルを作成します。
name: Security
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}Snykセキュリティスキャンを実行する
security.ymlワークフローファイルを追加すると、mainブランチへのコミットやプッシュ、またはpull requestイベントをきっかけに実行され、サードパーティパッケージの脆弱性を対象としたオープンソースのセキュリティスキャンを行います。

大成功です!
私の小さなCLIプロジェクトでは、セキュリティ脆弱性は見つかりませんでした。
デフォルトではsnyk testコマンドが実行されるため、このスキャンの対象はオープンソースの脆弱性のみです。誤ってセキュリティ上の問題があるコードを追加してしまった場合に備えて、コードのセキュリティ問題もスキャンできるようにしましょう。
SnykでSASTによるコードセキュリティスキャンを追加する
Snykでは、ソースコードの脆弱性もスキャンできます。安全でないコードを誤って記述したり、安全なコーディングのプラクティスに従わなかったりした場合、Snykはソースからシンクまでのコードフローを検出し、Snyk IDE拡張機能を使っていれば修正方法を提案します。
既存のジョブ宣言を次のように拡張して、GitHub Actionsワークフローにコードセキュリティスキャンを追加しましょう。
code-security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
command: code test Snyk GitHub Actionにcommand: code testというパラメーターを追加していることがわかります。
コードのセキュリティ脆弱性を修正する方法
Snykはコードや依存関係のセキュリティ問題を検出することがあります。ここでは、その対処方法を説明します。
次のGitHub Actionのログでは、Snyk Actionがプロジェクト内のコマンドインジェクションの脆弱性を検出したことがわかります。Snykは次の情報を提示します。
ファイルパスと行番号は、安全でないコードパスの検出に使用されます。次のセキュリティワークフローのスクリーンショットでは、src/bin/cli.tsの8行目が示されています。
検出されたセキュリティ脆弱性の説明です。以下の検出結果では、コマンドライン引数からNode.jsのコアモジュールchild_processへと流れるコマンドインジェクションの脆弱性が示されています。

私がVS Codeにインストールしたように、Snyk IDE拡張機能をインストールすると、次のメリットがあります。
アプリケーション内でコードセキュリティの問題がどのように伝播するか、より詳しいレポートを確認できます
CIワークフローの実行を待たずに、コーディング中にセキュリティ問題を早期に発見できます
修正に役立つセキュリティ上のアドバイスが得られます。また、場合によってはSnyk独自のAIエンジンを利用したSnykのDCAI Fixが、自動修正機能を提供します。

このJavaScriptプロジェクトは、ユーザーが実行するコマンドを受け取り、それを実行するNode.jsのコマンドラインアプリケーションです。システムコマンドの起動はこのNode.js CLIの主要な用途であるため、許容可能なリスクであり、セキュリティ脆弱性ではありません。
Snykがこれをセキュリティ問題として検出しないようにするため、以前Snykが報告した脆弱なコードの行(8行目)の上に、この問題を無視するようSnykに指示するコメントを追加します。
8: // file deepcode ignore IndirectCommandInjection: <accepted user input for the CLI is part of how this program works>
9: const result = await runCommandAndNotify(commandToRun)CIにおけるアプリケーションセキュリティの次のステップ
この記事の関連資料として、次の記事をおすすめします。
チームでJavaを使って開発している場合は、次の記事をぜひ共有してください。GitHub Actionsを使ってJavaアプリケーションのセキュアなCI/CDパイプラインを構築する
npmパッケージを管理し、npmレジストリに公開している場合は、次の記事がおすすめです。GitHub Actionsでnpmパッケージを安全に公開する。
誤検知がある場合やリスクを受け入れる場合に、Snykの問題を無視する方法
Fetch the Flag 2026に参加しよう!
2月12日〜13日、東部時間の正午から翌日正午まで開催されるCapture the Flagイベントで、セキュリティスキルを試しましょう。