> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# セキュリティ

<Warning>
  **個人アシスタントの信頼モデル。** このガイダンスは、Gateway ごとに信頼された
  オペレーター境界が 1 つあることを前提としています（シングルユーザーの個人アシスタントモデル）。
  OpenClaw は、1 つのエージェントまたは Gateway を共有する複数の
  敵対的ユーザー向けの、敵対的マルチテナントセキュリティ境界では**ありません**。信頼が混在する運用や
  敵対的ユーザーの運用では、信頼境界を分離してください: Gateway +
  認証情報を分け、理想的には OS ユーザーまたはホストも分けます。
</Warning>

## スコープ: 個人アシスタントのセキュリティモデル

* サポート対象: Gateway ごとに 1 人のユーザー/信頼境界（境界ごとに OS ユーザー/ホスト/VPS を 1 つにすることを推奨）。
* サポート対象外: 相互に信頼していない、または敵対的なユーザーが 1 つの共有 Gateway/エージェントを使用すること。
* 敵対的ユーザーの分離には、別々の Gateway（理想的には別々の OS ユーザー/ホストも）が必要です。
* 信頼できない複数のユーザーが 1 つのツール有効化済みエージェントにメッセージを送れる場合、そのユーザーたちはそのエージェントに委譲されたツール権限を共有します。
* 誰かが Gateway ホストの状態/設定（`openclaw.json` を含む `~/.openclaw`）を変更できる場合、その人を信頼されたオペレーターとして扱ってください。
* 1 つの Gateway 内では、認証済みオペレーターアクセスは信頼されたコントロールプレーンロールであり、ユーザーごとのテナントロールではありません。
* `sessionKey`（セッション ID、ラベル）はルーティングセレクターであり、認可トークンではありません。

リモートアクセス、DM ポリシー、リバースプロキシ、または公開露出を変更する前に、事前確認/ロールバック用チェックリストとして [Gateway 露出ランブック](/ja-JP/gateway/security/exposure-runbook) を実行してください。

## `openclaw security audit`

設定変更後、またはネットワーク面を露出する前にこれを実行してください:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw security audit
openclaw security audit --deep    # ライブ Gateway プローブを試みる
openclaw security audit --fix     # 安全な修復を適用する
openclaw security audit --json
```

`--fix` は意図的に範囲を狭くしています: 開いているグループポリシーを allowlist に切り替え、`logging.redactSensitive: "tools"` を復元し、状態/設定/include ファイルの権限を強化し（ファイルは `600`、ディレクトリは `700`）、Windows では POSIX `chmod` の代わりに ACL リセットを使用します。

### 監査で確認する内容（概要）

* **インバウンドアクセス** - DM/グループポリシー、allowlist: 見知らぬ人がボットを起動できるか？
* **ツールの影響範囲** - 昇格済みツール + 開いた部屋: プロンプトインジェクションがシェル/ファイル/ネットワーク操作になり得るか？
* **Exec ファイルシステムドリフト** - `exec`/`process` がサンドボックス制約なしで利用可能なまま、変更系のファイルシステムツールが拒否されている。
* **Exec 承認ドリフト** - `security="full"`、`autoAllowSkills`、`strictInlineEval` のないインタープリター allowlist。`security="full"` 単独は広めの姿勢に対する警告であり、バグの証明ではありません。これは信頼された個人アシスタント設定向けに選ばれたデフォルトです。脅威モデルが承認や allowlist ガードレールを必要とする場合にのみ強化してください。
* **ネットワーク露出** - Gateway の bind/auth、Tailscale Serve/Funnel、弱い/短い認証トークン。
* **ブラウザー制御の露出** - リモートノード、リレーポート、リモート CDP エンドポイント。
* **ローカルディスク衛生** - 権限、シンボリックリンク、設定 include、同期フォルダーパス。
* **Plugins** - 明示的な allowlist なしでの読み込み。
* **ポリシードリフト** - サンドボックス Docker 設定が構成されているがサンドボックスモードがオフになっている。`gateway.nodes.denyCommands` のエントリが有効に見えるが、ペイロード内のシェルテキストではなく正確なコマンド ID（例: `system.run`）にしか一致しない。危険な `gateway.nodes.allowCommands` エントリ。グローバルな `tools.profile="minimal"` がエージェントごとに上書きされている。Plugin 所有のツールが許容的なポリシー下で到達可能。
* **ランタイム期待値ドリフト** - `tools.exec.host` が現在 `auto` をデフォルトにしているのに、暗黙の exec がまだ `sandbox` を意味すると仮定している、またはサンドボックスモードがオフのまま `tools.exec.host="sandbox"` を設定している。
* **モデル衛生** - レガシーな設定済みモデルに警告します（ソフト警告であり、ハードブロックではありません）。

各検出事項には構造化された `checkId` があります（例: `gateway.bind_no_auth`、`tools.exec.security_full_configured`）。プレフィックス: `fs.*`（権限）、`gateway.*`（bind/auth/Tailscale/Control UI/信頼済みプロキシ）、`hooks.*`/`browser.*`/`sandbox.*`/`tools.exec.*`（面ごとの強化）、`plugins.*`/`skills.*`（サプライチェーン）、`security.exposure.*`（アクセスポリシー x ツールの影響範囲）。重大度と自動修復サポートを含む完全なカタログ: [セキュリティ監査チェック](/ja-JP/gateway/security/audit-checks)。[形式検証](/ja-JP/security/formal-verification) も参照してください。

### 検出事項をトリアージするときの優先順位

1. 「open」+ ツール有効: まず DM/グループをロックダウンし（pairing/allowlist）、次にツールポリシー/サンドボックスを強化します。
2. 公開ネットワーク露出（LAN bind、Funnel、認証欠落）: 直ちに修正します。
3. ブラウザー制御のリモート露出: オペレーターアクセスとして扱います（tailnet のみ、ノードは意図的にペアリング、公開露出なし）。
4. 権限: 状態/設定/認証情報/auth はグループ/全ユーザーから読み取り可能であってはいけません。
5. Plugins: 明示的に信頼するものだけを読み込みます。
6. モデル選択: ツールを持つボットでは、最新の指示耐性が高いモデルを優先します。

## 60 秒でできる強化済みベースライン

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  gateway: {
    mode: "local",
    bind: "loopback",
    auth: { mode: "token", token: "replace-with-long-random-token" },
  },
  session: {
    dmScope: "per-channel-peer",
  },
  tools: {
    profile: "messaging",
    deny: ["group:automation", "group:runtime", "group:fs", "sessions_spawn", "sessions_send"],
    fs: { workspaceOnly: true },
    exec: { security: "deny", ask: "always" },
    elevated: { enabled: false },
  },
  channels: {
    whatsapp: { dmPolicy: "pairing", groups: { "*": { requireMention: true } } },
  },
}
```

Gateway をローカル専用に保ち、DM を分離し、コントロールプレーン/ランタイムツールをデフォルトで無効にします。そこから信頼されたエージェントごとにツールを選択的に再有効化してください。

チャット駆動のエージェントターン向けの組み込みベースライン: 非所有者の送信者は、設定に関係なく `cron` または `gateway` ツールを使用できません。

## 信頼境界マトリクス

リスクレポートをトリアージするための簡易モデル:

| 境界または制御                                    | 意味                            | よくある誤読                                    |
| ------------------------------------------ | ----------------------------- | ----------------------------------------- |
| `gateway.auth`（トークン/パスワード/信頼済みプロキシ/デバイス認証） | Gateway API への呼び出し元を認証する      | 「安全にするには、すべてのフレームでメッセージごとの署名が必要」          |
| `sessionKey`                               | コンテキスト/セッション選択用のルーティングキー      | 「セッションキーはユーザー認証境界である」                     |
| プロンプト/コンテンツのガードレール                         | モデル悪用リスクを低減する                 | 「プロンプトインジェクションだけで認証バイパスが証明される」            |
| `canvas.eval` / ブラウザー evaluate             | 有効化時の意図されたオペレーター機能            | 「どんな JS eval プリミティブも、この信頼モデルでは自動的に脆弱性である」 |
| ローカル TUI `!` シェル                           | 明示的にオペレーターが起動するローカル実行         | 「ローカルシェルの便利コマンドはリモートインジェクションである」          |
| ノードのペアリングとノードコマンド                          | ペアリング済みデバイスでのオペレーターレベルのリモート実行 | 「リモートデバイス制御はデフォルトで信頼できないユーザーアクセスとして扱うべき」  |
| `gateway.nodes.pairing.autoApproveCidrs`   | オプトインの信頼済みネットワークノード登録ポリシー     | 「デフォルトで無効な allowlist は自動ペアリング脆弱性である」      |

## 設計上、脆弱性ではないもの

<Accordion title="アクション不要として閉じられる一般的な検出事項">
  * ポリシー、認証、またはサンドボックスのバイパスを伴わない、プロンプトインジェクションのみのチェーン。
  * 1 つの共有ホストまたは設定上で敵対的マルチテナント運用を前提とする主張。
  * 共有 Gateway セットアップで IDOR と分類された通常のオペレーター読み取りパスアクセス（例: `sessions.list` / `sessions.preview` / `chat.history`）。
  * localhost のみのデプロイに関する検出事項（例: ループバック専用 Gateway で HSTS がない）。
  * このリポジトリに存在しないインバウンドパスに関する Discord インバウンド Webhook 署名の検出事項。
  * ノードペアリングメタデータを `system.run` 用の隠れた第 2 のコマンドごとの承認レイヤーとして扱うこと。実際の実行境界は、Gateway のグローバルノードコマンドポリシーとノード自身の exec 承認です。
  * `gateway.nodes.pairing.autoApproveCidrs` をそれ自体で脆弱性として扱うこと。これはデフォルトで無効であり、明示的な CIDR/IP エントリを必要とし、要求スコープなしの初回 `role: node` ペアリングにのみ適用され、operator/browser/Control UI、WebChat、ロール/スコープのアップグレード、メタデータまたは公開鍵の変更、同一ホストの loopback trusted-proxy ヘッダーパス（loopback trusted-proxy 認証が有効な場合でも）を自動承認することはありません。
  * `sessionKey` を認証トークンとして扱う「ユーザーごとの認可欠落」の検出事項。
</Accordion>

## Gateway とノードの信頼

Gateway とノードを、異なるロールを持つ 1 つのオペレーター信頼ドメインとして扱ってください:

* **Gateway**: コントロールプレーンとポリシー面（`gateway.auth`、ツールポリシー、ルーティング）。
* **ノード**: その Gateway にペアリングされたリモート実行面（コマンド、デバイス操作、ホストローカル機能）。
* Gateway に認証された呼び出し元は Gateway スコープで信頼されます。ペアリング後、ノードアクションはそのノード上の信頼されたオペレーターアクションです。[オペレータースコープ](/ja-JP/gateway/operator-scopes) を参照してください。
* 共有 Gateway トークン/パスワードで認証された直接 loopback バックエンドクライアントは、ユーザーデバイス ID を提示せずに内部コントロールプレーン RPC を実行できます。これはリモートまたはブラウザーペアリングのバイパスではありません。ネットワーククライアント、ノードクライアント、デバイストークンクライアント、明示的なデバイス ID は、引き続きペアリングとスコープアップグレードの適用を通過します。
* Exec 承認（allowlist + ask）はオペレーターの意図に対するガードレールであり、敵対的マルチテナント分離ではありません。これは正確なリクエストコンテキストとベストエフォートの直接ローカルファイルオペランドに結び付けられますが、すべてのランタイム/インタープリターローダーパスを意味的にモデル化するわけではありません。強い境界にはサンドボックス化とホスト分離を使用してください。
* 信頼された単一オペレーターのデフォルト: `gateway`/`node` 上のホスト exec は承認プロンプトなしで許可されます（`security="full"`、`ask="off"`）。これは意図された UX であり、それ自体では脆弱性ではありません。

敵対的ユーザー分離では、OS ユーザー/ホストごとに信頼境界を分け、別々の Gateway を実行してください。

## 脅威モデル

AI アシスタントは、任意のシェルコマンドの実行、ファイルの読み書き、ネットワークサービスへのアクセス、（チャネルアクセスが付与されている場合は）誰にでもメッセージを送信できます。メッセージを送る人は、悪いことをさせるように騙したり、データへのアクセスをソーシャルエンジニアリングしたり、インフラストラクチャの詳細を探ったりできます。

ここでの失敗のほとんどは珍しいエクスプロイトではありません。「誰かがボットにメッセージを送り、ボットが依頼されたことを実行した」というものです。OpenClaw の姿勢は次の順序です:

1. **まず ID** - ボットと話せる人を決めます（DM pairing / allowlist / 明示的な「open」）。
2. **次にスコープ** - ボットがどこで動作できるかを決めます（グループ allowlist + mention gating、ツール、サンドボックス化、デバイス権限）。
3. **最後にモデル** - モデルは操作され得ると想定し、操作されても影響範囲が限定されるように設計します。

## DM アクセス: pairing、allowlist、open、disabled

すべての DM 対応チャネルは `dmPolicy`（または `*.dm.policy`）をサポートし、メッセージが処理される前にインバウンド DM をゲートします:

| ポリシー        | 挙動                                                                                                                             |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `pairing`   | デフォルト。未知の送信者にはペアリングコードが発行され、承認されるまでボットは無視します。コードは1時間後に期限切れになります。新しいリクエストが作成されるまで、DMを繰り返してもコードは再送されません。保留中のリクエストはチャネルごとに3件までです。 |
| `allowlist` | 未知の送信者はブロックされ、ペアリングハンドシェイクは行われません。                                                                                             |
| `open`      | 誰でもDMできます（公開）。チャネルの許可リストに `"*"` を含める必要があります（明示的なオプトイン）。                                                                        |
| `disabled`  | 受信DMは完全に無視されます。                                                                                                                |

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw pairing list <channel>
openclaw pairing approve <channel> <code>
```

詳細とディスク上のファイル: [ペアリング](/ja-JP/channels/pairing)

`dmPolicy="open"` と `groupPolicy="open"` は最後の手段の設定として扱ってください。ルームのすべてのメンバーを完全に信頼している場合を除き、ペアリング + 許可リストを優先してください。

### 許可リスト（2層）

* **DM許可リスト** (`allowFrom` / `channels.discord.allowFrom` / `channels.slack.allowFrom`; レガシー: `channels.discord.dm.allowFrom`, `channels.slack.dm.allowFrom`): 誰がボットにDMできるか。`dmPolicy="pairing"` の場合、承認は `~/.openclaw/credentials/<channel>-allowFrom.json`（デフォルトアカウント）または `<channel>-<accountId>-allowFrom.json`（非デフォルトアカウント）に書き込まれ、設定の許可リストとマージされます。
* **グループ許可リスト**（チャネル固有）: ボットが受け付けるグループ/チャネル/ギルド。
  * `channels.whatsapp.groups`, `channels.telegram.groups`, `channels.imessage.groups`: `requireMention` などのグループごとのデフォルト。設定すると、グループ許可リストとしても機能します（全許可の挙動を維持するには `"*"` を含めます）。`agents.list[].groupChat.mentionPatterns`（例: `["@openclaw", "@mybot"]`）でメンショントリガーをカスタマイズし、自分のボット名に対して `requireMention` がゲートするようにします。
  * `groupPolicy="allowlist"` + `groupAllowFrom`: グループセッション内で誰がボットをトリガーできるかを制限します（WhatsApp/Telegram/Signal/iMessage/Microsoft Teams）。
  * `channels.discord.guilds` / `channels.slack.channels`: サーフェスごとの許可リスト + メンションのデフォルト。
  * チェック順序: まず `groupPolicy`/グループ許可リスト、その後にメンション/返信によるアクティベーション。ボットメッセージへの返信（暗黙のメンション）は `groupAllowFrom` をバイパスしません。

詳細: [設定](/ja-JP/gateway/configuration) と [グループ](/ja-JP/channels/groups)

### DMセッション分離（マルチユーザーモード）

デフォルトでは、OpenClaw はクロスデバイスの継続性のため、すべてのDMをメインセッションにルーティングします。複数の人がボットにDMできる場合（公開DMまたは複数人の許可リスト）、DMセッションを分離してください。

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ session: { dmScope: "per-channel-peer" } }
```

`session.dmScope` の値:

| 値                          | スコープ                                        |
| -------------------------- | ------------------------------------------- |
| `main`（設定のデフォルト）           | すべてのDMが1つのセッションを共有します。                      |
| `per-channel-peer`         | 各チャネル+送信者のペアが分離されたDMコンテキストを取得します（安全なDMモード）。 |
| `per-account-channel-peer` | 上記と同様ですが、アカウントごとにさらに分割します（マルチアカウントチャネル）。    |
| `per-peer`                 | 各送信者が同じタイプのすべてのチャネルをまたいで1つのセッションを取得します。     |

ローカルCLIのオンボーディングは、未設定の場合に `session.dmScope: "per-channel-peer"` を書き込み、既存の明示的な値は保持します。

これはメッセージングコンテキストの境界であり、ホスト管理者の境界ではありません。ユーザー同士が相互に敵対的で、同じ Gateway ホスト/設定を共有している場合は、信頼境界ごとに別々のゲートウェイを実行してください。

同じ人物が複数のチャネルで連絡してくる場合は、`session.identityLinks` を使ってそれらのDMセッションを1つの正規IDにまとめます。[セッション管理](/ja-JP/concepts/session) と [設定](/ja-JP/gateway/configuration) を参照してください。

## コンテキスト可視性とトリガー認可

2つの別々の概念があります。

* **トリガー認可**: 誰がエージェントをトリガーできるか（`dmPolicy`, `groupPolicy`, 許可リスト, メンションゲート）。
* **コンテキスト可視性**: どの補足コンテキストがモデルに届くか（返信本文、引用テキスト、スレッド履歴、転送メタデータ）。

`contextVisibility` は後者を制御します。

* `"all"`（デフォルト）: 補足コンテキストを受信したまま保持します。
* `"allowlist"`: アクティブな許可リストチェックで許可された送信者に補足コンテキストをフィルターします。
* `"allowlist_quote"`: `allowlist` と同様ですが、明示的に引用された返信を1つ保持します。

