スロップスクワッティング。AIが挙げた架空のパッケージ名を、先に登録する攻撃。黒い背景に、紫に光る球から箱が連なり、その一つに赤い光の筋が入っている。

AIセキュリティAIの安全な利用

スロップスクワッティングとは?AIが提案するパッケージの確認と対策

スロップスクワッティングとは、生成AIが挙げた実在しないパッケージ名を第三者が先に登録し、それを入れた開発者にコードを実行させるサプライチェーン攻撃だ。

防ぐには、AIが挙げた名前を入れる前に、次の3か所で照合する。

入れる前に、名前を3か所で照合する
公式の案内と一致する名前AIが挙げた名前公式ドキュメントに同じ名前ある登録簿の公開履歴・保守者確かめたソースリポジトリの案内同じ名前承認と隔離環境での試験へ進む
AIだけが挙げた名前AIが挙げた名前公式ドキュメントに同じ名前ない登録簿の公開履歴・保守者日が浅く更新が少ないソースリポジトリの案内たどれない入れない。公式の案内で探し直す

スロップスクワッティングとパッケージのハルシネーション

スロップスクワッティングは、パッケージ名のハルシネーションを悪用する。その名前を第三者が先に登録し、誰かが確かめずに入れたときに被害になる。

AIによるパッケージ名のハルシネーション

ハルシネーションは、生成AIが事実と異なる内容をもっともらしく出力することだ。コード生成では、PyPIやnpmに存在しないパッケージ名をpip installの行やimport文に書くことがある。

モデルは登録簿を照会せず、学習したデータの傾向から名前を組み立てる。後述のSpracklenらの論文では、実在しなかった名前のうち、最も近い実在の名前と1〜2文字違いのものは13.4%にとどまり、48.6%は6文字以上違っていた。

スロップスクワッティングとタイポスクワッティングの違い

語を広めたAndrew Nesbittのブログによれば、2025年4月にPython Software FoundationのSeth Larsonが提案した。打ち間違いを狙う「タイポスクワッティング」をもじった名前だが、狙う名前の出どころが違う。

タイポスクワッティングとの違い
タイポスクワッティング
スロップスクワッティング
出どころ
人の打ち間違い・見間違い
AIの提案
狙う名前
人気パッケージに綴りを似せた名前
AIが繰り返し挙げる実在しない名前
見分け方
正しい名前との綴りの差を見る
綴りの差では見分けにくい。公式資料と照合する

スロップスクワッティングがAIサプライチェーン攻撃になる条件

被害までには、次の3つがそろう必要がある。

3つの条件がそろうと、第三者のコードが動く
スロップスクワッティングの成立条件。1、生成AIが実在しない名前を、同じ依頼に対して繰り返し出す。2、第三者がその名前で悪意あるコードを含むパッケージを公開する。3、開発者、またはコマンドを自動で実行するAIエージェントやCIが、確かめずにインストールする。3つがそろうと、第三者のコードが開発環境で動く 条件1AIが実在しない名前を繰り返し出す条件2第三者がその名前で悪意あるパッケージを公開条件3開発者・AIエージェント・CIが確かめずに入れる第三者のコードが開発環境で動く スロップスクワッティングの成立条件。1、生成AIが実在しない名前を、同じ依頼に対して繰り返し出す。2、第三者がその名前で悪意あるコードを含むパッケージを公開する。3、開発者、またはコマンドを自動で実行するAIエージェントやCIが、確かめずにインストールする。3つがそろうと、第三者のコードが開発環境で動く 条件1AIが実在しない名前を繰り返し出す条件2第三者がその名前で悪意あるパッケージを公開条件3開発者・AIエージェント・CIが確かめずに入れる第三者のコードが開発環境で動く

3が起きなければ、未登録の名前のインストールはエラーで止まる。一方、第三者が先に登録した名前はエラーなく入るため、気づきにくい。

スロップスクワッティングの研究結果と実被害の確認状況

研究では誤提案の多さと再現性が測られている。以下の数字は実験の値で、攻撃の発生件数とは別のものだ。

研究で観測されたパッケージ名のハルシネーション

Spracklenらは論文「あなた向けのパッケージがあります!」(USENIX Security 2025)で、16種のモデルにPythonとJavaScriptのコードを計576,000件書かせ、挙がった名前約223万件を2024年1月10日時点のPyPIとnpmの一覧と照合した。実在しない名前の割合は、商用モデル(3種)の平均で5.2%、オープンなモデル(13種)で21.7%だった。誤提案が出た依頼500件を10回ずつ繰り返すと(Python、4モデル)、58%の名前は2回以上出た。

2026年には、独立研究者のChurilovが同じ方法での再評価をarXivに公開した(査読前)。対象は2025年10月〜2026年3月に公開された5つのモデルだ。5モデルすべてが挙げた名前は127件で、うち53件は登録簿の確認を経ても第三者が登録できる状態だったという。

2つの研究で観測された割合と件数
Spracklenら19.7%挙がった名前のうち、実在しなかった割合約223万件のうち440,445件。重複を除くと205,474種
Spracklenら43%10回繰り返して、10回とも出た名前Python・4モデル。繰り返し出る名前は先に登録されうる
Churilov4.62〜6.10%実在しない名前を含む生成結果分母は生成結果の件数
Spracklenらの論文とChurilovの再評価(査読前)から我々が作成した。19.7%は挙がった名前、4.62〜6.10%は生成結果の件数が分母で、単純には比べられないと我々は読んでいる。

研究結果と実被害の確認範囲

Lasso SecurityのBar Lanyadoは2024年3月の報告で、AIが繰り返し挙げるhuggingface-cliという名前で空のパッケージをPyPIに登録し、3か月で3万件を超えるダウンロードがあったと書いている。大手IT企業の研究用リポジトリの説明書にも、この名前の導入手順が載っていた。

