研究解説 · 小互解読

AIにコードを書かせたら、勧められたパッケージが実在しなかった:ハッカーは同じ名前にウイルスを仕込んで待っている

57.6万サンプル、16モデル実測:AIが推薦するパッケージの19.7%は幻覚、43%は何度も同じ偽名を繰り返し生成する。
速覧
  • Slopsquattingとは、AIコーディング支援ツールが幻覚で実在しないパッケージ名を作り出し、それを攻撃者が先取り登録して悪意あるコードを仕込む新型のサプライチェーン攻撃。2025年4月、Python Software Foundationのセキュリティ専任開発者Seth Larsonが命名した。
  • 学術研究が主要な16のコード生成モデル、576,000個のコードサンプルを実測したところ、推薦パッケージの19.7%が幻覚だと判明。商用モデルの平均幻覚率は5.2%、オープンソースモデルは21.7%と約4倍の差があった。
  • 幻覚には持続性がある:同一のプロンプトで同一モデルに10回繰り返し尋ねると、43%は毎回同じ偽パッケージ名を生成し、58%は少なくとも1回以上再現する。予測可能で、事前に待ち伏せできる安定した標的となっている。
  • 実際の検証事例もある:セキュリティ研究者が複数モデルが繰り返し幻覚で生成した偽パッケージhuggingface-cliを先取り登録したところ、3ヶ月で実際に1.5万回以上ダウンロードされ、Alibaba公式プロジェクトGraphTranslatorのインストール手順にまで書き込まれていた。
  • 研究がテストした緩和策の中では、ファインチューニングと複数手法の組み合わせ(アンサンブル)が最も効果的で、幻覚率を約85%まで抑え込めた。ただしファインチューニングはコード生成の質(pass@1)を明確に低下させ、安全性と能力の間には実際のトレードオフが存在する。
1旧来の手口

名前のスペルミスを狙う誤誘導、リポジトリはとっくに対策済み

ソフトウェアパッケージをインストールするのは、開発者が毎日何十回も行う動作だ。pip installnpm installを一行打つだけで、他人が書いたコードが公開リポジトリから自分のプロジェクトに取り込まれる。攻撃者は早くからこの動作に目をつけてきた。

最も古い手口は誤字による先取り登録(typosquatting)だ。有名なパッケージと1、2文字しか違わない偽名を登録する。例えば人気パッケージcross-envcrossenvとして登録し、手が滑って打ち間違えることに賭ける。この手口は数十年前から存在し、PyPIやnpmといった中央集権型リポジトリはとっくに防御用のブロックリストを構築している。crossenvのようにcross-envとハイフン一つしか違わない名前は、一目で手違いだと分かるため、リポジトリが直接ブロックする。

たとえるなら

faceboook.com(oを一つ多く打つ)を先取り登録して、URLの打ち間違いによる流入をかすめ取る手口と同じだ。見た目は似ているが、実は偽物。リポジトリのブロックリストは、まさにこうした「一目で打ち間違いと分かる」偽名だけを狙い撃ちしている。

2新たな脅威

AIは口を開けば本物そっくりの偽名を作り出す、旧来の防御線では見抜けない

AIコーディング支援ツールはこの脅威モデルを一変させた。統計的に最もそれらしい答えを出そうとするあまり、実在しないパッケージ名を、いかにも本当らしくもっともらしくでっち上げてしまう。攻撃者はある特定のモデルがどんな偽名を作りがちかを把握しさえすれば、リポジトリに先回りして同名の悪意あるパッケージを登録すればいい。これがslopsquattingだ。

用語

SlopsquattingはAI slop(AIが生成したゴミコンテンツ)とtyposquatting(誤字による先取り登録)を組み合わせた造語で、2025年4月にPython Software Foundation(PSF)のセキュリティ専任開発者Seth Larsonが提唱し、Ecosyste.msの創設者Andrew NesbittがMastodonに投稿して広まった。これはパッケージ混同攻撃(package confusion attack)という大分類に属する。開発者を騙って誤ったパッケージをインストールさせる手法全般を指し、誤字先取り登録もAI幻覚に便乗する手口も、その下位に位置する具体的な手法だ。

肝心なのは、AIが作り出す偽名は単純な誤字ではないため、リポジトリの既存の防御用ブロックリストではまったく見抜けないという点だ。同じブロックリストでも、旧来の手口と新しい手口では結果がまるで違う。

旧来の手口 · 誤字による先取り登録

crossenvcross-envとハイフン一つしか違わず、文字の距離が極めて近い。一目で手違いに見える。リポジトリのブロックリストが直接命中し、ブロック。

