Multiple CVEs in GNU Screen: Local Root Exploit and TTY Hijacking Discovered
2025/05/13 SecurityOnline — 広く使用されるターミナル・マルチプレクサ GNU Screen に存在する、複数の深刻な脆弱性が、SUSE セキュリティ・チームによる包括的なセキュリティ監査により明らかにされた。その中には、ローカル権限から root 権限への昇格を可能にする脆弱性も含まれるという。これらの脆弱性は、最新の Screen 5.0.0リリースと、広く導入されている Screen 4.9.x に影響を及ぼすが、ディストリビューションのコンフィグに応じて差異が生じるという。

GNU Screen は、多様な UNIX 系システムにおいて、ターミナル・セッション管理の基盤となるユーティリティであるだけに、発見されたリスクは重視されるべきである。特に、マルチ・ユーザー機能をサポートするために、setuid-root 権限で Screen がインストールされているプラットフォームでは、大きなリスクが生じるという。
SUSE のセキュリティ・レポートでは、ローカル root 権限のエクスプロイト/TTY ハイジャック/PTY パーミッション/ファイル存在テスト/競合状態などに関連する、複数の脆弱性について詳細に説明されている。
CVE-2025-23395:logfile_reopen() によるローカル root 権限
これらの脆弱性の中で最も深刻なものは、ローカル権限の昇格を可能にする欠陥である。 Screen 5.0.0 では、ユーザー定義のログ・ファイルを再オープンする際に、logfile_reopen() 関数が昇格された権限を破棄できないため、攻撃者は root 所有のファイルに対して、任意のデータを書き込む可能性を得る。
このレポートには、「権限のないユーザーであっても、root 所有権で任意の場所にファイルを作成できる。Screen PTY に書き込まれた全てのデータは、このファイルに記録される」と記されている。
この脆弱性は、ログファイルのリンク数を操作し、強制的に再オープンさせることで、オンデマンドでトリガーできるものである。Arch Linux および NetBSD で、この問題は確認されている。なお、これらのシステムでは、Screen は setuid-root でインストールされている。
CVE-2025-46802:競合状態による TTY ハイジャック
もう1つの深刻な脆弱性は、マルチ・ユーザー・セッションの再接続時に、Attach() 関数で競合状態が発生する欠陥である。この脆弱性が呼び出されると、Screen は端末デバイスのモードを一時的に 0666 に設定し、システム上の任意のプロセスから、ユーザーの TTY による Read/Write アクセスが可能になる。
SUSE は、「単純な Python スクリプトを使って、影響を受ける TTY を開くことができた。その確率は、 2~3回 に 1回である」と報告している。
元々は、セッション・デーモン間の通信を目的とする TTY だが、この chmod ベースのアプローチは、キーストローク傍受やコマンド・インジェクションといった、危険な状況を作り出す。
CVE-2025-46803: デフォルトで誰もが書き込める PTY
Screen 5.0.0 では、デフォルトの PTY モードが 0622 に変更され、誰もが書き込めるようになっている。それにより、Screen が管理する任意の PTY に対して、任意のユーザーが書き込み可能となり、TTY ハイジャックの脆弱性が再現され、デフォルトでの動作となった。
Arch Linux や NetBSD などのディストリビューションは、コンパイル時のコンフィグを明示的に上書きしない限り、その影響を受ける。
CVE-2025-46804:ファイル存在情報の漏洩
Screen の SCREENDIR 環境変数を悪用することで、root が所有するファイルの存在と種類が漏洩するという可能性が生じている。それにより、ディレクトリ/ファイルに加えて、アクセスが禁止されているファイルへのパスが明らかになる。
CVE-2025-46805:シグナル処理の競合状態
CVE-2023-24626 の修正は不完全であり、Screen のシグナル送信ロジックには、依然として競合状態が存在する。したがって、権限チェックと実際のシグナル送信の間にある、TOCTOU (time-of-check/time-of-use) ウィンドウを悪用する攻撃者は、SIGHUP や SIGCONT などのシグナルを、想定外のプロセスへと送信する可能性を得る。
strncpy() の悪用によるバッファ・オーバーフロー
CVE は割り当てられていないが、Screen 5.0.0 に存在する悪用不可能なバッファ・オーバーフローにより、アクティブな Screen セッションに対して、複数の引数を持つコマンドを送信する場合に、クラッシュが発生する可能性がある。このバグは、strcpy() を strncpy() へと、不適切に置き換えたことに起因する。
Arch Linux では、FORTIFY_SOURCE 保護を有効化すると、アプリケーションがクラッシュすることが確認されている。
影響を受けるディストリビューション
| Distribution | Screen Version | Privilege Model | Affected CVEs |
|---|---|---|---|
| Arch Linux | 5.0.0 | setuid-root | CVE-2025-23395, CVE-2025-46802, CVE-2025-46803, CVE-2025-46804, CVE-2025-46805, buffer overflow issue |
| NetBSD 10.1 | setuid-root | CVE-2025-23395, CVE-2025-46802, CVE-2025-46803, CVE-2025-46804, CVE-2025-46805, buffer overflow issue | |
| Fedora 42 | 5.0.0 | setgid-screen | CVE-2025-46802 (partial), buffer overflow issue |
| FreeBSD 14.2 | 4.9.1 | setuid-root | CVE-2025-46802, CVE-2025-46804, CVE-2025-46805 |
| Gentoo | 4.9.1 / 9999 | setgid-utmp / setuid-root | CVE-2025-46802 (partial), CVE-2025-46805 (in setuid-root config) |
| Debian 12.10 | 4.9.0 | Default | CVE-2025-46802 (partial) |
| Ubuntu 24.04.2 | 4.9.1 | Default | CVE-2025-46802 (partial) |
| openSUSE TW | 4.9.1 | Default | CVE-2025-46802 (partial) |
| OpenBSD 7.7 | 4.9.1 | Default | CVE-2025-46802 (partial) |
現時点において SUSE が強く推奨するのは、Screen を setuid-root 権限でインストールしないことである。このレポートが指摘するのは、これらの問題の多くが時代遅れの権限管理モデルにあり、Screen 5.0.0 のコード・リファクタリング中に混入した、最近の不具合に起因するというものだ。
さらに SUSE は、「Screen には、設計上の広範な問題がある。Screen は、常に昇格された権限で実行され、危険とみなされる操作に対してのみ、選択的に権限が削除される構造になっている。したがって、堅牢な setuid-root プログラムを実現するためには、この逆の手順を実行する必要がある。つまり、それらの権限はデフォルトで削除されるべきであり、実際に昇格された権限を必要とする操作に対してのみ付与されるべきだ」と指摘している。
SUSE が推奨するのは、マルチ・ユーザー・サポートのオプトイン形式での提供と、信頼できるグループの限定である。また、安全な権限処理を確保するための、より広範なアーキテクチャの変更を提案している。
GNU Screen の複数の脆弱性が FIX とのことです。なかでも、CVE-2025-46805/46802/46804 は、CVSS 値 9.8 (tenable 評価) の深刻なものです。開発者の皆さんは、十分にご注意ください。よろしければ、GNU で検索も、ご参照ください。
You must be logged in to post a comment.