あなたは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 |
|
|
Secrets in code |
Keep secrets in a vault, load them at startup, and ignore .env before the first commit |
|
|
Risky Docker files |
Pin the image version, run as a non-root user, and exclude .env and .git |
|
|
Too many permissions |
Work as a standard user and keep permission prompts on |
Skip |
|
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 Piazza
Product Management マネージャー
Dan Piazza は Netwrix の Product Management マネージャーで、複数の Endpoint、DSPM、Directory 製品を担当しています。2013 年以来、技術職として働いており、サイバーセキュリティ、データ保護、自動化、コードへの情熱を持っています。現在の職務に就く以前は、データストレージのソフトウェア企業でプロダクトマネージャーおよびシステムエンジニアとして、ソフトウェアとハードウェアの両方の B2B ソリューションを管理し、導入していました。