Skip to content

[security][tools] OS の隔離の許可と記録の食い違い(外を指すキャッシュの symlink、降格の event、Linux の reason、展開の上限) #668

Open

Description

@Kewton

背景

#656(PR #666)・#657 の merge 前レビュー H-27・H-28(2026-10-13)で見つかった後続の論点のうち、隔離の許可と記録の食い違いをまとめます。どれも blocker ではありませんでした。
関連:#502、#656、#657

問題

  • F3(優先度中):~/.npm などの既知のキャッシュが外を指す symlink のとき、その指す先が書き込みの許可になります(H-27 の probe P4:$HOME/.npm を外の fixture に向けると、外に書けた)。隔離の中のモデルは $HOME に link を作れないので、届くのは利用者自身の設定か、隔離なしの過去の run が残した link だけです。
  • F4(優先度低):auto で wrap が失敗して字句検査だけに降格したことが、event に出ません。bash_sandbox_status は run の開始時に 1 回出すだけです。
  • Linux で読み取りの隔離が効いているとき、reason が None:macOS は「適用済み」の文を出します。[security][tools] Bash と検証コマンドの、home の秘密の場所の読み取りを OS の隔離で拒否する(第 2 段:読み取り隔離) #657 の受け入れ条件「reason に適用・未適用を出す」は macOS と未適用の文で満たしたとみなしましたが、両 OS で揃えます(書き込みの試験の期待の変更を伴います)。
  • 展開の規則の数:Linux は拒否リストを許可リストへ展開するので、規則の数が home の兄弟の数に比例します。今の大きさでは問題ありませんが、上限を超えたら「not effective」と記録する防御を検討します。

根拠(develop 2ab48952。#657 の merge 後に読み直す)

  • src/tools/os_sandbox/landlock.rs:288-315:キャッシュの許可(canonicalize した先が $HOME の下かを見ていない)
  • src/lib.rs:953:bash_sandbox_status の event(run の開始時だけ)
  • src/tools/os_sandbox.rs:mark_backend_unavailable(降格)

対処の方向

  • キャッシュは、canonicalize した結果が $HOME(または既定の場所)の下にあるときだけ許可する。外を指すときは許可せず、記録に残す。
  • 降格の時点で bash_sandbox_status を出し直す(event の名前と既存の field は変えない)。
  • Linux で効いているときも、macOS と同じ形の「適用済み」の文を reason に出す。
  • 展開の規則の数に上限を置き、超えたら「not effective」と記録する。

受け入れ条件

  • 外を指すキャッシュの symlink から外へ書けないことを試験で確かめた(Linux は Docker で可、macOS も)
  • 降格が event に出ることを試験で確かめた。event の名前と既存の field は変えていない
  • Linux と macOS の reason の文が揃った
  • 展開の上限を超えたとき「適用」と記録しないことを試験で確かめた
  • 字句検査、検証・受入・証跡のゲートを緩めていない。成長上限の baseline を上げていない

対象ファイル

  • src/tools/os_sandbox.rs
  • src/tools/os_sandbox/landlock.rs
  • src/tools/os_sandbox/seatbelt.rs
  • tests/issue502_os_sandbox_write.rs
  • tests/issue502_os_sandbox_read.rs
  • SECURITY.md

参照

  • H-27・H-28 のレビュー記録(ローカル):workspace/tmp/1007/wave1/results/H-27/report.md、results/H-28/report.md

Activity

  1. Kewton commented on Oct 13, 2026

    @Kewton
    OwnerAuthor

    #658(PR #671)の追記:--offline で外向きの通信が OS により遮断されているときも、reason はネットワークに触れません(macOS は read isolation applied だけ、Linux の ABI4 以上は None)。この Issue の reason の文を揃える作業で、「network confined (loopback only)」(macOS)・「network confined (ports N; UDP not restricted)」(Linux)のような節も合わせて足すことを推奨します(H-29)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions