AIのハルシネーションは「間違った答え」で済まない。コード生成AIが実在しないパッケージを推薦し、その名前を攻撃者に取得されることで、ソフトウェアサプライチェーン攻撃につながる可能性がある。

  • コード生成AIが16種類のコード生成モデルすべてで誤ったパッケージを推薦することが確認された

    コード生成AIが16種類のコード生成モデルすべてで誤ったパッケージを推薦することが確認された

USENIXは、USENIX Security 2025の大規模研究(PDF) We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMsにおいて、16種類のコード生成モデルすべてで誤ったパッケージの推薦が確認され、平均誤回答率は19.6%に達したことを明らかにした。

AIが「存在しないパッケージ」を作り出す

問題の1つが、実在しないパッケージ名を推薦する「スロップスクワッティング(別名:パッケージハルシネーション)」だ。大規模言語モデル(LLM: Large Language Model)はリアルタイムのパッケージレジストリを照合するのではなく、統計的な確率や過去のコードパターン(学習データ)を基にライブラリを推薦する。

そのため、PyPIやnpmに存在しない名前を平然と提示する場合がある。攻撃者がその名前を監視し、後から公開レジストリに登録して悪意のあるコードを投入すると、開発環境やCI/CD環境が侵害される可能性がある。

  • パッケージハルシネーションを悪用する攻撃の流れ。攻撃者がLLMの生成する架空のパッケージ名を特定し、同名の悪意あるパッケージを公開することで、AIの推薦を信頼したユーザーにインストールさせる(出典:USENIX Security 2025)

    パッケージハルシネーションを悪用する攻撃の流れ。攻撃者がLLMの生成する架空のパッケージ名を特定し、同名の悪意あるパッケージを公開することで、AIの推薦を信頼したユーザーにインストールさせる(出典:USENIX Security 2025)

16種類のLLMすべてで確認、架空のパッケージは20万種類超

2025年に開催された第34回USENIXセキュリティシンポジウムでは、16種類の主要なコード生成モデルを使用し、57万件超のコードサンプルを用いた大規模な調査が発表された。

論文によると、テスト対象となった16モデルすべてで、存在しないパッケージの推薦が確認されたという。生成された約223万件のパッケージのうち、19.7%に当たる44万445件がハルシネーションと判定された。

存在しないのに237リポジトリへ、AIが生んだ「react-codeshift」

こうしたパッケージハルシネーションは、研究上の問題にとどまらない。セキュリティ企業Aikido Securityの研究者は、AIによって生成されたAgent Skillsの中から、実在しないnpmパッケージ「react-codeshift」への参照を発見した。

注目すべきは、AIが実在する「jscodeshift」と「react-codemod」を混同した結果、「react-codeshift」というもっともらしい名前を生成したとみられることだ。その参照がフォークなどを通じて237のGitHubリポジトリに広がった。

さらに、研究者が悪用を防ぐ目的で「react-codeshift」という名前をnpmに登録したところ、公開後もダウンロードが発生した。つまり、AIが作り出した架空の名前が、単なる回答画面の中だけにとどまらず、実際の開発エコシステムへ入り込んでいたわけだ。

仮に攻撃者が先に「react-codeshift」を取得し、悪意のあるコードを含むパッケージを公開していれば、AIの指示を信頼した開発者やAIエージェントが、悪意のあるパッケージをダウンロード、実行する可能性があった。

AIが推薦したパッケージを「そのまま信用しない」

USENIXの研究ではパッケージハルシネーションへの複数の緩和策が検証されている。

具体的には、RAG(Retrieval-Augmented Generation)を利用して、実在するパッケージの情報をモデルに与える方法などを検証しているほか、モデル自身に生成したパッケージが実在するかを確認させる自己検証や、ファインチューニングによる改善も評価している。

こうした手法によってパッケージハルシネーションを低減できるものの、リスクがなくなるわけではない。

重要なのは、AIコーディングツールが提示したパッケージ名を、そのまま「実在する安全なパッケージ」とみなさないことだ。PyPIやnpmなどの公式レジストリで実在性を確認し、提供元や公開履歴、依存関係などを確認したうえで導入する必要がある。

「react-codeshift」の事例が示すように、AIがもっともらしい名前を生成すると、その名前自体が開発環境の中に広がる可能性がある。そして、存在しない名前を攻撃者が先に取得すれば、AIのハルシネーションがソフトウェアサプライチェーン攻撃の入口になり得る。

AIコーディングツールを利用する際には、生成されたコードだけでなく、AIが選択した依存関係についても検証することが重要になりそうだ。