Skip to content

[security][tools] OS の隔離の中から制御端末へ TIOCSTI で入力を注入でき、/dev/pts の他の端末へ書ける #667

Closed

Description

@Kewton

背景

#656(PR #666)の merge 前レビュー H-27(2026-10-13)で見つかった後続の論点です(F1・F2)。#656 による後退ではなく、macOS の 1a(#655)と共通の形です。
関連:#502、#656、#657

問題

  • F1(優先度高):OS の隔離の中のコマンドから、制御端末へ TIOCSTI でキー入力を注入できます。
    • H-27 の probe(Docker、kernel 7.0.14、--sandbox required、applied=true):/dev/tty に TIOCSTI をかけると成功し、注入した文字が pty の出力に実際に現れました。
    • 改行を注入すると、commandagent の終了後に利用者の shell が隔離の外でコマンドを実行します(bubblewrap の CVE-2017-5226 と同じ形)。
    • 前提:legacy_tiocsti=1 の kernel と、端末から起動した CLI。GUI の delegate(stdin が null)と CI には届きません。
  • F2:landlock の書き込みの許可に /dev/pts を directory ごと入れているため、同じ利用者の他の端末にも書き込めます(H-27 の probe P3)。

根拠(develop 2ab48952)

  • src/tools/os_sandbox/landlock.rs:47・:49:デバイスの許可に /dev/tty と /dev/pts
  • src/bounded_process.rs:523-527:子を process_group(0) で起動(制御端末は外していない)

対処の方向(H-27 の推奨。実装の前に確かめる)

  • 子の pre_exec で setsid() を呼び、制御端末を外す。process_group(0) の後では setsid が EPERM になるので、process_group(0) の代わりに使う。プロセスグループの終了処理(terminate_process_group*)が同じく働くことを確かめる。
  • /dev/pts の許可を外す、または自分の端末だけに絞る。
  • landlock の ABI 5 以上では、/dev/tty と /dev/pts に IoctlDev を許可しない。
  • macOS(Seatbelt)でも同じ形が成立するかを確かめ、成立するなら同じ Issue で閉じる。

受け入れ条件

  • 隔離の中から TIOCSTI で制御端末へ入力を注入できないことを、Linux(Docker で可)と macOS で試験で確かめた
  • 隔離の中から他の端末の /dev/pts/N へ書けないことを試験で確かめた
  • timeout・中断でのプロセスグループの終了の挙動が変わっていない(既存の試験が通る)
  • 対話の必要なコマンド(git の pager 等)の既存の挙動が壊れていないことを確かめ、変わる点は文書に書いた
  • 字句検査、検証・受入・証跡のゲートを緩めていない。成長上限の baseline を上げていない

対象ファイル

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

参照

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

Activity

  1. added 2 commits that reference this issue on Oct 14, 2026
  2. Kewton commented on Oct 14, 2026

    @Kewton
    OwnerAuthor

    PR #674 で対応し、develop へ merge しました(merge commit 739c441)。develop の CI・acceptance・Next.js domain oracles は success(runs 38590902725・38590902785・38590902849)。

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