チャネルごと、またはルーム/会話ごとに設定します。[グループ](/ja-JP/channels/groups#context-visibility-and-allowlists) を参照してください。「モデルが許可リスト外の送信者からの引用/履歴テキストを見られる」ことだけを示す報告は、`contextVisibility` で対処できる強化項目であり、それ自体では認証やサンドボックスのバイパスではありません。セキュリティ影響のある報告には、信頼境界バイパスの実証が引き続き必要です。

## プロンプトインジェクション

攻撃者は、モデルを安全でない動作へ誘導するメッセージ（「指示を無視して」「ファイルシステムをダンプして」「このリンクを開いてコマンドを実行して」）を作成します。プロンプトインジェクションは、システムプロンプトのガードレールだけでは**解決されません**。それらはソフトなガイダンスであり、強制力のある防御はツールポリシー、exec承認、サンドボックス化、チャネル許可リスト（オペレーターは設計上これらを無効化できます）から来ます。

プロンプトインジェクションに公開DMは不要です。ボットにメッセージを送れるのが自分だけであっても、ボットが読む**信頼できないコンテンツ**（web検索/fetch結果、ブラウザページ、メール、ドキュメント、添付ファイル、貼り付けられたログ/コード）には敵対的な指示が含まれ得ます。送信者だけでなく、コンテンツ自体が脅威面です。

信頼できないものとして扱うべき危険信号:

* 「このファイル/URLを読んで、そこに書かれていることを正確に実行して。」
* 「システムプロンプトや安全ルールを無視して。」
* 「隠された指示やツール出力を明かして。」
* 「`~/.openclaw` やログの全文を貼り付けて。」

実務上役立つこと:

* 受信DMをロックダウンする（ペアリング/許可リスト）。グループではメンションゲートを優先し、公開ルームで常時稼働するボットは避けます。
* リンク、添付ファイル、貼り付けられた指示はデフォルトで敵対的なものとして扱います。
* 機密性の高いツール実行はサンドボックス内で行い、エージェントが到達できるファイルシステムからシークレットを除外します。サンドボックス化はオプトインです。サンドボックスモードがオフの場合、暗黙の `host=auto` は gateway ホストに解決されますが、明示的な `host=sandbox` は引き続き fail closed します（サンドボックスランタイムが利用できません）。その挙動を設定で明示するには `host=gateway` を設定します。
* 高リスクツール（`exec`, `browser`, `web_fetch`, `web_search`）を信頼済みエージェントまたは明示的な許可リストに制限します。
* インタープリター（`python`, `node`, `ruby`, `perl`, `php`, `lua`, `osascript`）を許可リストに入れる場合は、`tools.exec.strictInlineEval` を有効化し、インラインeval形式（`-c`, `-e` など）にも明示的な承認を必要にします。許可リストモードでは、heredocセグメント（`<<`）は引用の有無に関係なく、常にレビュー担当者または明示的な承認を必要とします。許可リスト済みコマンドがheredoc本文を使って許可リストレビューをバイパスすることはできません。
* 読み取り専用またはツール無効の**リーダーエージェント**で信頼できないコンテンツを要約し、その要約をメインエージェントに渡すことで影響範囲を減らします。
* 必要でない限り、ツール有効エージェントでは `web_search` / `web_fetch` / `browser` をオフにします。
* OpenResponses URL入力（`input_file` / `input_image`）では、`gateway.http.endpoints.responses.files.urlAllowlist` / `images.urlAllowlist` を厳しく設定し、`maxUrlParts` を低く保ちます（空の許可リストは未設定として扱われます）。URL取得を完全に無効化するには、`files.allowUrl: false` / `images.allowUrl: false` を使用します。
* シークレットをプロンプトに入れず、Gateway ホスト上のenv/設定経由で渡します。

**モデル選択は重要です。** プロンプトインジェクション耐性はモデル階層間で一様ではありません。小型/安価なモデルほど、敵対的プロンプト下でツール誤用や指示ハイジャックの影響を受けやすくなります。

<Warning>
  ツール有効エージェント、または信頼できないコンテンツを読むエージェントでは、古い/小型モデルのプロンプトインジェクションリスクは高すぎることがよくあります。そのようなワークロードを弱いモデル階層で実行しないでください。
</Warning>

* ツールを実行したり、ファイル/ネットワークに触れたりできるボットには、最新世代かつ最上位階層のモデルを使用します。
* ツール有効エージェントや信頼できない受信箱には、古い/弱い/小型の階層を使用しないでください。
* 小型モデルを使わざるを得ない場合は、影響範囲を減らしてください。読み取り専用ツール、強力なサンドボックス化、最小限のファイルシステムアクセス、厳格な許可リストを使います。すべてのセッションでサンドボックス化を有効にし、入力が厳密に制御されている場合を除き `web_search`/`web_fetch`/`browser` を無効にします。
* 信頼済み入力でツールなしのチャット専用個人アシスタントでは、小型モデルでも通常は問題ありません。

### 外部コンテンツと信頼できない入力のラッピング

OpenResponses の `input_file` テキストは、Gateway がローカルでデコードする場合でも、信頼できない外部コンテンツとして注入されます。このブロックには `<<<EXTERNAL_UNTRUSTED_CONTENT ...>>>` 境界マーカーと `Source: External` メタデータが含まれます（この経路では、他の場所で使われる長い `SECURITY NOTICE:` バナーは省略されます）。同じマーカーベースのラッピングは、メディア理解が添付ドキュメントからテキストを抽出し、それをメディアプロンプトに追加する場合にも適用されます。

OpenClaw はまた、一般的なセルフホストLLMチャットテンプレートの特殊トークンリテラル（Qwen/ChatML, Llama, Gemma, Mistral, Phi, GPT-OSS のロール/ターントークン）を、モデルに届く前にラップ済み外部コンテンツとメタデータから取り除きます。セルフホストの OpenAI 互換バックエンド（vLLM, SGLang, TGI, LM Studio, カスタム Hugging Face tokenizer スタック）は、`<|im_start|>` や `<|start_header_id|>` のようなリテラル文字列を、ユーザーコンテンツ内の構造的チャットテンプレートトークンとしてトークン化することがあります。この無害化がないと、取得したページ、メール本文、またはファイル内容ツール出力内の信頼できないテキストが、合成された `assistant`/`system` ロール境界を偽造できる可能性があります。無害化は外部コンテンツのラッピング層で行われるため、fetch/readツールと受信チャネルコンテンツ全体に一貫して適用されます。ホスト型プロバイダー（OpenAI, Anthropic）はすでに独自のリクエスト側無害化を適用しています。外部コンテンツのラッピングを有効に保ち、利用可能な場合は特殊トークンを分割/エスケープするバックエンド設定を優先してください。

送信モデル応答には別のサニタイザーがあり、最終的なチャネル配信境界で、漏洩した `<tool_call>`, `<function_calls>`, `<system-reminder>`, `<previous_response>` などの内部足場をユーザー可視の返信から取り除きます。

これは `dmPolicy`, 許可リスト, exec承認, サンドボックス化, `contextVisibility` を置き換えるものではありません。特定のトークナイザー層バイパスを1つ閉じるものです。

### バイパスフラグ（本番ではオフのままにする）

* `hooks.mappings[].allowUnsafeExternalContent`
* `hooks.gmail.allowUnsafeExternalContent`
* Cron ペイロードフィールド `allowUnsafeExternalContent`

厳密に範囲を絞ったデバッグのために一時的にのみ有効化してください。有効化する場合は、そのエージェントを分離します（サンドボックス + 最小限のツール + 専用セッション名前空間）。

Hook ペイロードは、制御下のシステムから配信される場合でも信頼できないコンテンツです（メール/ドキュメント/webコンテンツにはプロンプトインジェクションが含まれ得ます）。弱いモデル階層はこのリスクを高めます。Hook駆動の自動化では、強力で現代的なモデル階層を優先し、ツールポリシーを厳格に保ちます（`tools.profile: "messaging"` またはそれ以上に厳格）。可能な場合はサンドボックス化も併用してください。

### グループでの推論と詳細出力

`/reasoning`、`/verbose`、`/trace` は、公開チャンネル向けではない内部推論、ツール出力、Plugin 診断を露出する可能性があります。ツール引数、URL、Plugin 診断、モデルが見たデータが含まれる場合があります。公開ルームでは無効のままにし、信頼済みの DM または厳密に管理されたルームでのみ有効にしてください。

## コマンド認可

スラッシュコマンドとディレクティブは、チャンネルの許可リスト/ペアリングと `commands.useAccessGroups` から導出される、認可済み送信者に対してのみ処理されます（[設定](/ja-JP/gateway/configuration) と [スラッシュコマンド](/ja-JP/tools/slash-commands) を参照）。チャンネルの許可リストが空、または `"*"` を含む場合、そのチャンネルではコマンドが実質的に開放されます。

`/exec` は認可済みオペレーター向けのセッション内限定の便宜機能です。設定を書き込んだり、他のセッションを変更したりすることはありません。

## コントロールプレーンツール

2 つの組み込みツールは永続的な変更を加えることができます。

* `gateway` は `config.schema.lookup` / `config.get` で設定を検査し、`config.apply`、`config.patch`、`update.run` で変更します。
* `cron` は、元のチャット/タスク終了後も実行され続けるスケジュール済みジョブを作成します。

`gateway config.apply`/`config.patch` は既定で fail-closed です。エージェントが調整できるのは、低リスクのエージェントランタイム調整（`agents.defaults.thinkingDefault`、エージェント単位の model/thinking/reasoning/fast-mode フィールド）、メンションゲート（複数のネスト深度にある `channels.*.requireMention`）、可視返信設定（`messages.visibleReplies`、`messages.groupChat.visibleReplies`、`messages.groupChat.unmentionedInbound`）の狭い許可リストだけです。その他の変更された設定パスは拒否されます。グローバルモデル既定値とプロンプトオーバーレイはオペレーター制御のままで、新しい機密設定ツリーは意図的にその許可リストへ追加されない限り保護されます。このツールは引き続き `tools.exec.ask` または `tools.exec.security` の書き換えを拒否します。レガシーの `tools.bash.*` エイリアスは、書き込みが検査される前に同等の `tools.exec.*` パスへ正規化されます。

信頼できないコンテンツを扱うエージェント/サーフェスでは、既定でこれらを拒否してください。

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  tools: {
    deny: ["gateway", "cron", "sessions_spawn", "sessions_send"],
  },
}
```

`commands.restart=false` は再起動アクションだけをブロックします。`gateway` の設定/更新アクションは無効にしません。

## Node 実行（`system.run`）

macOS Node がペアリングされている場合、Gateway はその Node 上で `system.run` を呼び出せます。これはその Mac 上でのリモートコード実行です。

* Node ペアリング（承認 + トークン）が必要です。ペアリングは Node のアイデンティティ/信頼とトークン発行を確立します。コマンド単位の承認サーフェスではありません。
* Gateway は `gateway.nodes.allowCommands` / `denyCommands` によって粗いグローバル Node コマンドポリシーを適用します。`denyCommands` は正確な Node コマンド名だけに一致し（例: `system.run`）、コマンドペイロード内のシェルテキストには一致しません。再接続した Node が別のコマンドリストを広告すること自体は、Gateway のグローバルポリシーと Node 自身の exec 承認が境界を引き続き強制している限り、脆弱性ではありません。
* Node 単位の `system.run` ポリシーは、Node 自身の exec 承認ファイル（`exec.approvals.node.*`）です。これは Mac 上の Settings -> Exec approvals（security + ask + allowlist）から制御され、Gateway のグローバルなコマンド ID ポリシーより厳しくも緩くもできます。
* `security="full"` かつ `ask="off"` で動作する Node は、既定の信頼済みオペレーターモデルに従います。これは想定動作であり、デプロイでより厳しい姿勢が必要な場合を除き、バグではありません。
* 承認モードは、正確なリクエストコンテキストと、可能な場合は 1 つの具体的なローカルスクリプト/ファイルオペランドに紐づきます。OpenClaw がインタープリター/ランタイムコマンドに対してちょうど 1 つの直接ローカルファイルを特定できない場合、完全な意味的カバレッジを約束するのではなく、承認に基づく実行は拒否されます。
* `host=node` の場合、承認に基づく実行では正規化済みの準備済み `systemRunPlan` も保存されます。後続の承認済み転送は保存済みプランを再利用し、Gateway 検証は承認リクエスト作成後のコマンド/cwd/セッションコンテキストに対する呼び出し元の編集を拒否します。
* リモート実行を完全に無効にするには、security を `deny` に設定し、その Mac の Node ペアリングを削除してください。

## 動的 Skills（ウォッチャー / リモート Node）

OpenClaw はセッション中に Skills リストを更新できます。Skills ウォッチャーは `SKILL.md` が変更された後の次のエージェントターンでスナップショットを更新し、macOS Node の接続により macOS 専用 Skills が対象になり得ます（bin プローブに基づく）。Skills フォルダーは信頼済みコードとして扱い、変更できるユーザーを制限してください。

## Plugin

Plugin は Gateway と同じプロセス内で実行されます。信頼済みコードとして扱ってください。

* 信頼するソースからのみインストールしてください。明示的な `plugins.allow` 許可リストを優先し、有効化前に Plugin 設定をレビューし、Plugin 変更後は Gateway を再起動してください。
* インストール/更新（`openclaw plugins install <package>`、`openclaw plugins update <id>`）は信頼できないコードを実行します。
  * インストール先パスは、アクティブな Plugin インストールルート配下の Plugin 単位ディレクトリです。
  * OpenClaw はインストール/更新中に組み込みのローカル危険コードブロックを実行しません。オペレーター所有のローカル許可/ブロック判断には `security.installPolicy` を、診断スキャンには `openclaw security audit --deep` を使用してください。
  * npm と git の Plugin インストールは、明示的なインストール/更新フロー中にのみパッケージマネージャーの依存関係収束を実行します。ローカルパスとアーカイブは自己完結型パッケージとして扱われ、OpenClaw は `npm install` を実行せずにコピー/参照します。
  * 固定された正確なバージョン（`@scope/pkg@1.2.3`）を優先し、有効化前に展開済みコードを検査してください。
  * `--dangerously-force-unsafe-install` は非推奨であり、インストール/更新の挙動を変更しなくなりました。
  * `security.installPolicy` により、オペレーターは信頼済みローカルコマンドを実行して、Skills と Plugin のインストールについてホスト固有の許可/ブロック判断を行えます。これはソース素材がステージングされた後、インストール継続前に実行され、ClawHub Skills にも適用され、非推奨の unsafe フラグではバイパスされません。

詳細: [Plugin](/ja-JP/tools/plugin)

## サンドボックス化

専用ドキュメント: [サンドボックス化](/ja-JP/gateway/sandboxing)

2 つの補完的なアプローチがあります。

* **Docker 内の完全な Gateway**（コンテナー境界）: [Docker](/ja-JP/install/docker)
* **ツールサンドボックス**（`agents.defaults.sandbox`; ホスト Gateway + サンドボックス分離されたツール; Docker が既定バックエンド）: [サンドボックス化](/ja-JP/gateway/sandboxing)

<Note>
  エージェント間アクセスを防ぐには、`agents.defaults.sandbox.scope` を `"agent"`（既定）のままにするか、より厳密なセッション単位分離には `"session"` を使用してください。`scope: "shared"` は単一のコンテナーまたはワークスペースを使用します。
</Note>

サンドボックス内のエージェントワークスペースアクセス（`agents.defaults.sandbox.workspaceAccess`）:

* `"none"`（既定）: ツールは `~/.openclaw/sandboxes` 配下のサンドボックスワークスペースを参照します。エージェントワークスペースにはアクセスできません。
* `"ro"`: エージェントワークスペースを `/agent` に読み取り専用でマウントします（`write`/`edit`/`apply_patch` を無効化）。
* `"rw"`: エージェントワークスペースを `/workspace` に読み書き可能でマウントします。

追加の `sandbox.docker.binds` は、正規化および canonicalize されたソースパスに対して検証されます。ブロックパス拒否リストは、`/etc`、`/private/etc`、`/proc`、`/sys`、`/dev`、`/root`、`/boot`、Docker ソケットを一般に含むかエイリアスするディレクトリ（`/run`、`/var/run`、およびそれらの配下の `docker.sock`）に加え、HOME 認証情報サブパス（`.aws`、`.cargo`、`.config`、`.docker`、`.gnupg`、`.netrc`、`.npm`、`.ssh`）を対象にします。親シンボリックリンクのトリックと canonical なホームエイリアスは既存の祖先を通じて解決され、再チェックされるため、ブロック済みルートへ解決される場合は引き続き fail-closed になります。

<Warning>
  `tools.elevated` は、サンドボックス外で exec を実行するグローバル基準のエスケープハッチです。実効ホストは既定で `gateway`、または exec ターゲットが `node` に設定されている場合は `node` です。`tools.elevated.allowFrom` は厳しく保ち、見知らぬ相手に対して有効にしないでください。エージェント単位では `agents.list[].tools.elevated` でさらに制限してください。[Elevated mode](/ja-JP/tools/elevated) を参照してください。
</Warning>

### サブエージェント委譲ガードレール

セッションツールを許可する場合、委譲されたサブエージェント実行を別の境界判断として扱ってください。

* エージェントが本当に委譲を必要としない限り、`sessions_spawn` を拒否してください。
* `agents.defaults.subagents.allowAgents` と、エージェント単位の `agents.list[].subagents.allowAgents` オーバーライドは、既知の安全なターゲットエージェントに制限してください。
* サンドボックス化を維持しなければならないワークフローでは、`sandbox: "require"` を指定して `sessions_spawn` を呼び出してください（既定は `"inherit"`）。`"require"` はターゲットの子ランタイムがサンドボックス化されていない場合に即座に失敗します。

### 読み取り専用モード

`agents.defaults.sandbox.workspaceAccess: "ro"`（またはワークスペースアクセスなしの場合は `"none"`）と、`write`、`edit`、`apply_patch`、`exec`、`process` などをブロックするツール許可/拒否リストを組み合わせて、読み取り専用プロファイルを構築します。

* `tools.exec.applyPatch.workspaceOnly: true`（既定）: サンドボックス化がオフの場合でも、`apply_patch` がワークスペースディレクトリ外へ書き込み/削除することを防ぎます。`apply_patch` が意図的にワークスペース外のファイルに触れる必要がある場合にのみ `false` を設定してください。
* `tools.fs.workspaceOnly: true`（任意）: `read`/`write`/`edit`/`apply_patch` パスと、ネイティブプロンプト画像の自動読み込みパスをワークスペースディレクトリに制限します。
* ファイルシステムルートは狭く保ってください。エージェント/サンドボックスワークスペースにホームディレクトリのような広いルートを避けてください。機密性の高いローカルファイル（例: `~/.openclaw` 配下の state/config）がファイルシステムツールに露出する可能性があります。

## エージェント単位のアクセスプロファイル（マルチエージェント）

各エージェントは、完全アクセス、読み取り専用、アクセスなしなど、独自のサンドボックス + ツールポリシーを持つことができます。優先順位ルールについては [Multi-Agent Sandbox & Tools](/ja-JP/tools/multi-agent-sandbox-tools) を参照してください。

一般的なパターン: 個人エージェント（完全アクセス、サンドボックスなし）、家族/仕事用エージェント（サンドボックス化 + 読み取り専用ツール）、公開エージェント（サンドボックス化 + ファイルシステム/シェルツールなし）。

### 完全アクセス（サンドボックスなし）

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      { id: "personal", workspace: "~/.openclaw/workspace-personal", sandbox: { mode: "off" } },
    ],
  },
}
```