新しい手口 · AI幻覚による先取り登録

cross-env-extendedmpn install cross-env fileはいかにもまともな拡張パッケージに聞こえるが、実在するどのパッケージにも完全には対応しない。ブロックリストは見抜けず、そのまま通過して紛れ込む。

さらに厄介なのは、生成されたパッケージ名を既知のパッケージ名一覧と照合するという単純な手法も効かない点だ。攻撃者はすでに幻覚で生まれた偽パッケージをリポジトリに登録済みかもしれず、照合に使う一覧そのものが汚染されている可能性がある。

3実例

すでに実際に起きたこと:空のパッケージが1.5万回もダウンロードされた

これは机上の空論ではない。2023年末から2024年初めにかけて、セキュリティ企業Lasso Securityの研究者Bar Lanyadoが検証を行った。複数の大規模言語モデルが繰り返し同じ実在しないPythonパッケージhuggingface-cliを幻覚で生成することを発見し、実際にPyPIでこの名前を登録した。パッケージの中身は空で、悪意あるコードは一切入れず、純粋に実験のためだった。

2023.12 – 2024.02
研究者が複数の大規模言語モデルで繰り返し推薦される実在しないパッケージhuggingface-cliを発見
先取り登録
PyPIでこの空のパッケージを登録、悪意あるコードは一切入れず、本当に誰かがインストールするかを検証するためだけに実施
3ヶ月以内
この空のパッケージが実際に15,000回以上ダウンロードされた
大手にも混入
Alibabaのオープンソースプロジェクトである GraphTranslator が、公式READMEのインストール手順にこれを書き込んでいた

中身が空のパッケージでさえ3ヶ月で1万回以上のダウンロードを騙し取り、大企業の公式ドキュメントにまで入り込んだ。もしパッケージの中身が悪意あるコードだったら、感染はとっくに依存関係チェーンに沿って広がっていただろう。(出典:The Register 2024-03-28)

4核心メカニズム

なぜこの偽パッケージ名は攻撃者が待ち伏せする価値があるのか:AIは同じ名前を繰り返し作り出す

一度の幻覚は怖くない。怖いのは、同じモデルが同じ問いに対して繰り返し同じ偽名を作り出すことだ。研究チームは幻覚を誘発したことのある500個のプロンプトをランダムに抽出し、それぞれを同じモデルに10回ずつ尋ね、その偽パッケージ名が何回再生成されるかを記録した。

核心メカニズム

結果は明確な二極化を示した。幻覚パッケージ名の43%は10回全て命中し、39%は一度も再現せず、58%は少なくとも1回以上再現した。ほとんどの幻覚は安定して再現可能な挙動だ。時間を変えても、セッションを変えて再度尋ねても、同じ偽名が同様に現れる。攻撃者にとって、安定して再現される偽名は、事前に待ち伏せして大量に先取り登録できる標的そのものだ。

10回全て命中
43%
当たったり外れたり(1〜9回)
18%
10回とも再現せず
39%
分布は明らかに0回と10回の両極に集中している:幻覚は安定して再現するか、まったく再現しないかのどちらかで、中間はほとんどない。安定して再現する半分こそが、攻撃者が利用できる部分だ。

この偽パッケージ名はどんな見た目か

研究ではこれらの偽名が実在のパッケージ名にどれだけ似ているかも測定した。使ったのはレーベンシュタイン距離(編集距離)で、ある名前を別の名前に変えるのに最低何文字動かす必要があるかを測る。距離が小さいほど名前が似ていて手違いの可能性が高く、距離が大きいほどまったく無関係な二つの単語ということになる。

距離1〜2 単純な手違い
13.4%
距離3〜5 類似バリエーション
37.9%
距離6以上 ほぼ無関係
48.6%
幻覚偽名の半数近くが実在パッケージのどれとも6文字以上離れている。まったくの誤字などではなく、モデルが完全にゼロから作り出した新しい名前だ。

さらに、独自の偽名の81%が16モデルのうち特定の1モデルにしか出現しない。つまり各モデルにはそれぞれ独自の幻覚パターンがある。攻撃者は特定のモデルを狙い撃ちすれば、そのモデルを使う開発者を刈り取れる。

モデルは自分が作った偽パッケージを見分けられるか

