Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

Vibeコーディングセキュリティ:何が問題になりうるかとその防止法

Vibeコーディングセキュリティ:何が問題になりうるかとその防止法

Oct 27, 2026

Vibeのコーディングセキュリティ問題は通常、AIアシスタントが素早く行う3つのことから発生します:誰もチェックしていないパッケージのインストール、コード内への秘密情報の埋め込み、誰も読まないDockerファイルの作成。攻撃者はこれら3つすべてを利用し、ワームは盗まれたトークンを使って開発者のマシン間で自己複製します。パスワードボールト、管理者権限の削減、変更監視が悪質なインストールの影響範囲を制限します。

あなたはClaude Codeに大声で話しかけています。「Stripe checkoutを追加し、データベースを接続して、リリースして。」3分後、アプリが動作し、ファイルは一つも開いていません。

そのスピードこそが、人々がvibe codingを愛する理由です。また、vibe codingのセキュリティリスクが始まる場所でもあります。あなたが話している間に、AIはパッケージを選び、ファイルにパスワードを書き込み、Dockerイメージを作成しました。あなたは すべてを読まずに承諾しました.

AIはあなたの権限で動作し、誰もその作業をチェックしません

AIコーディングツールを使うと、あなたの代わりにコマンドを実行します。パッケージをインストールし、ファイルを読み、設定を編集し、クラウドログインを使用できます。通常のコードは出荷前にレビューされますが、Vibe-codedコードはアプリが動作し問題がないため、そのステップを省略することが多いです。

一部の人は最後の安全網も取り除きます。Claude Codeにはすべての権限プロンプトをスキップするフラグがあります:

# すべての権限プロンプトをスキップします。エージェントが選択したすべてのコマンドが実行されます。

claude --dangerously-skip-permissions

使い捨てのサンドボックスなら問題ありません。トークンやキーでいっぱいの仕事用ノートパソコンでは、本当のリスクです。

偽のパッケージと、本物を通じて広がるワーム

AIアシスタントは時々存在しないパッケージを提案します。攻撃者はそのような架空の名前を監視し、登録して、誰かがインストールを実行するのを待ちます。これをスロップスクワッティング(slopsquatting)と呼びます。以下は一見問題なさそうな依存関係リストです:

      { 

  "name": "my-saas-app", 

  "dependencies": { 

    "express": "^4.19.2", 

    "stripe": "^16.0.0", 

    "react-auth-helper-pro": "^1.0.3" 

  }, 

  "scripts": { 

    "postinstall": "node scripts/setup.js" 

  } 

} 
      

最初の2つは知っています。3つ目は合理的に聞こえますが、チームの誰も選びませんでした。postinstall 行は、インストール時にあなたの権限で自動的に実行されます。新しいパッケージを受け入れる前に、そのページを開いて公開日時、ダウンロード数、実際のリポジトリへのリンクがあるかを確認してください。先週登場し、ダウンロード数が少ないパッケージは再検討に値します。

さて、ワームを追加します。2025年9月に、Shai-Huludというワームがnpmを通じて広まりました。パッケージがインストールされると実行され、開発者のマシンからトークンとクラウドキーを盗み、それらのトークンを使って被害者自身のパッケージの感染バージョンを公開しました。そのパッケージをインストールした全員が同じ被害を受けました。

vibeコード化されたノートパソコンは、そのような攻撃の簡単なターゲットです。トークンは平文ファイルに保存され、ユーザーはローカル管理者権限を持ち、インストールは一瞥もされずに承認されます。

秘密がコードに含まれます

アシスタントに「StripeとPostgresに接続して」と頼むと、よく次のような返答が返ってきます:

      // config.js 

export const config = { 

  stripeKey: "sk_live_EXAMPLE_do_not_use", 

  databaseUrl: "postgres://admin:Summer2024!@prod-db.example.com:5432/app", 

  jwtSecret: "supersecret" 

}; 
      

動作するので先に進みます。次に最初のコミットが来ます:

      $ git add . 

$ git commit -m "initial commit" 

# No .gitignore, so .env went along too 
      

Gitはすべてを記憶します。キーがコミットに含まれ、その後ファイルを削除しても履歴に残ります。ボットは常に公開リポジトリをスキャンしてキーを探しているため、漏洩したキーが気づく前に使用されることがあります。すでにプッシュしている場合は盗まれたものとして扱い、キーをローテーションしてください。シークレットはプロンプトに貼り付けたときにも、エージェントのコンテキストやログに残るため漏洩します。

盗まれた秘密が上記のワームの動力源です。リークされたファイル内のトークンは、あなたの名前でパッケージを公開する方法です。会社内で機密データがどこにあるか分からない場合は、sensitive data discoveryから始めるのが良いでしょう。

