「readme.txt」の内容を表示するだけでも安全とは限りません。

2026/04/18 3:43

「readme.txt」の内容を表示するだけでも安全とは限りません。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

iTerm2 の SSH 統合機能に重大なセキュリティ上の欠陥が存在し、攻撃者は偽装されたファイルを読み込ませることで、SSH コンダクターのワークフローを模倣し、局所上で恣意的なコードを実行できるようにしている。この脆弱性は、iTerm2 が不正な

DCS 2000p
フックおよび
OSC
シーケンス(例:有効な返信を模倣したもの)を受信する際、正当なリモートコンダクターセッションから発信されたかのように無批判に受け付けることに起因している。これらの偽装メッセージ内の
sshargs
値を操作することにより、攻撃者はパス解決を制御し、ベース64符号化されたペイロードの最終 128 バイトチャンクに埋め込まれた偽装された相対パス名を通じてローカルの実行可能ファイルへのポインタを指させることができる。これにより、iTerm2 はリモート実行意図の入力を局所コマンドとして扱い、標準的なセッション機能を外部サーバーへのアクセスが必要ない直接的な攻撃ベクターへと変質させてしまう。発見後まもなくパッチが策定されコミットされたものの、現在の安定版を使用しているユーザーは修正がリリースされるまで脆弱にさらされており、安全なリモート操作と危険な局所操作を区別するにおける深刻な信頼の欠如を浮き彫りにしている。

本文

先日の Vim および Emacs の AI によるバグ発見に関する投稿では、一見無害なワークフローが、予期せぬコード実行行為へと至る境界線如何に焦点を当てていました。今回もその考えを一層深化させ、「readme.txt を cat コマンドで表示すること」自体が安全なのかどうかを検証します。驚くべきことに、 iTerm2 を使用している場合、この操作は決して安全ではありません。一見すると非合理的に見えるこの脆弱性は、 iTerm2 が正当な機能として何を目指しており、 PTY(擬似終端)をどのように利用しているか、そして終端エミュレータからの出力が、その機能のプロトコルの一端を不正に模倣できるようになった場合に何が起きるかを理解すれば明らかになります。本プロジェクトにおいて OpenAI と協力してくださったことへの謝意を表したいと考えています。

iTerm2 は SSH 統合機能を搭載しており、これによりリモートセッションに対するより深い理解が可能となっています。この機能を実現するためには、リモートシェルに対して命令を盲目的に打ち出すだけでは不十分であり、代わりにリモート側で tiny helper スクリプト「conductor」を展開してブートストラップ(初期化)を行います。

大まかなモデルは以下の通りです:

  • iTerm2 は通常、 it2ssh を通じて SSH 統合を起動します。
  • iTerm2 は既存の SSH セッションを通じて、リモート側のブートストラップスクリプトである「conductor」を送信します。
  • そのリモートスクリプトが iTerm2 に対するプロトコル対話者(peer)となります。
  • iTerm2 とリモートの conductor は、端末エスケープシーケンスをやり取りし、ログインシェルを検知したり、Python の有無を確認したり、ディレクトリを変更したり、ファイルをアップロードしたり、コマンドを実行したりといった作業を調整します。

重要な点は、別個のネットワークサービスが存在しないということです。conductor は単にリモートシェルセッション内で実行されているスクリプトであり、プロトコルは通常の端末入出力(I/O)を通じて運搬されます。

かつて終端(ターミナル)は、キーボードと画面をマシンに接続した真のハードウェアデバイスでした。プログラムはそのデバイスから入力を読み取り、結果として出力をそのデバイスに書き戻しました。 iTerm2 のような終端エミュレータは、このハードウェア終端の近代ソフトウェア版です。画面を描画し、キーボード入力を受容するとともに、端末制御シーケンスを解釈します。しかし、シェルやその他のコマンドラインプログラムは、まだ真の終端デバイスのように見えるものと対話することを期待しています。そのため、OS は PTY(擬似終端)を提供します。PTY は古いハードウェア終端に対するソフトウェア的な代替物であり、終端エミュレータと最前列のプロセスの間を挟んでいます。

