AIセキュリティ 2025年7月30日

AI生成コードが古い脆弱なライブラリを使う問題

AIには、根本的な問題があります。 AIはトレーニングデータに含まれる **古いライブラリ** を推奨する傾向があります。 AIが古いライブラリを推奨する理由があります。 **理由1: トレーニングデータのカットオフ**。

川西智也

合同会社ロイヤルピース 代表

アンチパターン⑭「古いライブラリ推奨」

AI生成コードの脆弱性:トレーニングデータの呪い

AIには、根本的な問題があります。

“AI code assistants often return code using outdated versions—like requests==2.25.1, a version released in 2021 with known security vulnerabilities and no longer receiving patches.”

AIはトレーニングデータに含まれる 古いライブラリ を推奨する傾向があります。


なぜ古いライブラリを推奨するのか

AIが古いライブラリを推奨する理由があります。

理由1: トレーニングデータのカットオフ

  • AIは特定の時点までのデータで訓練
  • 新しいライブラリやバージョンを知らない

理由2: 統計パターンに基づく予測

  • 多く使われている(た)バージョンを推奨
  • 古いチュートリアルやStack Overflowの回答を学習

理由3: 「最新」という概念がない

  • AIはバージョンの新旧を理解していない
  • 「セキュリティパッチ」の概念がない

AI生成コードがStack Overflowの脆弱性を引き継ぐ

興味深い指摘があります。

“Stack Overflow itself has a copy-and-paste problem—‘the most copied and pasted piece of code from Stack Overflow had security flaws in it, and this was making it into enterprise code bases.’”

Stack Overflowの「コピペ問題」は、AIを通じてさらに拡大しています。

問題の連鎖:

1. 2015年にStack Overflowに回答投稿
   (当時は正しかったが、今は脆弱)

2. AIがその回答を学習

3. 2025年にAIが同じコードを推奨

4. 開発者がそのまま使用

5. 既知の脆弱性がプロダクションに

【要注意】典型的な危険コードパターン

AIが推奨しがちな古いライブラリの例を見てみましょう。

Python:

# ❌ AIが推奨するかもしれない古いバージョン
pip install requests==2.25.1  # 2021年、脆弱性あり
pip install django==2.2.0     # 2019年、サポート終了
pip install flask==1.1.0      # 2019年

# ✅ 最新の安定版を使用
pip install requests>=2.31.0
pip install django>=4.2
pip install flask>=3.0

JavaScript:

// ❌ 古いバージョン
"dependencies": {
  "lodash": "4.17.15",  // 2020年、脆弱性あり
  "axios": "0.21.0",    // 2020年
  "express": "4.17.1"   // 2019年
}

// ✅ 最新版
"dependencies": {
  "lodash": "^4.17.21",
  "axios": "^1.6.0",
  "express": "^4.18.2"
}

既知の脆弱性の危険性

古いライブラリには、既知の脆弱性(CVE) が含まれていることがあります。

問題:

  1. CVEが公開されている

    • 攻撃方法が詳細に文書化
    • 攻撃ツールが存在
  2. パッチがリリースされている

    • 脆弱なコードと修正コードの差分が公開
    • 攻撃者は何を狙えばいいか明確
  3. 自動スキャンで検出される

    • 攻撃者も脆弱性スキャナを使用
    • 簡単にターゲットを発見

実践的な解決策:最新版の使用

古いライブラリを避けるための対策を解説します。

実践的な解決策1: 常に最新版を指定

// package.json
{
  "dependencies": {
    "express": "^4.18.2",  // セマンティックバージョニング
    "lodash": "^4.17.21"
  }
}
# pyproject.toml
[project]
dependencies = [
    "requests>=2.31.0",
    "django>=4.2,<5.0",
]

実践的な解決策2: Dependabotの設定

# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    open-pull-requests-limit: 10
    security-updates-only: true
    
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "weekly"

実践的な解決策3: 脆弱性スキャン

# npm
npm audit
npm audit fix

# Python
pip-audit
safety check

# 汎用
snyk test

実践的な解決策4: CIでの自動チェック

# GitHub Actions
name: Security Scan
on: [push, pull_request]

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - run: npm ci
      - run: npm audit --audit-level=high

プロンプトによるセキュリティ対策

AIにライブラリの使用を依頼する際のプロンプト例です。

良いプロンプト:

Express.jsでAPIサーバーを作って:

## ライブラリ要件
- 最新の安定版を使用
- 既知の脆弱性がないバージョン
- 2024年以降にリリースされたバージョン

## AI開発で避けるべき禁止事項
- 古いバージョンの使用
- サポート終了したパッケージ
- 脆弱性が報告されているバージョン

バージョン管理のベストプラクティス

ライブラリのバージョン管理について解説します。

セマンティックバージョニング

MAJOR.MINOR.PATCH
  ^2.31.0  = 2.x.x の最新
  ~2.31.0  = 2.31.x の最新
  2.31.0   = 固定

ロックファイルの活用

# npm: package-lock.json
npm ci  # ロックファイルに従ってインストール

# pip: requirements.txt をフリーズ
pip freeze > requirements.txt

# Poetry: poetry.lock
poetry install

定期的な更新

# npm
npm update
npm outdated

# pip
pip list --outdated
pip install --upgrade package-name

実装前チェックリスト

古いライブラリ対策のチェックリストです。

開発時:

  • 最新の安定版を指定しているか
  • npm audit / pip-audit を実行したか
  • ロックファイルをコミットしているか

CI/CD:

  • Dependabotを設定しているか
  • 脆弱性スキャンを自動実行しているか
  • 脆弱性が検出されたらビルドを失敗させているか

定期メンテナンス:

  • 週次で依存関係を確認しているか
  • セキュリティアドバイザリを監視しているか
  • サポート終了予定を把握しているか

この事例から学ぶべき教訓と実践ポイント

「古いライブラリ推奨」から学ぶべきことは以下の通りです。

  1. AIは古いバージョンを推奨しがち

    • トレーニングデータのカットオフ
  2. 既知の脆弱性が含まれる

    • CVEが公開されている
  3. 最新版を使用

    • セマンティックバージョニング
  4. 自動スキャンを導入

    • npm audit、Dependabot
  5. 定期的な更新

    • 週次での確認

まとめ:重要ポイントの振り返り

  • AIは 古いライブラリバージョン を推奨しがち
  • 古いライブラリには 既知の脆弱性(CVE) が含まれる
  • Stack Overflowの問題が AIを通じて拡大
  • 解決策:最新版使用、Dependabot、脆弱性スキャン
  • ロックファイル をコミット、CIで自動チェック
  • プロンプトで 「最新版を使用」を明示
  • 教訓:AIが推奨するバージョンを盲信するな

実践的なスキルを習得しませんか?

ブログで学んだ知識を、研修で実践に変えましょう。