Skip to content

[security][tools] --offline のネットワーク隔離の残り:help と doctor の文、MPTCP、Linux の pip のキャッシュ、port 不明時の文書、Linux の stdin の試験 #672

Closed

Description

@Kewton

背景

#658(PR #671)の merge 前レビュー H-29・H-30 と、リーダーの検証(L-42・L-44、2026-10-13)で見つかった後続の論点のうち、--offline のネットワークの隔離に関わる小さな残りをまとめます。どれも blocker ではありませんでした。
関連:#502、#658、#668(reason の文)、#669(private registry)

問題

  1. CLI の --offline の help と doctor の文が古い:[security][tools] --offline の外向きの通信を OS の隔離で遮断し、runtime の依存の導入を隔離の中で動かす(第 3 段) #658 で、隔離が使えるときは OS が外向きの通信を遮断するようになりましたが、help は今も「Provider/API requests and other network-capable commands are unaffected」と書いています。この文は試験で固定されています。
  2. Linux の MPTCP が未確認:IPPROTO_MPTCP の socket が landlock の ConnectTcp の対象かを、H-29 の Docker(linuxkit kernel、MPTCP 非対応)では確かめられませんでした。
  3. Linux の pip のキャッシュ:macOS は ~/Library/Caches/pip を書き込みの許可に入れますが、Linux の ~/.cache/pip は許可に入っておらず、隔離の中の pip はキャッシュなしで動きます(成功はします)。
  4. port が取れないときの文が cli-reference に無い:dev server の port が goal からも profile からも取れないとき、Linux の --offline は localhost を含めてすべての TCP connect を拒否します。SECURITY.md には書きましたが、cli-reference(en・ja)には書いていません。
  5. 依存の導入の stdin の試験が macOS だけ:Linux は in-place の wrap なので今も正しいですが、退行を捕まえる試験はありません。

根拠(develop 72807847)

  • src/tools/offline_policy.rs:1:CLI_HELP
  • src/cli.rs:711:help の文を固定する試験
  • docs/guide/en/cli-reference.md:81:--offline の表の行
  • src/tools/os_sandbox.rs:778-788:resolve_cache_paths(pip は macOS のパス)

対処の方向

  • help・doctor・cli-reference の --offline の文を「OS が遮断するもの(隔離が使えるとき)」と「字句検査だけのもの」に分けて書き直し、固定している試験を新しい文に合わせる(緩めない)。
  • CI(Ubuntu x86_64、MPTCP が既定で有効)で MPTCP の connect を 1 回 probe し、拒否されなければ UDP と同じく文書の限界に足す。
  • Linux の pip のキャッシュを既知のキャッシュに足すか決める(決定 2「既知のキャッシュだけ許可」の範囲)。
  • cli-reference に port が取れないときの 1 文を足す。Linux の stdin の試験を足す。

受け入れ条件

  • help・doctor・cli-reference の --offline の文が実装と一致し、試験が新しい文を固定している
  • MPTCP の connect の結果を CI で確かめ、記録した(拒否されないなら文書の限界に書いた)
  • Linux の pip のキャッシュの扱いを決め、決定どおりに実装または文書化した
  • Linux の依存の導入の子の stdin が null であることを試験で確かめた
  • 字句検査、検証・受入・証跡のゲートを緩めていない。成長上限の baseline を上げていない

対象ファイル

  • src/tools/offline_policy.rs
  • src/cli.rs
  • src/doctor.rs
  • src/tools/os_sandbox.rs
  • src/tools/os_sandbox/landlock.rs
  • tests/issue502_os_sandbox_network.rs
  • SECURITY.md
  • docs/guide/ja/cli-reference.md
  • docs/guide/en/cli-reference.md

参照

  • H-29・H-30 と L-42・L-44 の記録(ローカル):workspace/tmp/1007/wave1/results/

Activity

  1. added a commit that references this issue on Oct 17, 2026
  2. Kewton commented on Oct 17, 2026

    @Kewton
    OwnerAuthor

    PR #692 で merge しました(merge commit 636a2d50、develop a2f27e4d で CI・acceptance・Next.js domain oracles すべて success)。

    1. help・doctor・cli-reference(en・ja)の --offline の文を「字句検査で常に拒否するもの」と「OS の backend が使えるときに OS が拒否するもの」に分けて書き直し、固定する試験を新しい文の完全一致にしました。Linux は Landlock ABI4 以上のときだけネットワークを閉じることも明記しました。
    2. MPTCP:Linux の試験で 1 回 connect して verdict を残します。この PR の CI では issue672/mptcp: ALLOWED; kernel=6.17.0-1022-azure abi=7 net.mptcp.enabled=1 でした。MPTCP の connect が Landlock の TCP の規則で止まらない kernel がある、という限界を SECURITY.md と cli-reference に書きました。
    3. Linux の pip のキャッシュ:決定は「既知のキャッシュに足す」(macOS と対称)。develop で既に ~/.cache/pip が入っていたので実装は変えず、外を指す symlink(親の ~/.cache を含む)から外へ書けないことの試験を足しました。
    4. port が取れないとき、Linux の --offline は localhost を含めて TCP connect を拒否することを cli-reference(en・ja)に書きました。
    5. Linux の依存の導入の子の stdin が null であることの試験を足しました。

    レビュー:R-69a で blocker 1(ABI1〜3 ではネットワークが閉じないことが文に無い)→ 修正 → R-69a2 で blocker 0。

    後続の論点(non-blocker):check-probe-verdicts.sh が verdict の行の欠落を検出しない点、MPTCP の probe に plain TCP の陽性対照が無い点、Linux でも resolve_cache_paths が macOS のパスを返す点(home の中だけ)。

    🤖 Generated with Claude Code

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