Vulnerable JS Library

概要

  • 脆弱性の名前: Vulnerable JS Library (脆弱な JavaScript ライブラリ)
  • 問題の要点: Web サイトで使用している JavaScript ライブラリに既知の脆弱性が存在し、攻撃者がその脆弱性を悪用して Web サイトやユーザーに損害を与える可能性がある状態。
  • よくある発生シーン: 開発者がライブラリのバージョンを更新せずに放置している、または脆弱性のあるライブラリを誤って導入してしまう。クラウド環境では、複数のサービスが連携して動作することが多いため、依存関係の管理が複雑になり、脆弱なライブラリが混入しやすくなります。

背景

JavaScript ライブラリは、Web サイトの機能を拡張するために広く利用されています。しかし、多くのライブラリには脆弱性が存在し、攻撃者によって悪用される可能性があります。
脆弱性のあるライブラリを使用している場合、Web サイトの改ざん、ユーザーの個人情報の詐取、マルウェアの感染などのリスクが高まります。
近年、Web アプリケーションのセキュリティ対策として、使用しているライブラリの脆弱性管理が重要視されています。

セキュリティ上のリスク

  • クロスサイトスクリプティング (XSS) 攻撃による、Web サイトの改ざん、ユーザーの個人情報の詐取。
  • サービス拒否 (DoS) 攻撃による、Web サイトの停止。
  • リモートコード実行 (RCE) 攻撃による、サーバーの乗っ取り。
  • サプライチェーン攻撃による、Web サイトの信頼性の低下。

対処方法の具体例

JavaScript

誤った設定例

脆弱性のあるバージョンの jQuery を使用している例:

<!-- 誤った例: 脆弱性のあるバージョンの jQuery を使用している -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

正しい設定例

最新版または脆弱性の修正されたバージョンの jQuery を使用するように修正する例:

<!-- 正しい例: 最新版の jQuery を使用している -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

npm

誤った設定例

package.json ファイルで、脆弱性のあるライブラリのバージョンを指定している例:

{
  "dependencies": {
    "脆弱なライブラリ": "1.0.0"
  }
}

正しい設定例

package.json ファイルで、最新版または脆弱性の修正されたライブラリのバージョンを指定するように修正する例:

{
  "dependencies": {
    "脆弱なライブラリ": "^2.0.0"
  }
}

PHP

PHP 自体で JavaScript ライブラリを直接管理することはありませんが、Composer などのパッケージマネージャーを使用して JavaScript ライブラリを管理している場合は、同様にライブラリのバージョンを更新する必要があります。

AWS

正しい設定例

AWS Lambda 関数で使用している JavaScript ライブラリを更新する場合、Lambda 関数のデプロイパッケージに最新版のライブラリを含めるようにします。

検出方法

OWASP ZAP での出力例

  • Alert 名: Vulnerable JS Library
  • リスク: Medium
  • URL: 脆弱なライブラリが使用されている URL
  • パラメータ: なし
  • 詳細: 脆弱なライブラリの名前、バージョン、および CVE ID などの情報

手動再現例

  1. Web ブラウザの開発者ツールを開き、Network タブを選択します。
  2. Web サイトにアクセスし、読み込まれている JavaScript ライブラリのバージョンを確認します。
  3. NVD (National Vulnerability Database) などの脆弱性データベースで、そのバージョンに既知の脆弱性がないか確認します。

まとめ

  • CVSS 基本値: 4.0 - 10.0 (Medium - Critical)
  • 運用チームや開発者が意識すべきポイント:
    • 使用している JavaScript ライブラリのバージョンを定期的に確認し、最新版または脆弱性の修正されたバージョンに更新する。
    • 脆弱性スキャンツールを使用して、Web サイトで使用しているライブラリの脆弱性を検出する。
    • ライブラリの依存関係を適切に管理し、不要なライブラリを削除する。
    • セキュリティに関する情報を収集し、脆弱性に関する情報を常に把握する。
  • 再発防止:
    • 開発プロセス全体でセキュリティを考慮する (Security by Design)。
    • コードレビューを実施し、脆弱性のあるライブラリが使用されていないか確認する。
    • 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
    • CI/CD パイプラインに脆弱性スキャンを組み込む。

以上の対策と検出方法を活用して、Vulnerable JS Library のリスクを低減してください。