mcpField
S
secure-secret-drop

secure-secret-drop

github.com/moeadhamセキュリティ14.2k 回インストール5 週間前に更新
リポジトリ

secure-secret-drop について

Secure Secret Drop は、一時フォームでシークレットを受け取り、承認済みファイルへ直接書き込むローカルスキルです。入力値をチャットやモデルのコンテキストに含めず、Cloudflare を信頼境界とする Quick Tunnel を使用します。

主な機能

  1. 01一時的なシークレット入力フォームの作成
  2. 02Quick Tunnel 経由での送信内容の転送
  3. 03値を表示せずにレシート状態を確認
  4. 04承認済み env または JSON ファイルへの書き込み
  5. 05フォームとレシートの期限切れまたはキャンセル

活用シーン

  1. 01チャットを使わない API キーの収集
  2. 02送信された認証情報の承認済み env ファイルへの保存
  3. 03明示的に承認されたパスへのシークレット受信

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/moeadham/secure-secret-drop --skill secure-secret-drop

インストール後、Claude Code で/secure-secret-dropを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
LICENSE
README.md
references/
security-model.md
cloudflared-setup.md
scripts/
handoff.py
tests/
test_handoff.py

詳細

Secure Secret Drop

ユーザーがチャットやボールトを使わずにシークレットを提供する必要がある場合は、このローカルスキルを使用します。分離された Cloudflare Quick Tunnel の一時的な公開ケイパビリティ URL を作成します。この URL は、127.0.0.1 のみにバインドされた HTTP オリジンを経由し、送信されたバイト列をモデルのコンテキストに入れることなく、明示的に許可された宛先ファイルに直接書き込みます。

要件と初回セットアップ

必要なもの:

  • Python 3(標準ライブラリ)。Python パッケージは不要です。
  • cloudflared 実行ファイル。
  • Cloudflare へのアウトバウンドネットワークアクセス。ローカルのフォームオリジンは 127.0.0.1 のみにバインドされます。

Cloudflare アカウント、ドメイン、API トークン、cloudflared tunnel login、名前付きトンネル、DNS レコード、バックグラウンドサービスは必要ありません。このスキルは、ドロップごとに匿名の一時的な Quick Tunnel を作成します。

最初のフォームを作成する前に、doctor を実行してください。cloudflared=missing と報告された場合、create を試みないでください。また、ターミナルツールを利用できる場合は、ユーザーに手動で解決するよう求めないでください。Cloudflared setup を読み、ホスト OS とパッケージマネージャーを特定し、提案するインストール方法を説明して、パッケージのインストールや sudo に必要な承認を得てから、Cloudflare の公式配布チャネルからインストールし、cloudflared --version と doctor の両方を再実行してください。このスキルのために、cloudflared tunnel login を実行したり、DNS を作成したり、トンネルサービスをインストールしたり、既存の Cloudflare 設定を変更したりしないでください。

cloudflared が PATH 以外の場所にインストールされている場合は、コマンドの実行時またはエージェントのサービス環境で、CLOUDFLARED_BIN に実行ファイルの絶対パスを設定してください。CLI は、macOS/Linux の一般的な場所も自動的に確認します。

ワークフロー

  1. doctor を実行します。
  2. フォームを作成し、返された URL をユーザーに送ります。値をチャットに貼り付けるよう求めてはいけません。
  3. ユーザーが一度送信し、送信が完了したことだけを伝えます。
  4. status RECEIPT_ID を実行します。ステータスとフィールド名のみが表示され、値、長さ、ハッシュは表示されません。
  5. 承認された正確なパスに直接取り込むか、ダミーのテストレシートを破棄します。

スキルローダーからインストール済みのスキルディレクトリを特定してください。作成者固有の絶対パスをコピーしてはいけません。次に、そのスクリプトを使用します。

PY="$(command -v python3)"
CLI="<installed-skill-directory>/scripts/handoff.py"
$PY "$CLI" doctor
$PY "$CLI" create --field API_KEY --field API_SECRET --ttl 600
$PY "$CLI" status RECEIPT_ID
$PY "$CLI" consume RECEIPT_ID --env-file /exact/approved/path.env
$PY "$CLI" consume RECEIPT_ID --json-file /exact/approved/path.json
$PY "$CLI" consume RECEIPT_ID --env-file /exact/path.env --overwrite
$PY "$CLI" consume RECEIPT_ID --discard
$PY "$CLI" cancel RECEIPT_ID

オプション:--field NAME を繰り返して指定できます。--label NAME=Visible label でラベルを指定できます。宣言済みの非シークレットフィールドに限り、--plain NAME を使用できます。名前は初期状態では、大文字の環境変数キー形式に一致する必要があります。デフォルトの TTL は 10 分です。

運用ルール

  • レシートに対して read_file、cat、show、その他の表示コマンドを決して実行しないでください。CLI には意図的に生の出力コマンドがありません。
  • 値を引数、URL、ログ、ステータス出力、チャットに決して含めないでください。
  • 宛先に既存のキーがある場合は、--overwrite が必要です。ユーザーが明示した宛先パスは、すでに承認済みとして扱います。取り込み前に再度確認してはいけません。宛先が不明または曖昧な場合、あるいは上書きの承認が必要な場合に限り、確認してください。
  • 宛先の検証または書き込みに失敗した場合、送信済みレシートは再試行可能な状態のままになります。
  • GET と HEAD は消費されません。有効な POST が成功するのは一度だけです。そのため、リンクスキャナーによってフォームが消費されることはありません。
  • フォームには有効期限があり、ローカルオリジンとトンネルは自動的に終了します。早期に閉じるには cancel を使用します。POST が成功すると、ケイパビリティはただちに無効になります。確認応答全体がブラウザーに届くまで約 2 秒間待ってから、配信を停止します。レシートは明示的に取り込まれるまで保持されます。
  • 新しい Hermes セッションでも一貫した動作になるよう、スクリプトと宛先には絶対パスを使用してください。
  • フォームの見た目は控えめでプロフェッショナルなものにしてください。配色に紫を使用してはいけません。

信頼とストレージのモデル

これは TLS のみを使用する MVP であり、ブラウザーによるエンドツーエンド暗号化ではありません。URL は一時的な公開ケイパビリティ URL です。Cloudflare はエッジで公開 TLS を終端し、Quick Tunnel 経由で 127.0.0.1 のみにバインドされた HTTP オリジンへ転送します。そのため、Cloudflare は信頼境界に含まれます。トンネルは tunnel --no-autoupdate --config /dev/null --url http://127.0.0.1:<random-port> で起動します。名前付きトンネル、既存の設定、DNS、Workers、sudo には触れません。

保留中のフォームのケイパビリティ/CSRF 情報と送信された受領データは、デフォルトでスキルの外部にある $XDG_STATE_HOME/secure-secret-drop/ または ~/.local/state/secure-secret-drop/ に保存されます(ディレクトリのモードは 0700、ファイルのモードは 0600)。SECURE_SECRET_DROP_STATE_DIR を設定すると、保存先を変更できます。この承認済み MVP では、受領データは保存時に平文であり、ローカルユーザーアカウントとディスク暗号化のセキュリティを引き継ぎます。速やかに受領またはキャンセルしてください。受領データ/非公開フォームデータは、受領、キャンセル、または期限切れの後に削除されます。status で終了状態を報告できるよう、機密情報を含まない最小限のステータスレコードは残ります。

制限事項と不変条件については、セキュリティモデルを参照してください。

コメント