通常の SSH セッションでは:

  • iTerm2 は PTY へバイト列を書き込みます
  • 最前列のプロセスは ssh です
  • ssh はそれらのバイト列をリモートマシンへ転送します
  • リモートの conductor はその stdin からそれらを読み取ります

したがって、 iTerm2 が「コマンドをリモートの conductor に送信したい」と考え、ローカルで実行する実際の動作は、PTY へバイト列を書き込むことです。

SSH 統合プロトコルは端末エスケープシーケンスを転送層(transport)として利用します。ここで重要なのは以下の二点です:

  • DCS 2000p は SSH conductor のフック(接続)に使用されます
  • OSC 135 はプレフレームされた conductor メッセージに使用されます

ソースコードレベルでは、DCS 2000p が iTerm2 で conductor パーサーの実装(インスタンス化)を促します。その後、パーサーは begin command output lines end runhook のような OSC 135 メッセージを受け取ります。つまり、正当なリモート conductor は完全に端末出力を通じて iTerm2 と通信することができます。

この脆弱性の根源には「信頼の欠如」があります。 iTerm2 は、実際には信頼できない(真の conductor セッションではない)ものから発信されていると判断される端末出力からも、SSH conductor プロトコルを受け付けてしまいます。言い換えると、信頼できない端末出力がリモート conductor を模倣できるのです。これは、悪意のあるファイル、サーバー応答、バナー(Banner)、あるいは MOTD が以下の内容を表示することを可能にします:

  • 偽造された DCS 2000p フック
  • 偽造された OSC 135 レプライ そして iTerm2 は、あたかも正規の SSH 統合エクスチェンジの最中にあるかのように振る舞い始めます。これが攻撃のプリミティブ(基本単位)です。

exploit ファイルには、偽物の conductor スクリプトトランスクリプトが含まれています。被害者が

cat readme.txt
を実行すると:

  • iTerm2 はファイルをレンダリングしますが、そのファイルは単なるテキストではありません。それは、conductor セッションを宣言する偽の DCS 2000p 行と、 iTerm2 のリクエストに対する答えとなる偽の OSC 135 メッセージを含んでいます。 フックが受け入れられると、 iTerm2 は通常の conductor ワークフローを開始します。アップストリームのソースコードでは、
    Conductor.start()
    が即時に
    getshell()
    を送信し、それが成功すると
    pythonversion()
    を送信します。したがって、exploit はこれらのリクエストを注入する必要はありません。 iTerm2 がそれら自体を発行するだけで、悪意のある出力は返信を模倣すればよいのです。

偽の OSC 135 メッセージは最小限でありながら精密です。これらは以下のことを実行します:

  • getshell のコマンドボディを開始する
  • シェル検知出力のように見える行を返す
  • そのコマンドを成功として終了させる
  • pythonversion のコマンドボディを開始する
  • そのコマンドを失敗として終了させる
  • アンフック(フック解除)を行う

これだけで、 iTerm2 を通常のフォールバックパスへと導くのに十分です。その時点で、 iTerm2 は SSH 統合ワークフローを十分に完了し、次のステップである

run(...)
コマンドの構築と送信に移ると信じています。

偽造された DCS 2000p フックには、いくつかのフィールドが含まれており、その中には攻撃者制御可能な sshargs が含まれます。この値は重要であり、 iTerm2 は後で conductor の

run ...
リクエストを構築する際にそれをコマンド資料(材料)として利用するからです。exploit は sshargs を選択しており、 iTerm2 が
run <padding><magic-bytes>
を base64 符号化した場合の最後の 128 バイトチャンクが「ace/c+aliFIo」になるようにしています。

この文字列は恣意的なものではありません。以下のようにして選ばれています:

  • conductor エンコーディングパスからの有効な出力であること
  • 有効な相対パスマイン(パス名)であること

正当な SSH 統合セッションでは、 iTerm2 は base64 符号化された conductor コマンドを PTY に書き込み、 ssh がそれらをリモート conductor へ転送します。しかし exploita のケースでは、 iTerm2 もまだそれらのコマンドを PTY に書き込みますが、真の SSH conductor はいません。ローカルのシェルはそれらを単なる入力として受け取ります。