### 読み取り専用ツール + 読み取り専用ワークスペース

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      {
        id: "family",
        workspace: "~/.openclaw/workspace-family",
        sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },
        tools: {
          allow: ["read"],
          deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
        },
      },
    ],
  },
}
```

### ファイルシステム/シェルアクセスなし（プロバイダーメッセージングは許可）

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      {
        id: "public",
        workspace: "~/.openclaw/workspace-public",
        sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },
        tools: {
          // Session tools can reveal transcript data. Default scope is current session +
          // spawned subagent sessions; clamp further with tools.sessions.visibility if needed.
          sessions: { visibility: "tree" }, // self | tree | agent | all
          allow: [
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
            "discord",
            "slack",
            "telegram",
            "whatsapp",
          ],
          deny: [
            "apply_patch",
            "browser",
            "canvas",
            "cron",
            "edit",
            "exec",
            "gateway",
            "image",
            "nodes",
            "process",
            "read",
            "write",
          ],
        },
      },
    ],
  },
}
```

## ブラウザー制御のリスク

ブラウザー制御を有効にすると、モデルに実ブラウザーが与えられます。そのプロファイルにすでにログイン済みセッションがある場合、モデルはそれらのアカウントとデータにアクセスできます。ブラウザープロファイルは機密状態として扱ってください。