正常にビルドされるがそれでも漏れるDockerファイル

Dockerfileを依頼すると、ビルドできるものが得られます。ほとんどの人にとって、それが唯一のテストです。

      FROM node:latest 

WORKDIR /app 

COPY . . 

ENV STRIPE_KEY=sk_live_EXAMPLE_do_not_use 

RUN npm install 

EXPOSE 3000 9229 

CMD ["node", "server.js"] 
      

これら7行には5つの問題があります。latestタグは予告なく変更されるため、明日のビルドは今日のものと異なる可能性があります。COPY . . は.envファイルと.gitフォルダをイメージに取り込みます。ENV行は秘密情報をイメージのレイヤーに書き込み、イメージを取得できる誰でもそれを読むことができます。コンテナはrootとして実行されます。そしてポート9229はNode.jsデバッガをネットワークに開きます。

ためらわずにリリースできるバージョンです:

      FROM node:20.17-alpine 

WORKDIR /app 

COPY package*.json ./ 

RUN npm ci --ignore-scripts 

COPY . . 

USER node 

EXPOSE 3000 

CMD ["node", "server.js"] 
      

.env、.git、node_modulesを含む.dockerignoreファイルを追加し、コンテナ起動時にvaultやシークレットマネージャーからStripeキーを渡してください。

vibe coding 脅威モデルをわかりやすく説明

すべてのvibeコードプロジェクトには3つの要素が共存しています:エージェントがあなたの権限を持ち、誰もコードをレビューせず、誰も依存関係をチェックしません。それぞれは単独では小さなリスクですが、並ぶことで連鎖します。1つの漏洩したトークンがあなたの名前で公開されたパッケージとなり、そのパッケージがワームの次の標的になります。セキュリティの専門家はこれを脅威モデルと呼びます。これは、誰かが侵入する方法と侵入後に到達可能な範囲のリストと考えることができます。

今日設定できるVibeコーディングガードレール

そのままの雰囲気でコーディングを続けられます。すべての行を読む必要のないいくつかのチェックを追加しましょう。

Problem

What to do

Example

Unchecked packages

Read every new dependency before installing, commit your lockfile, and turn off install scripts by default

npm install --ignore-scripts

Secrets in code

Keep secrets in a vault, load them at startup, and ignore .env before the first commit

echo ".env" >> .gitignore

Risky Docker files

Pin the image version, run as a non-root user, and exclude .env and .git

USER node

Too many permissions

Work as a standard user and keep permission prompts on

Skip --dangerously-skip-permissions

Changes nobody approved

Watch files and configs after deploy and flag anything unexpected

File integrity monitoring

エージェントに常設ルールを与えることもできます。Claude Codeはプロジェクト内のCLAUDE.mdファイルを読み取るので、そこにガードレールを置いてください:

      # CLAUDE.md 

- Never put secrets, keys, or passwords in code. Read them from environment variables. 

- Ask me before adding any new dependency, and tell me why it's needed. 

- Never use the latest tag for Docker base images. Run containers as a non-root user. 
      

エージェントはまだ間違えることがあるので、差分を確認し続けてください。ルールは検出頻度を減らすだけです。

Netwrixが支援する方法

Netwrix Password Secure は、資格情報がconfig.js以外の場所に保存されるようにします。これは、役割ベースのアクセス制御と誰がどのパスワードを使用したかの完全な記録を持つ暗号化された金庫であり、アプリケーションはSDKを通じて実行時に資格情報を取得できます。

Netwrix Change Trackerはファイル整合性監視でコンテナ、サーバー、エンドポイントを監視し、承認された変更とすべての変更を比較します。例えば、パッケージが午前2時にシステムファイルを編集したり、コンテナがベースラインから逸脱した場合、Change Trackerが検出し、チームは同じ日に確認できます。

Netwrix Change Trackerの実演をご覧ください。

詳細を見る

VibeコーディングセキュリティFAQ

共有する

もっと詳しく

著者について

Dan piazzanetwrixendpointdspmdirectory2013

Dan Piazza

Product Management マネージャー

Dan Piazza は Netwrix の Product Management マネージャーで、複数の Endpoint、DSPM、Directory 製品を担当しています。2013 年以来、技術職として働いており、サイバーセキュリティ、データ保護、自動化、コードへの情熱を持っています。現在の職務に就く以前は、データストレージのソフトウェア企業でプロダクトマネージャーおよびシステムエンジニアとして、ソフトウェアとハードウェアの両方の B2B ソリューションを管理し、導入していました。