はじめに
GNU InetUtilsのtelnetdサーバーに、認証をバイパスできる致命的な脆弱性が発見されました。この脆弱性により、リモートの攻撃者は認証情報なしでルートアクセス権を不正に取得し、システムを完全に制御できる可能性があります。この問題は、パラメータの不適切なサニタイズに起因しています。
脆弱性の詳細
この脆弱性は、GNU InetUtilsのバージョン1.9.3から2.7に影響を及ぼします。脆弱性の核心は、telnetdがUSER環境変数をサニタイズせずに、ルート権限で実行されるloginプログラムに渡してしまうことにあります。
技術的なメカニズム
- 脆弱性は、
telnetd/utility.c内の_var_short_name()関数における変数展開ロジックに存在します。 telnetd/telnetd.cで定義されたログインコマンドテンプレートが、%Uパラメータ(USER環境変数に対応)を無条件に展開します。- このテンプレートは
"PATH_LOGIN -p -h %h %?u{-f %u}{%U}"という形式を使用しており、ユーザー入力をloginコマンドに-fフラグ付きで直接渡してしまいます。 login(1)コマンドの-fパラメータは、既にユーザーの身元が確認されているシステムでの使用を意図した認証バイパス機能です。- 攻撃者は、サニタイズされていない
USER変数を通じてこのフラグを注入することで、loginプロセスを操作し、自身を自動的にルートユーザーとして認識させることが可能です。
この脆弱性は、2015年3月19日のコミットfa3245acで導入され、同年5月12日にリリースされたv1.9.3以降の全バージョンで未修正のままでした。
攻撃の概念実証 (PoC)
この脆弱性の悪用は非常に簡単であり、攻撃者は最小限のセットアップで実行できます。以下のコマンドを実行するだけで、パスワードの入力なしに即座にルートシェルが取得されることが確認されています。
USER='-f root' telnet -a localhost
推奨される対策
GNU InetUtils開発チームは、現代のシステムではSSHを使用すべきであるため、**telnetdを完全に無効化する**ことを強く推奨しています。telnetdを現在も運用している組織は、直ちに以下の対策を講じる必要があります。
- コミット
fd702c02およびccba9f748によって提供されるパッチを適用し、包括的な変数サニタイズを実装する。 - ネットワーク管理者は、telnetポートへのアクセスを信頼できるクライアントのみに制限し、可能な限りSSHへのサービス移行を進める。
- カスタムログインツールを実装し、
loginプログラムの-fパラメータを明示的に拒否する。
元記事: https://gbhackers.com/gnu-inetutils-vulnerability-exploited/