* エージェントには専用プロファイル（デフォルトの `openclaw` プロファイル）を使うことを推奨します。個人の日常用プロファイルは避けてください。
* サンドボックス化されたエージェントでは、信頼している場合を除き、ホストブラウザ制御を無効のままにしてください。
* スタンドアロンのループバックブラウザ制御 API は、共有シークレット認証（Gateway トークン bearer 認証または Gateway パスワード）のみを尊重します。trusted-proxy または Tailscale Serve の ID ヘッダーは使用しません。
* ブラウザのダウンロードは信頼できない入力として扱ってください。分離されたダウンロードディレクトリを使うことを推奨します。
* 可能であれば、エージェントプロファイルでブラウザ同期とパスワードマネージャーを無効にしてください。
* リモート Gateway では、「ブラウザ制御」は、そのプロファイルが到達できるものへの「オペレーターアクセス」と同等です。
* Gateway とノードホストは tailnet のみにしてください。ブラウザ制御ポートを LAN や公開インターネットに公開しないでください。
* 不要な場合はブラウザプロキシルーティングを無効にしてください（`gateway.nodes.browser.mode="off"`）。
* Chrome MCP の既存セッションモードは「より安全」ではありません。そのホストの Chrome プロファイルが到達できる範囲で、あなたとして動作できます。
* ブラウザマシン上で **ノードホスト** を実行し、Gateway がブラウザからリモートにある場合は Gateway にブラウザアクションをプロキシさせてください（[ブラウザツール](/ja-JP/tools/browser)を参照）。ノードペアリングは管理者アクセスのように扱い、Gateway とノードホストを同じ tailnet 上に置き、リレー/制御ポートを LAN、公開インターネット、または Tailscale Funnel 経由で公開しないでください。

### ブラウザ SSRF ポリシー（デフォルトで厳格）

明示的にオプトインしない限り、プライベート/内部宛先はブロックされたままです。

* デフォルト: `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` は未設定のため、プライベート/内部/特殊用途の宛先はブロックされたままです。レガシーエイリアス `allowPrivateNetwork` も引き続き受け付けます。
* オプトイン: これらの宛先を許可するには `dangerouslyAllowPrivateNetwork: true` を設定します。
* 厳格モードでは、明示的な例外に `hostnameAllowlist`（`*.example.com` のようなパターン）と `allowedHostnames`（`localhost` のような本来ブロックされる名前を含む完全一致ホスト例外）を使います。
* リダイレクトベースのピボットを減らすため、ナビゲーションはリクエスト前にチェックされ、ナビゲーション後の最終的な `http(s)` URL でもベストエフォートで再チェックされます。

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  browser: {
    ssrfPolicy: {
      dangerouslyAllowPrivateNetwork: false,
      hostnameAllowlist: ["*.example.com", "example.com"],
      allowedHostnames: ["localhost"],
    },
  },
}
```

## ネットワーク公開

### バインド、ポート、ファイアウォール

Gateway は WebSocket + HTTP を 1 つのポート（デフォルト `18789`; config/flags/env: `gateway.port`, `--port`, `OPENCLAW_GATEWAY_PORT`）で多重化します。この HTTP サーフェスには Control UI（SPA アセット、デフォルトベースパス `/`）と canvas ホスト（`/__openclaw__/canvas` と `/__openclaw__/a2ui` - 任意の HTML/JS。通常のブラウザで読み込む場合は信頼できないコンテンツとして扱い、信頼できないネットワーク/ユーザーに公開したり、権限のある Web サーフェスとオリジンを共有したりしないでください）が含まれます。

`gateway.bind` は Gateway がどこで待ち受けるかを制御します。

* `"loopback"`（デフォルト）: ローカルクライアントのみ接続できます。
* `"lan"`, `"tailnet"`, `"custom"`: 攻撃対象領域を広げます。Gateway 認証（共有トークン/パスワード、または正しく構成された trusted proxy）と実際のファイアウォールがある場合にのみ使ってください。

経験則: LAN バインドより Tailscale Serve を優先してください（Serve は Gateway をループバック上に保ち、Tailscale がアクセスを処理します）。LAN にバインドする必要がある場合は、広くポートフォワードするのではなく、厳密な送信元 IP 許可リストにポートをファイアウォールしてください。`0.0.0.0` で認証なしの Gateway を公開してはいけません。

### UFW での Docker ポート公開

公開されたコンテナポート（`-p HOST:CONTAINER` または Compose の `ports:`）は、ホストの `INPUT` ルールだけでなく Docker の転送チェーンを経由します。`DOCKER-USER` でルールを強制してください（Docker 自身の accept ルールより前に評価されます）。最近の多くのディストリビューションは `iptables-nft` フロントエンドを使っており、これらのルールは nftables バックエンドにも適用されます。

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
# /etc/ufw/after.rules (append as its own *filter section)
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
-A DOCKER-USER -s 127.0.0.0/8 -j RETURN
-A DOCKER-USER -s 10.0.0.0/8 -j RETURN
-A DOCKER-USER -s 172.16.0.0/12 -j RETURN
-A DOCKER-USER -s 192.168.0.0/16 -j RETURN
-A DOCKER-USER -s 100.64.0.0/10 -j RETURN
-A DOCKER-USER -p tcp --dport 80 -j RETURN
-A DOCKER-USER -p tcp --dport 443 -j RETURN
-A DOCKER-USER -m conntrack --ctstate NEW -j DROP
-A DOCKER-USER -j RETURN
COMMIT
```

IPv6 には別のテーブルがあります。Docker IPv6 が有効な場合は、対応するポリシーを `/etc/ufw/after6.rules` に追加してください。インターフェイス名（`eth0`）は VPS イメージによって異なるため（`ens3`, `enp*` など）、ハードコードしないでください。不一致があると拒否ルールが静かにスキップされる可能性があります。

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
ufw reload
iptables -S DOCKER-USER
ip6tables -S DOCKER-USER
nmap -sT -p 1-65535 <public-ip> --open
```

想定される外部ポートは、意図的に公開したものだけにしてください（ほとんどのセットアップでは SSH + リバースプロキシポート）。

### mDNS/Bonjour 検出

バンドルされた `bonjour` Plugin が有効な場合、Gateway はローカルデバイス検出のために mDNS（`_openclaw-gw._tcp`, ポート 5353）で存在をブロードキャストします。フルモードには、運用上の詳細を公開する TXT レコードが含まれます: `cliPath`（ユーザー名とインストール場所を明かすファイルシステムパス）、`sshPort`（SSH の利用可能性を通知）、`displayName`/`lanHost`（ホスト名情報）。インフラ詳細をブロードキャストすると、LAN 偵察が容易になります。

* LAN 検出が必要でない限り Bonjour は無効にしてください。macOS ホストでは自動起動し、それ以外ではオプトインです。直接の Gateway URL、Tailnet、SSH、または広域 DNS-SD ならローカルマルチキャストを避けられます。

* **最小モード**（Bonjour が有効な場合のデフォルト、公開 Gateway に推奨）は機密フィールドを省略します。

  ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
  { discovery: { mdns: { mode: "minimal" } } }
  ```

