はじめに
タイトルの通りで,VibeCodingで秘匿データをAIから守るCLIツール(vibeguardian:名前がちょっとかっこいい)をVibeCodingで作成しました.良かったら是非ご活用いただき,Issue等でフィードバックいただけると嬉しいです.
背景
VibeCodingが全盛となった今,.envなどの秘匿データを漏洩させるリスクに常に気を配る必要があります.
こちらの記事で参照しているXのポストでは,Claude Codeが.envを読み,秘匿データが漏洩した事例を伝えています.
・Antigravityは無関係、Claude Codeで起きてた。
・重要操作は人間の承認が必要な設定になっていたが、問題は権限ではなかった。
Claude Codeが.envを読み込んだ(読み込み禁止にしてたのに無視されてた)
↓
その中の認証情報がログに出力されてた。
↓
漏洩して悪用された。その中の認証情報がログに出力されてた
これは対岸の火事ではなく,VibeCodingでコーディングしている全エンジニアはこのようなリスクを理解してClaude Code等のサービスを利用する必要があるということだと思います.
各種サービスでは,リポジトリ内の.envなどの秘匿データを触ることを禁止するように設定が可能(↑のポストも禁止していた模様)です.ただ,それでも限界があり,今回の事例のようにAgent自体が抜け道を探して秘匿データが漏洩してしまいます.
※↓は書き込みの突破例ですが,.envの読み込みも同じ要領で突破されることがあると思います.
例:
mkdir は sandbox で禁止されていますが、Write ツールで直接ファイルを作成します。
つまり,いくら秘匿データを読み込むコマンドをブロックしても,代替手段で突破され,結局イタチごっことなってしまいます.
そこで,冒頭に記載したようにvibeguardianというライブラリを作成し,そもそも秘匿データをリポジトリ内で管理しない,キーを表示させない方法をVibeCodingで作成してみました.
(とはいえ後述の通りローカルでキー管理しており,そこを読まれたらアウトなので,あまり解決していないかも...)
vibeguardian
機能
主な機能は以下の3つになります.ポイントとしては,そもそも秘匿データはリポジトリに入れない..envデータをリポジトリ外で管理ということです.また,万が一アプリ側にデバッグコードとしてprint文を入れたとしても,標準出力は常に監視しているので,***[MASKED]***と出て漏洩から護ってくれます.
| 機能 | 説明 |
|---|---|
| Inject Mode |
~/.vibeguard/secrets.json から実際のキーを読み込み、子プロセスのメモリ上にだけ展開。ディスクや .env には書き出しません。 |
| Proxy Mode | ローカルでリバースプロキシ(デフォルト :8080)を起動し、AIが生成したコードの localhost:8080/proxy/stripe 宛てリクエストに Authorization ヘッダを裏で付与して転送。 |
| Log Mask Mode | 子プロセスの stdout/stderr をリアルタイムでフックし、シークレット文字列が含まれていれば ***[MASKED]*** に置換して表示。 |
使用方法はuvのように,vg run --を実行したいコマンドの前につけてあげれば良いだけです.
vg run -- {実行したいコマンド}
アーキテクチャ
アーキテクチャは以下のようになっています.現時点では,~/.vibeguard/secrets.jsonに平文で管理していますが,暗号化対応などもできればと考えています.
課題
- 上述の通り現在はキーを平文管理.オプション(またはデフォルト)で暗号化などもできれば.
- SDK経由の外部連携の場合,Proxyモードは非対応(現状Inject Modeでも十分なはず?)
作り方
vibeguardianは,VibeCodingで作っていると記載しました.最後にどういった過程で作ったかを簡単に紹介します.
- Geminiに「課題・やりたいこと」を壁打ちし,アーキテクチャを作ってもらう
作ってもらったアーキテクチャ
CLIインターフェース
- 上記設計書をもとにRustで作ってとCopilotに依頼(以降Copilotでの作業)
- フォルダ構成,テスト構成など数ラリー実施
- 公開用のGithub Actions設定,デモアプリ実装,Homebrew対応も数ラリー
このようにして作りました.昼休みの1時間ちょいで完成したので恐ろしい限りです...
おわりに
VibeCodingによってコードを書く機会が激減し,生産性は向上しました.しかし,その代償?として,情報漏洩しては元も子もないと思います.
今回作った(作ってもらった)vibeguardianにどれだけ需要があるかはわかりませんが,是非ご活用いただき,Issue等でフィードバックいただけると嬉しいです.
ちなみに,他にも類似サービスは当然ながらあるので,アカウント作成が面倒!などであればvibeguardianは選択肢に入ると思います.チーム間共有などは非対応ですし,今後もサポートはしないと思うので,目的に合えば使ってください.(※下表はGeminiに作らさせています)
| 機能 / ツール | vibeguardian (本ツール) | 1Password CLI / Infisical | dotenv-vault |
|---|---|---|---|
| 主目的 | AIエージェントからの保護 | チーム間の安全な共有 | デプロイ環境の同期 |
| セットアップ | 1秒(ローカルJSONのみ) | アカウント作成・認証が必要 | アカウント作成・ログイン |
| 環境変数の注入 | メモリ上のみ(安全) | メモリ上のみ(安全) | 最終的に.envを復号(危険) |
| AIによるログ読み取り防止 | Aho-Corasickによる高速マスク | なし(ログに出たら終わり) | なし |
| APIヘッダーの自動注入 | ローカルプロキシで透過的に実行 | なし | なし |