そのために、セッションは録画するとこのような外観になります:

  • getshell は base64 として表示される
  • pythonversion も base64 として表示される
  • その後、長い base64 符号化された run ... ペイロードが表示される
  • 最後のチャンクは「ace/c+aliFIo」である

前のチャンクは無意味なコマンドとして失敗しますが、最後のチャンクは、そのパスがローカルに存在し実行可能であれば動作します。

元のファイルベースの PoC は genpoc.py を使って再現できます:

  • これにより、「ace/c+aliFIo」という実行可能なヘルパースクリプトを作成します
  • readme.txt は、悪意のある DCS 2000p および OSC 135 シーケンスを含むファイルです 前者は iTerm2 を偽の conductor と対話させる欺くために機能し、後者は最後のチャンクが届いた際、シェルに真正な実行対象を提供します。

この exploit が動作するためには、「ace/c+aliFIo」を含むディレクトリ内から

cat readme.txt
を実行する必要があります。これにより、攻撃者によって形成された最後のチャンクが、実際に存在する実行可能パスへと解決されます。

3 月 30 日:当方は iTerm2 に対してこのバグを報告しました。 3 月 31 日:該バグはコミット a9e745993c2e2cbb30b884a16617cd5495899f86 で修正されました。執筆時点では、その修正はまだ安定版リリースに含まれていませんでした。

パッチコミットが適用された際、当方はパッチ単独を使用して exploit をゼロから再構築を試みました。それを用いるためのプロンプトは prompts.md に記載されており、得られる exploit は genpoc2.py です。これは genpoc.py と非常に類似した仕組みを持っています。

本投稿へのコメント さらに興味深く議論したいですか?

同じ日のほかのニュース

一覧に戻る →

2026/04/18 0:04

クロード・デザイン

## Japanese Translation: Anthropic は今日、研究プレビュー段階で一般公開された新しい AI ツール「Claude Design」を発表しました。このツールは、進化した Claude Opus 4.7 vision モデルを基盤としており、テキストやドキュメントを瞬時に視覚デザインに変換する機能を備えています。以前では 20 つ以上のプロンプトが必要だった作業フローをわずか 2 ステップへと大幅に簡素化することで、プロトタイプ制作を容易にします。ユーザーはテキストで要件を記述するか、DOCX、PPTX、XLSX ファイルをアップロードし、Claude が最初の視覚版を作成して改善の余地を残します。オンボーディング時に既存のコードベースに直接統合され、チーム向けデザインシステムを自動的に構築するほか、デザインファイルを读取して共有標準を策定します。 本ツールにはカスタムスライダーやインラインコメントなど、精密な微調整制御に加え、組織範囲での共有機能、プライベートリンク、編集アクセス権、グループチャットといった新たなコラボレーション機能も提供されます。デザインは Canva への完全編集可能なファイルとしての直接エクスポートが可能で、あるいは PDF、PPTX、HTML、社内 URL へも代替的にエクスポートできます。バンドルは Claude Code のための直接実装用としても保存されます。これは、現実的なインタラクティブプロトタイプやワイヤーフレームからピッチデッキ、マーケティング素材、3D 要素など先端デザインに至るまでの用途をカバーします。 現在、claude.ai/design で利用可能です。本サービスは現在の研究プレビュー段階ですが、一日中急速に拡大しており、Pro、Max、Team、Enterprise サブスクリプションのすべてで利用可能になっています。特に、Enterprise ユーザーではデフォルトで機能がオフになっているものの、管理者が Organization 設定からこれを有効にすることで、アクセス管理を好みに合わせて行うことができます。この進歩により、コードを書かずに複雑な素材を作成することが可能となり、デザインサイクルが加速するとともに、ワイヤーフレームからプロダクションまでの移行プロセスにおいてクリエイティブワークフローと開発者ツールを統合することで、そのプロセスが合理化されます。

2026/04/18 6:38

FIL-C の簡略化モデル