* **オフ** は Plugin を有効にしたままローカル検出を抑制します。

  ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
  { discovery: { mdns: { mode: "off" } } }
  ```

* **フルモード**（オプトイン）には `cliPath` + `sshPort` が含まれます。

  ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
  { discovery: { mdns: { mode: "full" } } }
  ```

* または、設定変更なしで mDNS を無効にするには `OPENCLAW_DISABLE_BONJOUR=1` を設定します。

最小モードでは Gateway は `role`, `gatewayPort`, `transport` をブロードキャストしますが、`cliPath`/`sshPort` は省略します。CLI パスが必要なアプリは、代わりに認証済み WebSocket 接続経由で取得できます。

### Gateway WebSocket 認証

Gateway 認証はデフォルトで必須です。有効な認証パスが構成されていない場合、Gateway は WebSocket 接続を拒否します（fail-closed）。オンボーディングはデフォルトでトークンを生成するため（ループバックでも）、ローカルクライアントは認証する必要があります。

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ gateway: { auth: { mode: "token", token: "your-token" } } }
```

`openclaw doctor --generate-gateway-token` でトークンを生成できます。

<Note>
  `gateway.remote.token` と `gateway.remote.password` はクライアント認証情報のソースです。それ自体ではローカル WS アクセスを保護しません。ローカル呼び出しパスは、`gateway.auth.*` が未設定の場合のフォールバックとしてのみ `gateway.remote.*` を使います。`gateway.auth.token` または `gateway.auth.password` が SecretRef 経由で明示的に構成され、解決できない場合、解決は fail closed します（remote-fallback によるマスキングはありません）。
</Note>

`wss://` を使う場合は `gateway.remote.tlsFingerprint` でリモート TLS をピン留めしてください。平文の `ws://` は、ループバック、プライベート IP リテラル、`.local`、および Tailnet `*.ts.net` Gateway URL で受け付けられます。それ以外の信頼できるプライベート DNS 名では、break-glass としてクライアントプロセスに `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` を設定してください（プロセス環境のみで、`openclaw.json` キーではありません）。モバイルペアリングと Android の手動/スキャン済み Gateway ルートはより厳格です。平文はループバックのみで、private-LAN、link-local、`.local`、ドットなしホスト名は、信頼済みプライベートネットワーク平文パスに明示的にオプトインしない限り TLS を使う必要があります。

デバイスペアリングは、直接の local loopback 接続では自動承認されます（信頼済み共有シークレットヘルパーフロー向けの狭い backend/container-local 自己接続パスも含みます）。Tailnet と LAN 接続（同一ホストの tailnet バインドを含む）はリモートとして扱われ、引き続き承認が必要です。ループバックリクエスト上の forwarded-header 証拠は、ループバックのローカリティを失格にします。メタデータアップグレードの自動承認は狭くスコープされています。[Gateway ペアリング](/ja-JP/gateway/pairing)を参照してください。

認証モード:

* `"token"`: 共有 bearer トークン（ほとんどのセットアップで推奨）。
* `"password"`: `OPENCLAW_GATEWAY_PASSWORD` 経由で設定することを推奨します。
* `"trusted-proxy"`: ID 対応リバースプロキシがユーザーを認証し、ヘッダー経由で ID を渡すことを信頼します。[Trusted Proxy Auth](/ja-JP/gateway/trusted-proxy-auth)を参照してください。

ローテーションチェックリスト（トークン/パスワード）: 新しいシークレット（`gateway.auth.token` または `OPENCLAW_GATEWAY_PASSWORD`）を生成/設定する。Gateway（または Gateway を監督している場合は macOS アプリ）を再起動する。リモートクライアント（`gateway.remote.token`/`.password`）を更新する。古い認証情報が機能しなくなったことを確認する。

### Tailscale Serve ID ヘッダー

`gateway.auth.allowTailscale` が `true`（Serve のデフォルト）の場合、OpenClaw は Control UI/WebSocket 認証に Tailscale Serve ID ヘッダー `tailscale-user-login` を受け入れます。ローカル Tailscale デーモン（`tailscale whois`）を通じて `x-forwarded-for` アドレスを解決し、それをヘッダーと照合することで ID を検証します。これは、Tailscale によって注入された `x-forwarded-for`, `x-forwarded-proto`, `x-forwarded-host` を運ぶループバックリクエストでのみ発動します。この非同期チェックでは、同じ `{scope, ip}` に対する失敗試行は、リミッターが失敗を記録する前に直列化されるため、1 つの Serve クライアントからの同時の不正な再試行は、2 回目の試行を即座にロックアウトする可能性があります。

HTTP API エンドポイント（`/v1/*`, `/tools/invoke`, `/api/channels/*`）は Tailscale ID ヘッダー認証を使いません。Gateway に構成された HTTP 認証モードに従います。

Gateway HTTP bearer 認証は、実質的にオールオアナッシングのオペレーターアクセスです。`/v1/chat/completions`, `/v1/responses`, `/api/v1/admin/rpc` のような Plugin ルート、または `/api/channels/*` を呼び出せる認証情報は、その Gateway に対するフルアクセスのオペレーターシークレットです。共有シークレット bearer 認証は、エージェントターンに対する完全なデフォルトオペレータースコープ（`operator.admin`, `operator.approvals`, `operator.pairing`, `operator.read`, `operator.talk.secrets`, `operator.write`）と所有者セマンティクスを復元し、より狭い `x-openclaw-scopes` 値はその共有シークレットパスを制限しません。リクエスト単位のスコープセマンティクスは、リクエストが ID を持つモード（trusted proxy auth）または明示的な no-auth private ingress から来る場合にのみ適用されます。これらのモードでは、`x-openclaw-scopes` を省略すると通常のオペレーターデフォルトスコープセットにフォールバックし、スコープが狭められている場合は `x-openclaw-model` のような所有者レベルヘッダーには `operator.admin` が必要です。`/tools/invoke` と HTTP セッション履歴エンドポイントも同じ共有シークレットルールに従います。これらの認証情報を信頼できない呼び出し元と共有しないでください。信頼境界ごとに別々の Gateway を使うことを推奨します。

トークンレス Serve 認証は、Gateway ホスト自体が信頼されていることを前提とします。敵対的な同一ホストプロセスに対する保護ではありません。信頼できないローカルコードが Gateway ホストで実行される可能性がある場合は、`allowTailscale` を無効にし、明示的な共有シークレット認証（`token` または `password`）を要求してください。

これらのヘッダーを自分のリバースプロキシから転送しないでください。Gateway の前段で TLS を終端する、またはプロキシする場合は、`allowTailscale` を無効にし、代わりに共有シークレット認証または [Trusted Proxy Auth](/ja-JP/gateway/trusted-proxy-auth) を使ってください。

[Tailscale](/ja-JP/gateway/tailscale) と [Web 概要](/ja-JP/web) を参照してください。

### リバースプロキシ構成

nginx/Caddy/Traefik などの背後で forwarded-client IP を適切に扱うには、`gateway.trustedProxies` を設定してください。Gateway が `trustedProxies` に含まれないアドレスからのプロキシヘッダーを検出した場合、その接続をローカルとして扱いません。Gateway 認証が無効な場合、その接続は拒否されます。これにより、プロキシされた接続が localhost から来たように見えて自動的に信頼されることを防ぎます。

`trustedProxies` は `gateway.auth.mode: "trusted-proxy"` にも使われます。こちらはより厳格で、デフォルトではループバック送信元プロキシで fail closed します。同一ホストのループバックリバースプロキシは、ローカルクライアント検出と forwarded-IP 処理に `trustedProxies` を使えますが、`gateway.auth.trustedProxy.allowLoopback = true` の場合にのみ `trusted-proxy` 認証モードを満たせます。それ以外の場合は token/password 認証を使ってください。

```yaml theme={"theme":{"light":"min-light","dark":"min-dark"}}
gateway:
  trustedProxies:
    - "10.0.0.1" # reverse proxy IP
  allowRealIpFallback: false # default false; only enable if your proxy cannot provide X-Forwarded-For
  auth:
    mode: password
    password: ${OPENCLAW_GATEWAY_PASSWORD}
```

`trustedProxies` が設定されている場合、Gateway は `X-Forwarded-For` を使ってクライアント IP を判定します。`gateway.allowRealIpFallback: true` が明示的に設定されていない限り、`X-Real-IP` は無視されます。プロキシでは `X-Forwarded-For`/`X-Real-IP` に追記するのではなく、必ず**上書き**してください。

```nginx theme={"theme":{"light":"min-light","dark":"min-dark"}}
# good
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;

# bad: preserves/appends untrusted client-supplied values
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
```

信頼済みプロキシヘッダーによって、ノードデバイスのペアリングが自動的に信頼済みになるわけではありません。`gateway.nodes.pairing.autoApproveCidrs` は別個の、デフォルトで無効なオペレーターポリシーです。また、ループバック送信元の信頼済みプロキシヘッダーパスは、ループバックの信頼済みプロキシ認証が有効な場合でも、ノードの自動承認から除外されたままです（ローカル呼び出し元がそれらのヘッダーを偽造できるため）。