AIエージェントが名前を広げた例もある。Aikido SecurityのCharlie Eriksenは2026年1月の報告で、npmに存在しなかったreact-codeshiftを1月14日に登録したと書いている。実在する2つのツールの名前を混ぜた名前で、2025年10月にAIで作られたエージェント用の手順書(スキル)に入り、コピーやフォークで237のリポジトリに広がっていた。登録後も1日1〜4件のダウンロードが続き、Eriksenはエージェントが手順書どおりに実行したものと見ている。

この2件は研究者が先に名前を確保したもので、登録したパッケージに害のあるコードは入っていなかった。

悪意あるパッケージの例も報告されている。Aikido Securityは2026年2月の記事で、ESLintのプラグインeslint-plugin-unused-importsと似た名前のunused-importsを、npm上の悪意あるパッケージとして挙げた。npmでは現在、セキュリティ上の保留を示すパッケージに置き換わっている。ただし同社も、作成者の意図は証明できないとしている。

欧州連合サイバーセキュリティ機関(ENISA)は2026年3月の技術勧告で、スロップスクワッティングを新しい攻撃経路に挙げた。公的機関が実際の侵害被害として確認した発表は、2026年11月1日時点で我々の調べた範囲では見つからなかった。発生の有無までは判断できない。

スロップスクワッティング対策:AIが提案したパッケージの確認と導入承認

スロップスクワッティング対策の中心は、新しい依存関係を加える場面で、AIの提案も人が選んだ部品と同じ審査に通すことだ。

AI提案パッケージの配布元・公開履歴の確認

登録簿に名前があるだけでは安全とはいえない。OWASPのチートシートが挙げる保守状況や利用の広さに加え、冒頭の図の3か所で同じ名前かを照合する。

パッケージ導入の承認と検証環境

新しいパッケージを追加する変更は、追加者と別の担当者が承認する。プルリクエストのレビューで、依存関係ファイルの差分を見る運用が使える。

OWASPは同じチートシートで、審査済みの部品だけを置く社内リポジトリを使い、それを迂回できないようにすることと、ビルドを使い捨ての隔離環境で行うことを勧めている。初めて入れる部品は、認証情報を置かず、社内ネットワークにつながらない環境で先に試す。

AIエージェントにコマンド実行を任せている場合は、パッケージの追加に人の確認を挟む。エージェントが読む手順書も、Eriksenが勧めるようにコードと同じくレビューし、書かれた名前が実在し想定した配布元のものかを確かめる。

新しいパッケージが入るまでの関門
新しいパッケージが入るまでの関門。開発者またはAIエージェントが依存関係を足すと、追加者と別の担当者が依存関係ファイルの差分を見て承認する。認証情報を置かず社内ネットワークにつながらない環境で試す。審査済みの部品だけを置く社内リポジトリを迂回させない。ビルドは使い捨ての隔離環境で行う 依存関係を足す別の担当者が承認隔離環境で試す社内リポジトリに置く使い捨ての環境でビルド 新しいパッケージが入るまでの関門。開発者またはAIエージェントが依存関係を足すと、追加者と別の担当者が依存関係ファイルの差分を見て承認する。認証情報を置かず社内ネットワークにつながらない環境で試す。審査済みの部品だけを置く社内リポジトリを迂回させない。ビルドは使い捨ての隔離環境で行う 依存関係を足す別の担当者が承認隔離環境で試す社内リポジトリに置く使い捨ての環境でビルド

スロップスクワッティングに備える依存関係の管理

依存関係は、AIが選んだパッケージを把握し、必要性と範囲を見直し、CI/CDで自動の管理をかけて備える。ENISAも同じ勧告でこれを勧めている。

  • 台帳(SBOMなど)に、取得元の登録簿、固定したバージョン、承認者、承認日、AIの提案かどうかを残す
  • npmではnpm ciを使う。ロックファイルとpackage.jsonが食い違うとエラーで止まり、ロックファイルを書き換えない
  • pipではハッシュ確認モード(--require-hashes)を使う。すべての依存関係のバージョン固定とハッシュの記録が要り、記録と違うファイルは入らない
  • 公開から一定期間たたないバージョンを入れない設定を使う。pnpmのminimumReleaseAge(分単位)やnpmのmin-release-age(日単位)がある
  • CIで、台帳にないパッケージの追加を検出したら止める
固定と記録で防げることと、別の手段で見ること
固定と記録で防げる
別の手段で見る
承認後
承認後の差し替え記録と違うファイルは入らない
部品自体の問題更新時の再確認と脆弱性の監視
追加時
無断の追加CIが台帳にない追加を止める
前もって登録された名前照合で見る。公開日の制限は通る
はじめてのAI攻撃対策現在の対策の状況を整理し、最初に取り組むことを決めます。合意した範囲の初期対策まで支援します。

よくある質問

スロップスクワッティングとタイポスクワッティングは何が違う?

狙う名前の出どころが違う。タイポスクワッティングは人の打ち間違いを、スロップスクワッティングはAIが繰り返し挙げる実在しない名前を狙う。後者は綴りの差では見分けにくく、公式資料と照合する。

スロップスクワッティングの被害は、実際に起きている?

研究者が先に名前を登録した例と、似た名前の悪意あるパッケージの報告はある。公的機関が実際の侵害として確認した発表は、2026年11月1日時点で我々の調べた範囲では見つからなかった。

ロックファイルでバージョンを固定すれば防げる?

固定と記録で防げるのは、承認後の差し替えと台帳にない追加だ。前もって登録された名前は通るので、追加の前に照合する。

ブログ一覧へ