ソフトウェア開発プロジェクトにnpmパッケージを組み込むことは開発を効率化しますが、一方で目に見えない既知の脆弱性を持ち込むリスクも存在します。
CVE Lite CLIは、ソフトウェア開発中にロックファイルを対象として動作する軽量なコマンドラインセキュリティスキャナーです。JavaScriptおよびTypeScriptファイルに特化しており、OSV(Open Source Vulnerabilities)を活用した依存関係スキャナーとして、npm、pnpm、Yarnをサポートしています。
本ツールはSonu Kapoor氏が開発したオープンソースツールで、現在はコミュニティによってメンテナンスされており、最近OWASPインキュベータープロジェクトとして採択されました。
Kapoor氏はソフトウェア開発者として25年のキャリアを持ち、セキュアなソフトウェア開発プロセスにおけるあらゆる課題や遅延を身をもって経験してきました。CVE Lite CLIは、まさにそうした課題や遅延を解消するために設計されています。
「開発するプロジェクトには、自分が書いたコードだけでなく、数百ものオープンソースパッケージが含まれます。それらのパッケージはさらに別のパッケージを引き込み、典型的なJavaScriptプロジェクトでは依存関係が数千に達することもあります」と同氏は説明します。
開発者のほとんどは、そうしたパッケージの大半を知らないまま利用しており、どのような経緯で含まれたのかも把握していません。その状態はまさに手探り状態です。「それらのパッケージのどれかに既知のセキュリティ脆弱性が存在するかもしれません。しかし、ほとんどの開発者はそのことに気づいていないのです。」
SBOM(ソフトウェア部品表)はこの問題、特にOSSにおける課題を解決するために導入されました。理論上は有効な手段ですが、特にOSSの分野ではSBOMの信頼性に限界があります。開発者は、知らないうちに自動的に組み込まれたnpmパッケージの脆弱性を検出するためにスキャナーを使う必要がありますが、既存のスキャナーは最適でないタイミングでしか使えないことが多く、十分なサポートを提供できていないのが現状です。
「CVE Lite CLIは、無料のオープンソースコマンドラインツールです。プロジェクトを数秒でスキャンし、脆弱性を含むパッケージを正確に特定します。しかも、問題を指摘するだけにとどまりません。修正方法まで教えてくれる点が大きな違いです。膨大な警告ログを出力するだけのツールとは異なります」と同氏は続けます。「独自のアルゴリズムで脆弱な依存関係を分析し、アプリケーションを壊すことなく安全な代替パッケージへ移行するための最適なコマンドを提示してくれます。」
本ツールにより、開発者はコーディングプロセスの一環として安全なコードを作成できるようになります。
現在、多くのコーディング作業はAIコーディングエージェントの支援のもとで行われています。スキャンをAIに任せるという選択肢もありますが、AIエージェントがセキュリティ面で十分な意識を持っていないという現状の懸念を脇に置いたとしても、それはそれで別の問題を生じさせます。
「AIを使った場合、CIでのスキャンは通常すべての処理の最後に実行されます。npmのビルド、リント、ユニットテスト、イメージのビルドといった工程がすべて完了してから、ようやくCIスキャンが走ります。プロジェクトの規模にもよりますが、10分で終わることもあれば、私がこれまで関わってきた多くのエンタープライズ企業では1〜3時間かかることも珍しくありません。しかもエージェントが空いていなければ、スキャン結果が出るまでさらに数時間待つことになります。」
これが第一の問題です。数時間もただ待ち続ける余裕のある開発者はほとんどいません。多くの場合、次の作業へと移ってしまいます。するとそこで第二の問題が生まれます。最初のプロジェクトに関するコンテキスト(作業の文脈)が失われてしまうことです。この点では、人間もAIエージェントと変わりません。コンテキストの欠如は誤った判断を招きかねません。その影響は、開発者がAIスキャンの結果を受け取ったときに顕在化します。
「こうしたAIスキャンのほとんどは大量の問題リストを出力するだけで、修正方法は示してくれません。『このパッケージにこのCVEがあります。修正してください』といった大まかな指示はあっても、具体的な対処法がありません。CVE Lite CLIなら、脆弱なnpmを安全なnpmパッケージに置き換えるために必要なコマンドを正確に提示してくれます。」
結果として生まれるのは、時間の無駄とストレスの蓄積です。これらはすべて、開発中にコードやnpm・pnpm・Yarnのパッケージを取り込む段階でセキュリティを確保することで解消できます。CVE Lite CLIは開発者自身のデバイス上で動作し、即座にオンデマンドで使用でき、スキャンは数秒で完了します。そして発見された脆弱な依存関係の修正を支援してくれます。
もちろん、推奨コマンドによって新たに取り込まれたnpmパッケージも自動的にスキャンされ、提案された修正が本当に有効かどうかを確認できます。Kapoor氏は自身の経験から、脆弱なnpmパッケージの安全な代替を探すために25回以上もの試行を繰り返した開発者の例を挙げています。
「その苦労を想像してみてください」と同氏は言います。「パッケージをインストールします。CIスキャンが脆弱性を検出したので別のnpmを試します。CIにプッシュして、CIの実行を待ちます。するとやはり脆弱性があると言われます。では次のバージョンを試そう、と同じループに入ります。プッシュして、待って、またも脆弱性があると告げられます。」これを25回繰り返す――途方もない時間の浪費とストレスです。
最大の問題は、こうした苦労が積み重なって面倒に感じてしまうことです。「そうなると」と同氏は付け加えます。「本来は修正すべき脆弱性を、純粋な苦労に嫌気がさして無視し始める開発者も出てきます。CVE Lite CLIはローカルスキャンを数秒で実行できるため、こうした事態を防ぎます。問題を確認し、修正し、次へ進む――そのサイクルをスムーズに実現します。」
CodeSecConで詳しく学ぶ — AI時代における現代アプリケーションの構築・セキュリティ確保・保守のあり方を定義するイベント。