コード生成AIが実在しないパッケージを推薦する「パッケージハルシネーション」が、16種類の主要モデルすべてで確認された。この問題は、単なる誤回答にとどまらず、攻撃者に悪用されるとソフトウェアサプライチェーン攻撃につながる可能性がある。
16種類のコード生成モデルすべてで誤ったパッケージを推薦
USENIXは、USENIX Security 2025で発表した大規模研究「We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs」において、16種類のコード生成モデルすべてで誤ったパッケージの推薦を確認した。平均誤回答率は19.6%に達したという。
問題の一つが、実在しないパッケージ名を推薦する「スロップスクワッティング」だ。大規模言語モデル(LLM)はリアルタイムのパッケージレジストリを照合するのではなく、統計的な確率や過去のコードパターン(学習データ)を基にライブラリを推薦する。そのため、PyPIやnpmに存在しない名前を平然と提示する場合がある。
攻撃者がその名前を監視し、後から公開レジストリに登録して悪意のあるコードを投入すると、開発環境やCI/CD環境が侵害される可能性がある。
57万件超のコードサンプルで検証、架空のパッケージは20万種類超
2025年に開催された第34回USENIXセキュリティシンポジウムでは、16種類の主要なコード生成モデルを使用し、57万件超のコードサンプルを用いた大規模な調査が発表された。論文によると、テスト対象となった16モデルすべてで、存在しないパッケージの推薦が確認されたという。生成された約223万件のパッケージのうち、19.7%に当たる44万445件がハルシネーションと判定された。
こうしたパッケージハルシネーションは、研究上の問題にとどまらない。セキュリティ企業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が選択した依存関係についても検証することが重要になりそうだ。



