スキャン結果に知らないOSSが表示される理由とは?依存関係の脆弱性リスクと対策
スキャン結果に「知らないOSS」が含まれていませんか?
OSSの脆弱性スキャンで「自分で導入した覚えのないライブラリ」が検出され、困惑した経験はありませんか?こんな疑問を持つ方は少なくありません。
- スキャンツールの誤検知?
- 製品のバグ?
- 別プロジェクトのデータが混在している?
しかし、この「知らないOSS」の正体は、自分で導入したOSSが内部で利用している「依存関係(Dependencies)」によるものです。
なぜ、自分が導入していないOSSまで管理する必要があるのでしょうか。この記事では、依存関係の仕組みと、そこに潜む重大なリスクについてご紹介します。
OSSの依存関係とは? - 芋づる式につながる脆弱性の連鎖
OSSは開発を大きく加速させてくれますが、OSS自体も他のOSSの力を借りて機能を提供しています。
例えば:
- 開発アプリケーションAが、ライブラリBを指定して利用する
- 指定されたライブラリBは、さらに別のライブラリCを内部で利用する
このように、芋づる式につながる関係が依存関係です。「5つ導入したつもりが、実際には100を超えるOSSが動いている」ことは珍しくありません。
実際の例として、脆弱性学習用のJavaアプリケーション「EasyBuggy Boot」をスキャンしたところ、以下のOSSの脆弱性(抜粋)が検出されました。
検出された“log4j”は、プロジェクトの依存関係を記載するマニフェストファイルpom.xmlに直接記載しているものではありません。詳細を確認すると、esapiが内部で利用していることが判明しました。
つまり、esapiを導入すれば、log4jも自動的にプロジェクトに組み込まれます。
その結果、もしlog4jに脆弱性があれば、意図せず以下のような事態を招く可能性があります。
- 情報流出が発生
- アクセスしたユーザーへの被害
- 自分のWebアプリケーションが攻撃の踏み台になる
深刻な脆弱性が大きな連鎖を生んだ - Log4Shell事件
2021年12月、log4jにLog4Shell(CVE-2021-44228)という重大な脆弱性が発見されました。危険度を示すCVSSスコアは10.0(最高値)を記録し、世界中のJavaアプリケーションに甚大な影響を与えました。
恐ろしいことに、log4jを直接利用していなくても、Spring BootやApacheなど多くのOSSが内部でlog4jを利用していたため、脆弱性が依存関係を通じて連鎖的に拡大しました。
自分が選んでいないOSSでも、自分のプロジェクトのリスクになる - これが依存関係がもたらす現実です。
意図的に破壊コードを仕込んだ - node-ipc事件
依存関係のリスクは脆弱性だけに限りません。2022年3月、Node.js向けのライブラリnode-ipcに、開発者自身が国際情勢に対する政治的抗議を目的として意図的に破壊的コードを組み込むという前代未聞の事件が発生しました。
node-ipcは、Vue.jsの公式CLI(@vue/cli)など、多数のフロントエンド開発ツールに組み込まれており、直接利用していない開発者にも依存関係を経由して影響が及ぶ可能性がありました。
※問題のバージョンはすでにnpmレジストリから削除されています。
この「プロテストウェア」には、以下の処理が含まれていました。
- 実行環境のIPアドレスから地域を判定
- 対象地域と判断された場合、デスクトップを含むローカル内のファイルを「❤」(ハートの絵文字)で上書きして破壊
どれだけOSSを慎重に選んでも、依存関係を経由して意図的に組み込まれた破壊的コードが入り込む可能性はゼロではありません。
OSSは人が作るものであり、開発者の感情や思想がコードに反映されるリスクは常に存在します。
依存関係を可視化して見てみましょう!
Log4Shellやnode-ipcのような事態を回避するには、依存関係を含めた全体像を把握し、継続的に監視する仕組みが欠かせません。
依存関係を含めた脆弱性管理は手作業では非常に困難です。専用のSCA/SCS(ソフトウェアコンポジション解析/サプライチェーンセキュリティ)ツールの利用を強くおすすめします。
以下は、DerScannerによる依存関係ツリーの可視化例(抜粋)です。
- 赤枠:自分で指定したesapi
- 青枠:依存関係として自動的に組み込まれたlog4j
このように、依存関係の深さや連鎖を一目で確認できるのがSCA/SCSツールの大きなメリットです。
OSSの依存関係管理について、疑問やお悩みはありませんか?
開発プロジェクトで、依存関係を含めてどれくらいのOSSを利用しているか、即答できる方は多くありません。
しかし、Log4Shellやnode-ipcのような事件は、「自分が導入したOSSだけ」では、もはやプロジェクトの安全性を正しく評価できないことを明確にしました。
依存関係も含めた全体像を把握し管理することが現代の脆弱性管理において必須です。
弊社ではSCA/SCSツールの導入・運用サポートまで一貫対応しております。OSS、脆弱性、依存関係管理に不安がある方は、お気軽にご相談ください。