研究ではモデルが幻覚パッケージを識別できるかもテストした。実在するパッケージ名と偽名を混ぜてモデルに「これは有効なPythonパッケージか」と尋ねたところ、GPT-4 Turbo、GPT-3.5、DeepSeekの3モデルはいずれも自分の幻覚を75%以上の精度で識別できた。モデルは自分自身の生成パターンについて、ある種の暗黙の自己認識を持っている。この点は後述する「モデル自身に再検証させる」という緩和策の余地を残している。

5モデル間の差異

オープンソースモデルの幻覚率は商用モデルの4倍、しかし誰も無縁ではいられない

同じくコードを書くにしても、どのモデルを選ぶかで踏む地雷の確率は大きく変わる。この研究では合計576,000個のコードサンプル、220万件以上のパッケージ参照を生成し、全体の幻覚率は19.7%だった。分けて見ると、商用モデルとオープンソースモデルには約4倍の差がある。

商用モデル 平均
5.2%
GPTシリーズ等のクローズドモデル
オープンソースモデル 平均
21.7%
CodeLlama / DeepSeek 等

個別モデルで見ると、GPT-4 Turboの幻覚率が最も低くわずか3.59%。オープンソースの中で最も成績が良いDeepSeekでも13.63%だった。

GPT-4 Turbo 商用最良
3.59%
GPT-3.5
5.76%
DeepSeek オープンソース最良
13.63%
全体平均
19.7%
オープンソースモデル平均
21.7%

二つの設定も幻覚を増幅させる。温度(temperature、ランダム性を制御するパラメータ)を上げるほど幻覚は増え、最高温度ではオープンソースモデルが生成する偽パッケージが実在のパッケージより多くなることさえある。それでも最高温度のGPT-4(8.9%)はGPT-3.5(31.8%)より依然として4倍近く低い。さらに、訓練データのカットオフ後に登場した新しい話題を尋ねると、幻覚率は古い話題より平均10%高くなる。パッケージ名の正確性に敏感な本番環境では、商用モデルを選ぶだけでこの層のリスクをかなり削れる。

6緩和策

対策はあるが、「安全性」と「コード品質」の間でトレードオフが必要

研究チームはいくつかの緩和策をテストし、「生成後にふるいにかける」から「生成前に防ぐ」へと段階的に踏み込み、効果は一段ずつ良くなっていった。

最も基本的なのは生成後に実在するパッケージ名一覧と照合してフィルタリングする方法だが、前述の通りこの手法は攻撃者に一覧を汚染されると効かなくなる、受動的な対症療法にすぎない。一歩進んだのが生成前に介入する二つの手法だ。RAG(検索拡張生成)はモデルが答える前に実在のパッケージ一覧を検索し、結果をプロンプトに組み込んでから回答させる。試験前に信頼できる参考資料を渡すオープンブック試験のようなものだ。自己検証(self-refinement)はモデルが生成した後に自分でパッケージ名の真偽を判断させ、おかしいと思えば書き直させる、最大5回まで繰り返す。さらに上を行くのがファインチューニング(fine-tuning)と複数手法の組み合わせ(ensemble、上記の複数手法を重ねて使う)だ。

下の図は二つのオープンソースモデルを切り替えて、5種類の手法がそれぞれ幻覚率をどこまで抑えるかを見られる。

ベースライン 未処理
16.14%
RAG オープンブック
12.24%
自己検証
13.04%
ファインチューニング
2.66%
複数手法の組み合わせ
2.40%
DeepSeekの幻覚率は16.14%から2.4%まで一気に下がり、下落幅は約85%。どのGPTモデルよりも低くなった。
ベースライン 未処理
26.28%
RAG オープンブック
13.40%
自己検証
25.51%
ファインチューニング
10.27%
複数手法の組み合わせ
9.32%
CodeLlamaは26.28%から9.32%まで下がり、下落幅は約64%。自己検証はほぼ効果がなかった。パッケージをすべて有効だと判定する傾向があり、自分の間違いを見分けられないためだ。
トレードオフ

ファインチューニングは幻覚を下げる幅が最も大きいが、代償としてコード自体の実行可能な品質も落ちる。HumanEvalのpass@1(モデルが一発で書いたコードが本当に動くか、テストに通るかを測る指標で、高いほど信頼できる)で測ると、DeepSeekはファインチューニング後にpass@1が51.4%から25.3%まで下がり、CodeLlamaは19.6%から16.4%まで下がった。より安全にしたければ、コード能力の低下を受け入れる必要がある。RAGと自己検証はファインチューニングほど幻覚を下げないが、コード品質へのダメージも少なく、よりバランスの取れた折衷案だ。

