GNU InetUtilsのtelnetdサーバーにおいて、重大なリモート認証バイパス脆弱性が公開されました。影響を受けるのはバージョン1.9.3から2.7です。
この脆弱性により、未認証の攻撃者が、USER環境変数の取り扱いにおける不適切な入力検証を悪用して、即座にrootアクセスを取得できます。
telnetdサーバーは、クライアントから受け取ったUSER環境変数をサニタイズせずに、そのまま/usr/bin/loginプログラムへ渡します。
login(1)は通常の認証プロセスを回避するために「-f」パラメータを解釈するため、攻撃者は「-f root」という細工したUSER値を与えることで、即座にrootアクセスを達成できます。
この脆弱性は、telnetdサーバーがテンプレート展開およびloginユーティリティへのパラメータ受け渡しの前に環境変数を検証しないことに起因します。
欠陥はtelnetd/telnetd.cにあるlogin呼び出しテンプレートに由来し、次の形式を使用しています: PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"。
攻撃者がtelnet(1)で「-a」または「–login」パラメータを用いて悪意のあるUSER環境変数を送信すると、認証プロセスは完全にバイパスされます。
実用的な悪用例は、この脆弱性の深刻さを示しています。telnetdが有効なシステムで実行すると、次のコマンドにより即座にrootアクセスが得られます:
攻撃者は認証資格情報なしに、直接rootシェルのプロンプトを提示されます。
この脆弱性は、telnetdの機能改善を目的としたコミットにより、2015年3月19日に導入されました。
このバグは、2026年1月19日の責任ある開示まで、10年以上にわたり検出されないままでした。
根本原因はtelnetd/utility.cにおける変数展開のサニタイズ不足であり、 _var_short_name() 関数がサニタイズされていない環境変数を返します。
セキュリティ研究者は、他の未展開変数についても同様の脆弱性が存在し得ることを特定しました。特にremote_hostnameフィールドは、getnameinfo()またはgethostbyaddr()によって設定され、非GNU/Linuxシステムでは一般に信頼できるデータとは見なされません。
GNU InetUtils開発チームは、telnetdサービスを直ちに無効化するか、telnetポートへのネットワークアクセスを信頼できるクライアントのみに制限することを推奨しています。
組織は、変数のサニタイズに対処するセキュリティパッチを適用するか、修正済みリリースへアップグレードすべきです。
パッチは、環境変数の操作によるコマンドインジェクションを防ぐため、展開時にすべての変数をサニタイズします。
代替策として、管理者は「-f」パラメータを完全に拒否するカスタムlogin(1)ユーティリティを実装でき、信頼された環境向けにtelnetdの機能を維持しつつ攻撃ベクトルを排除できます。
この脆弱性は、特に後方互換性を必要とするレガシーシステムなど、依然としてtelnetdサービスを運用している組織にとって重大なリスクを示します。
未認証であることと悪用の容易さにより、これは高優先度でパッチ適用が必要な案件です。