## Japanese Translation: Fil-C は、既存の不安全な C/C++ コードベースをメモリ安全性を備えた実装に改修することを目的とした革命的ツールであり、手動による書き換えを必要としません。それは、簡略化されたモデルではソースコード、または生産環境版では LLVM IR を自動的に変換することで達成され、各関数内のポインターにメタデータレコード(`AllocationRecord*` 変数)を付与します。これらのレコードは、可視データ、境界アラインメント用の非公開バイト、および長さ情報を追跡し、参照解除やポインター算術といった標準的な操作を自動的に境界チェックを備えた操作へと書き換えることを可能にします。 このシステムは、標準ライブラリ呼び出しを Fil-C 版(例:`filc_malloc`)で置き換えにより配列を明示的に処理し、かつ廃棄された非公開メタデータオブジェクトの解放にはガバージコレータが担当するというハイブリッドアプローチによってメモリライフサイクルを管理します。これは `AllocationRecord` インスタンス自体が直接子配列を解放しないためです。スタック操作によるエラーを防ぎつつ安全性を保証するため、ローカルスコープからアドレスが流出する変数は自動的にヒープ割り当てに昇進されます。 未確認のレガシーコードベースに対する安全な橋渡しとしての位置づけを持つ Fil-C は、 unsafe ポインター交換を関数呼び出しを超えて防止するというユニークなポインター所有性の性質を持ち、積極的な最適化および並行型ガバージコレータを通じて典型的なメモリ安全性ペナルティを軽減します。最終的に、AddressSanitizer による強力なコンパイル時の安全性保証を提供すると同時に、産業界が既存の大規模コードベースを安全にし、Zig などにおける安全なコンパイル時評価を活用することを可能にします。

2026/04/18 3:17

『全ての 12 人の月面歩行者は、火薬のような匂いのする塵から「月じんかぜ」に苦しんだ(2018 年)』

## 日本語訳: 月面の塵は宇宙探査にとって二重の現実をもたらします:それはアストロノーツにとって即座に命を脅かす危険であると同時に、将来的な植民地にとっては貴重な資源でもあります。主な危険性は、その独自の物理的特性に由来します。やわらかい地球の塵とは異なり、月面の粒子は鋭く研摩性のあるケイ酸塩粒であり、太陽放射と大気による侵食の欠如のため静電的に帯電したままです。これらの小さな棘状の粒子(人間の髪の毛の約 50 倍小さいもの)は、地球重力の 1/6 の環境でも数ヶ月間浮遊し、表面より高く漂浮しながら装備に侵入し、さらに人間肺の奥深くまで到達します。史上 12 人の月面を歩いた宇宙飛行士すべて(其中包括アポロ 17 号のハリーソン・シミュット)によって記録されているように、露出は「月の枯草熱」と呼ばれる症状——喉の痛み、涙目、くしゃみ、鼻閉塞(時に数日続くものも含まれる)——および肺細胞や脳細胞に損傷をもたらす可能性のある長期的毒性を引き起こしました。また、この塵は宇宙船内部で独特な火薬のような燃えた臭いを放ちます。 これらのリスクを安全に研究するために、研究者らはドイツで粉砕された丸みを帯びた火山岩シミュラントを使用して、鋭く有毒な月面粒子への曝露なしに機器故障をモデル化しています。カリフォルニア大学の NASA アストロノート・キム・プリスクを含む 12 人の科学者による野心的なプログラムで、月面塵の毒性リスクが推定されています。生物学者のエリン・トランフィールドは、火山岩を粉砕することで鋭い縁を取り除き、より安全なシミュレーションが可能になると指摘しています。科学顧問のアイドアン・カウリーは有望な応用として、月面土壌を加熱して居住用のレンガを生産したり、レゴリットから酸素を抽出して有人ミッションを維持したりすることを挙げています。同時に、ESA アストロノート・アレクサンダー・ゲーストは減重力下での肺の健康を追跡するための「気道モニタリング」実験を行い、将来の持続可能な月面帰還を支えています。並行して、ESA はオランダのエウレカ研究所内で月面資源に関するワークショップを開催し、これらの機会への研究を推進するとともに、この独自の環境がもたらす重大な健康リスクを軽減することを目指しています。