### HSTS とオリジンに関する注意

* OpenClaw の Gateway はローカル/local loopback 優先です。リバースプロキシで TLS を終端する場合は、そこで HSTS を設定してください。
* Gateway 自体が HTTPS を終端する場合、`gateway.http.securityHeaders.strictTransportSecurity` は OpenClaw のレスポンスから HSTS ヘッダーを送出します。
* 非ループバックの Control UI デプロイでは、デフォルトで `gateway.controlUi.allowedOrigins` が必要です。`allowedOrigins: ["*"]` は明示的な全許可ポリシーであり、強化されたデフォルトではありません。厳密に管理されたローカルテスト以外では避けてください。
* ループバックでのブラウザーオリジン認証失敗は、一般的なループバック除外が有効な場合でもレート制限されます。ただし、ロックアウトキーは共有の localhost バケット 1 つではなく、正規化された `Origin` 値ごとにスコープされます。
* `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` は Host ヘッダーのオリジンフォールバックモードを有効にします。危険な、オペレーターが選択するポリシーとして扱ってください。
* DNS リバインディングとプロキシの Host ヘッダー動作は、デプロイの強化事項として扱ってください。`trustedProxies` は厳格に保ち、Gateway をパブリックインターネットへ直接公開しないでください。
* 詳細なデプロイガイダンス: [信頼済みプロキシ認証](/ja-JP/gateway/trusted-proxy-auth#tls-termination-and-hsts)。

### HTTP 経由の Control UI

Control UI でデバイス ID を生成するには、安全なコンテキスト（HTTPS または localhost）が必要です。

* `gateway.controlUi.allowInsecureAuth`: ローカル互換性トグルです。localhost では、ページが安全でない HTTP 経由で読み込まれた場合に、デバイス ID なしで Control UI 認証を許可します。ペアリングチェックをバイパスせず、リモート（非 localhost）のデバイス ID 要件も緩和しません。HTTPS（Tailscale Serve）を優先するか、`127.0.0.1` で UI を開いてください。
* `gateway.controlUi.dangerouslyDisableDeviceAuth`: 緊急時専用で、デバイス ID チェックを完全に無効にします。重大なセキュリティ低下です。能動的にデバッグしていて、すぐに戻せる場合を除き、無効のままにしてください。
* これらのフラグとは別に、`gateway.auth.mode: "trusted-proxy"` が成功すると、デバイス ID なしで**オペレーター**の Control UI セッションを許可できます。これは意図された認証モードの動作であり、`allowInsecureAuth` のショートカットではありません。また、ノードロールの Control UI セッションには適用されません。

`allowInsecureAuth` が有効な場合、`openclaw security audit` は警告します。

### 安全でない/危険なフラグ

`openclaw security audit` は、有効になっている既知の安全でない/危険なデバッグスイッチごとに `config.insecure_or_dangerous_flags` を発生させます（フラグごとに 1 件の検出）。本番環境ではこれらを未設定のままにしてください。監査抑制が設定されている場合、該当する検出が `suppressedFindings` に移動しても、`security.audit.suppressions.active` はアクティブな出力に残ります。

<AccordionGroup>
  <Accordion title="現在監査で追跡されるフラグ">
    * `gateway.controlUi.allowInsecureAuth=true`
    * `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true`
    * `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
    * `security.audit.suppressions configured (<count>)`
    * `hooks.gmail.allowUnsafeExternalContent=true`
    * `hooks.mappings[<index>].allowUnsafeExternalContent=true`
    * `tools.exec.applyPatch.workspaceOnly=false`
    * `plugins.entries.acpx.config.permissionMode=approve-all`
  </Accordion>

  <Accordion title="config スキーマ内のすべての dangerous*/dangerously* キー">
    Control UI とブラウザー:

    * `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback`
    * `gateway.controlUi.dangerouslyDisableDeviceAuth`
    * `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`

    チャンネル名のマッチング（バンドル済みおよび Plugin チャンネル。該当する場合は `accounts.<accountId>` ごとにも適用）:

    * `channels.discord.dangerouslyAllowNameMatching`
    * `channels.googlechat.dangerouslyAllowNameMatching`
    * `channels.msteams.dangerouslyAllowNameMatching`
    * `channels.slack.dangerouslyAllowNameMatching`
    * `channels.irc.dangerouslyAllowNameMatching`（Plugin チャンネル）
    * `channels.mattermost.dangerouslyAllowNameMatching`（Plugin チャンネル）
    * `channels.synology-chat.dangerouslyAllowNameMatching`（Plugin チャンネル）
    * `channels.synology-chat.dangerouslyAllowInheritedWebhookPath`（Plugin チャンネル）
    * `channels.zalouser.dangerouslyAllowNameMatching`（Plugin チャンネル）

    ネットワーク公開:

    * `channels.telegram.network.dangerouslyAllowPrivateNetwork`（アカウントごとにも適用）

    サンドボックス Docker（デフォルト + エージェントごと）:

    * `agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargets`
    * `agents.defaults.sandbox.docker.dangerouslyAllowExternalBindSources`
    * `agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin`
  </Accordion>
</AccordionGroup>

## デプロイとホストの信頼

* Gateway ホストではフルディスク暗号化を使用してください。ホストが共有される場合は、Gateway 用の専用 OS ユーザーアカウントを推奨します。
* 公開パッケージの依存関係ロック: ソースチェックアウトでは `pnpm-lock.yaml` を使用します。公開済みの `openclaw` npm パッケージと OpenClaw 所有の npm Plugin パッケージには `npm-shrinkwrap.json` が含まれるため、インストール時に新しい依存関係グラフを解決するのではなく、リリースでレビュー済みの推移的依存関係グラフが使用されます。これはサプライチェーン強化とリリース再現性の境界であり、サンドボックスではありません。[npm shrinkwrap](/ja-JP/gateway/security/shrinkwrap) を参照してください。
* 安全なファイル操作: OpenClaw はルート境界付きファイルアクセス、アトミック書き込み、アーカイブ展開、一時ワークスペース、シークレットファイルヘルパーに `@openclaw/fs-safe` を使用します。オプションの POSIX Python ヘルパーはデフォルトで**無効**です。追加の fd 相対ミューテーション強化が必要で、Python ランタイムをサポートできる場合にのみ、`OPENCLAW_FS_SAFE_PYTHON_MODE=auto` または `require` を設定してください。詳細: [安全なファイル操作](/ja-JP/gateway/security/secure-file-operations)。
* 共有 Slack ワークスペースのリスク: Slack 内の全員がボットにメッセージできる場合、主要なリスクは委任されたツール権限です。許可された送信者は誰でも、エージェントのポリシー内でツール呼び出し（`exec`、ブラウザー、ネットワーク/ファイルツール）を誘導できます。ある送信者からのプロンプト/コンテンツインジェクションが共有状態/デバイス/出力に影響する可能性があります。また、共有エージェントが機密の認証情報/ファイルを持っている場合、許可された送信者は誰でもツール使用を通じて流出を引き起こせる可能性があります。チームワークフローには、最小限のツールを持つ別個のエージェント/Gateway を使用してください。個人データを扱うエージェントは非公開に保ってください。
* 会社共有エージェント（許容されるパターン）: エージェントを使用する全員が同じ信頼境界内（たとえば 1 つの会社チーム）にいて、エージェントが厳密に業務スコープに限定されている場合は問題ありません。専用のマシン/VM/コンテナ上で実行し、専用 OS ユーザー + 専用ブラウザー/プロファイル/アカウントを使用してください。そのランタイムを個人の Apple/Google アカウントや個人のパスワードマネージャー/ブラウザープロファイルにサインインさせないでください。同じランタイム上で個人 ID と会社 ID を混在させると、分離が失われ、個人データの露出リスクが高まります。

## ディスク上のシークレット

`~/.openclaw/`（または `$OPENCLAW_STATE_DIR/`）配下のものは、すべてシークレットまたはプライベートデータを含む可能性があると想定してください。

| パス                                          | 内容                                                                                                                                                                                                                                                                       |
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `openclaw.json`                             | 設定にはトークン（Gateway、リモート Gateway）、プロバイダー設定、許可リストが含まれる場合があります。                                                                                                                                                                                                               |
| `credentials/**`                            | チャンネル認証情報（たとえば WhatsApp 認証情報）、ペアリング許可リスト、レガシー OAuth インポート。                                                                                                                                                                                                               |
| `agents/<agentId>/agent/auth-profiles.json` | API キー、トークンプロファイル、OAuth トークン、任意の `keyRef`/`tokenRef`。                                                                                                                                                                                                                    |
| `agents/<agentId>/agent/codex-home/**`      | エージェントごとの Codex アプリサーバーアカウント、設定、skills、plugins、ネイティブスレッド状態、診断（デフォルト）。                                                                                                                                                                                                    |
| `$CODEX_HOME/**` または `~/.codex/**`          | `plugins.entries.codex.config.appServer.homeScope` が `"user"` の場合のみ、オプトインの共有 Codex ランタイム状態。ネイティブ Codex アカウント、設定、plugins、スレッドストアを使用します。所有者が管理するローカル Gateway の場合にのみ有効にしてください。[Codex ハーネス](/ja-JP/plugins/codex-harness#share-threads-with-codex-desktop-and-cli)を参照してください。 |
| `secrets.json`（任意）                          | `file` SecretRef プロバイダー（`secrets.providers`）で使用されるファイルベースのシークレットペイロード。                                                                                                                                                                                                   |
| `agents/<agentId>/agent/auth.json`          | レガシー互換ファイル。静的な `api_key` エントリは検出時にスクラブされます。                                                                                                                                                                                                                              |
| `agents/<agentId>/sessions/**`              | プライベートメッセージやツール出力を含む可能性があるセッショントランスクリプト（`*.jsonl`）とルーティングメタデータ（`sessions.json`）。                                                                                                                                                                                         |
| バンドルされた plugin パッケージ                        | インストール済み plugins（およびそれらの `node_modules/`）。                                                                                                                                                                                                                               |
| `sandboxes/**`                              | ツールサンドボックスのワークスペース。サンドボックス内で読み書きされたファイルのコピーが蓄積される場合があります。                                                                                                                                                                                                                |

### 認証情報ストレージマップ

バックアップ判断にも役立ちます。

* WhatsApp: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
* Telegram ボットトークン: 設定/env または `channels.telegram.tokenFile`（通常ファイルのみ。シンボリックリンクは拒否されます）
* Discord ボットトークン: 設定/env または SecretRef（env/file/exec プロバイダー）
* Slack トークン: 設定/env（`channels.slack.*`）
* ペアリング許可リスト: `~/.openclaw/credentials/<channel>-allowFrom.json`（デフォルトアカウント）/ `<channel>-<accountId>-allowFrom.json`（非デフォルトアカウント）
* モデル認証プロファイル: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`
* レガシー OAuth インポート: `~/.openclaw/credentials/oauth.json`

ハードニング: 権限を厳格に保ってください（ディレクトリは `700`、ファイルは `600`）。Gateway ホストではフルディスク暗号化を使用してください。ホストを共有する場合は専用の OS ユーザーアカウントを推奨します。

### ファイル権限

* `~/.openclaw/openclaw.json`: `600`（ユーザーの読み書きのみ）
* `~/.openclaw`: `700`（ユーザーのみ）

`openclaw doctor` はこれらについて警告し、権限の強化を提案できます。

### ワークスペース `.env` ファイル

OpenClaw はエージェントとツール用にワークスペースローカルの `.env` ファイルを読み込みますが、Gateway ランタイム制御を黙って上書きすることは決して許可しません。

* プロバイダー認証情報の環境変数は、信頼されていないワークスペース `.env` ファイルからはブロックされます。たとえば `GEMINI_API_KEY`、`GOOGLE_API_KEY`、`XAI_API_KEY`、`MISTRAL_API_KEY`、`GROQ_API_KEY`、`DEEPSEEK_API_KEY`、`PERPLEXITY_API_KEY`、`BRAVE_API_KEY`、`TAVILY_API_KEY`、`EXA_API_KEY`、`FIRECRAWL_API_KEY`、およびインストール済みの信頼済み plugins が宣言するプロバイダー認証キーです。代わりに、プロバイダー認証情報は Gateway プロセス環境、`~/.openclaw/.env`（`$OPENCLAW_STATE_DIR/.env`）、設定の `env` ブロック、または任意のログインシェルインポートに置いてください。
* `OPENCLAW_` で始まるすべてのキーは、信頼されていないワークスペース `.env` ファイルからブロックされます。ランタイム名前空間全体を予約することで、将来の `OPENCLAW_*` 制御が、チェックイン済みまたは攻撃者が提供した `.env` 内容から黙って継承されるのではなく、デフォルトでフェイルクローズになります。
* Matrix、Mattermost、IRC、Synology Chat のチャンネルエンドポイント設定も、ワークスペース `.env` による上書きからブロックされます（たとえば `MATRIX_HOMESERVER`、`MATTERMOST_URL`、`IRC_HOST`、`SYNOLOGY_CHAT_INCOMING_URL`）。そのため、クローンされたワークスペースがバンドル済みコネクタのトラフィックをローカルエンドポイント設定経由でリダイレクトすることはできません。これらは Gateway プロセス環境または `env.shellEnv` から取得する必要があります。
* 信頼済みのプロセス/OS 環境変数、グローバルランタイム dotenv、設定 `env`、有効化されたログインシェルインポートは引き続き適用されます。これはワークスペース `.env` ファイルの読み込みだけを制約します。

ワークスペース `.env` ファイルはエージェントコードの隣に置かれることが多く、誤ってコミットされたり、ツールによって書き込まれたりします。プロバイダー認証情報をブロックすることで、クローンされたワークスペースが攻撃者管理のプロバイダーアカウントに差し替えることを防ぎます。

### ログとトランスクリプト

OpenClaw はセッション継続性と任意のメモリインデックス作成のため、セッショントランスクリプトを `~/.openclaw/agents/<agentId>/sessions/*.jsonl` 配下のディスクに保存します。ファイルシステムアクセスを持つすべてのプロセス/ユーザーが読み取れます。ディスクアクセスを信頼境界として扱い、`~/.openclaw` 権限をロックダウンしてください。より強い分離には、エージェントを別々の OS ユーザーまたはホストで実行してください。

Gateway ログにはツール要約、エラー、URL が含まれる場合があります。セッショントランスクリプトには貼り付けられたシークレット、ファイル内容、コマンド出力、リンクが含まれる場合があります。

* ログ/トランスクリプトのリダクションを有効のままにしてください（`logging.redactSensitive: "tools"`、デフォルト）。
* `logging.redactPatterns` を使って環境向けのカスタムパターンを追加してください（トークン、ホスト名、内部 URL）。
* 診断情報を共有する場合は、生ログよりも `openclaw status --all`（貼り付け可能、シークレットはリダクション済み）を推奨します。
* 長期保持が不要な場合は、古いセッショントランスクリプトとログファイルを削除してください。

詳細: [ロギング](/ja-JP/gateway/logging)

## セキュアベースライン（コピー/貼り付け）

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  gateway: {
    mode: "local",
    bind: "loopback",
    port: 18789,
    auth: { mode: "token", token: "your-long-random-token" },
  },
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } },
    },
  },
}
```

Gateway を非公開に保ち、DM ペアリングを必須にし、常時稼働のグループボットを避けます。ツール実行もより安全にするには、非所有者エージェントに対してサンドボックスを追加し、危険なツールを拒否してください（上記の「エージェントごとのアクセスプロファイル」を参照）。

### 別の番号（WhatsApp、Signal、Telegram）

電話番号ベースのチャンネルでは、個人用とは別の番号でアシスタントを実行することを検討してください。そうすれば個人的な会話はプライベートに保たれ、ボット番号は独自の境界で自動化を処理できます。

## インシデント対応

### 封じ込め

1. 停止する: macOS アプリ（Gateway を監督している場合）を停止するか、`openclaw gateway` プロセスを終了します。
2. 露出を閉じる: 何が起きたか理解するまで、`gateway.bind: "loopback"` を設定します（または Tailscale Funnel/Serve を無効にします）。
3. アクセスを凍結する: リスクの高い DM/グループを `dmPolicy: "disabled"` に切り替えるかメンション必須にし、`"*"` の許可全体エントリを削除します。

### ローテーション（シークレットが漏えいした場合は侵害を想定）

1. Gateway 認証（`gateway.auth.token` / `OPENCLAW_GATEWAY_PASSWORD`）をローテーションして再起動します。
2. Gateway を呼び出せるすべてのマシンで、リモートクライアントシークレット（`gateway.remote.token` / `.password`）をローテーションします。
3. プロバイダー/API 認証情報（WhatsApp 認証情報、Slack/Discord トークン、`auth-profiles.json` 内のモデル/API キー、および使用時の暗号化済みシークレットペイロード値）をローテーションします。

### 監査

1. Gateway ログを確認します: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`（または `logging.file`）。
2. 関連するトランスクリプトを確認します: `~/.openclaw/agents/<agentId>/sessions/*.jsonl`。
3. アクセスを広げた可能性のある最近の設定変更を確認します: `gateway.bind`、`gateway.auth`、DM/グループポリシー、`tools.elevated`、plugin の変更。
4. `openclaw security audit --deep` を再実行し、重大な指摘が解決されていることを確認します。

### レポート用に収集

* タイムスタンプ、Gateway ホスト OS + OpenClaw バージョン。
* セッショントランスクリプト + 短いログ末尾（リダクション後）。
* 攻撃者が送信した内容とエージェントが行ったこと。
* Gateway が loopback を超えて公開されていたかどうか（LAN/Tailscale Funnel/Serve）。

## シークレットスキャン

CI はリポジトリ全体に対して pre-commit の `detect-private-key` フックを実行します。失敗した場合は、コミットされた鍵素材を削除またはローテーションしてから、ローカルで再現してください。

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pre-commit run --all-files detect-private-key
```

## セキュリティ問題の報告

OpenClaw に脆弱性を見つけましたか？責任ある方法で報告してください。

1. メール: [security@openclaw.ai](mailto:security@openclaw.ai)
2. 修正されるまで公開しないでください。
3. 希望しない場合を除き、クレジットを記載します。