モデル元のpass@1ファインチューニング後のpass@1
DeepSeek51.4%25.3%
CodeLlama19.6%16.4%
口径についての注意:本セクションの数字はすべて学術論文arXiv:2406.10279(USENIX Security 2025)によるコードパッケージ幻覚の実測データに基づく。VentureBeatの原文にはもう一組「幻覚率50%〜82%、GPT-4oが最低の23%」というデータがあるが、これは医療臨床意思決定シーンにおける敵対的幻覚研究であり、コードパッケージ幻覚とは同じ口径ではない。両者を混同してはならない。
7脅威面

AIが書くコードが増え続ける中、この脆弱性は開く一方だ

この攻撃経路の脅威面は急速に拡大している。なぜなら、AIが手伝って書くコードがますます増えているからだ。

40%+
開発者が自身のコミットにAI支援が含まれると推定する割合。今後さらに上昇する見込み
72%
AIコーディングツールを試した人のうち、毎日使っている割合
85%
オープンソースエコシステムにおける脆弱性の平均生存時間の増加幅
49% / 14%
NPM / PyPIの脆弱性報告のうち、意図的な悪意あるパッケージ由来の割合

オープンソースエコシステム自体のセキュリティ状況も悪化している。10言語、31,267件の脆弱性サンプルを分析したある研究によると、報告される脆弱性の数は年98%のペースで増加しており、パッケージ総数の年25%成長を大きく上回る。

報告脆弱性数 年間増加
98%
パッケージ総数 年間増加
25%
脆弱性の増加速度はエコシステム自体の拡大の4倍近く速く、攻撃面は実際に着実に広がっている。

さらに注目すべきは悪意ある由来の割合だ。これらの脆弱性報告のうち、NPMエコシステムでは49%が意図的にアップロードされた悪意あるパッケージ由来で、PyPIでも14%に上る。リポジトリの落とし穴は、かなりの部分が誰かがわざと仕込んだものだ。AI幻覚パッケージは、まさにこの種の意図的な攻撃にもう一つの扉を開いている。

8どうすればいいか

一般開発者が今すぐできる二つのこと

この攻撃は信頼の隙間を突いている。開発者はAIが推薦するパッケージをデフォルトで本物だと信じ込み、インストール前に確認しない。この隙間を塞ぐには、ほぼコストゼロで済む二つのことがある。

1
インストール前に必ず公式リポジトリで確認する
AIが推薦した各パッケージ名を、PyPIまたはnpmの公式サイトで検索し、それが実際に存在し、ダウンロード数やメンテナンス履歴が正常であることを確認してから、プロジェクトに入れる。名前を得たらすぐにpip installしない。
2
チームには自動検証と監視を導入する
CI/CDフローにパッケージ名検証のステップを加え、信頼できる「既知の良質なパッケージ」一覧と照合する。同時に異常なインストール挙動を監視する。「AIが推薦したなら信じるべき」という一層だけに頼らず、悪意あるパッケージが本番に入る前に確実に食い止める。

さらに前述の一点を重ねる:パッケージ名の正確性が求められる場面では、商用モデル、あるいはRAGやファインチューニング処理済みのモデルを選ぶことで、この層のリスクをさらに一段階抑えられる。

この攻撃の閉ループは「幻覚の再現性」によって回る
幻覚が持続的に再現 攻撃者は事前に待ち伏せ可能 開発者がAIにコードを書かせる AIが偽パッケージ名を幻覚生成 攻撃者が同名で先取り登録 次の開発者にも推薦される インストールし、悪意あるコードが混入 依存関係チェーンに感染拡大
同じ偽名は同じモデルによって繰り返し生成され、攻撃者は先回りして先取り登録し、次の開発者もまた同じ名前を推薦されて閉ループが回り続ける。持続的に再現可能であることこそ、これがランダムな誤りより危険な理由だ。
持続的な幻覚は、この脆弱性を利用しようとする攻撃者にとってより価値が高く、この幻覚攻撃経路をより実行可能な脅威にしている。 論文「We Have a Package for You!」、USENIX Security 2025
本記事はVentureBeatの寄稿記事(著者:Zac Amos、2026-07-11)をもとに編集・翻訳したものです。中核となる定量データは学術論文arXiv:2406.10279「We Have a Package for You! A Comprehensive Analysis of Package Hallucinations by Code Generating LLMs」(USENIX Security 2025)に基づいています。オープンソース脆弱性の増加データはarXiv:2506.12995より。実例はThe Register(2024-03-28)およびLasso Securityより。用語の出典はPSFセキュリティ専任開発者Seth Larson。各数値は対応する原典の研究に基づきます。