CVE-2026-66035対策:Azure Linux 3.0のlibssh2修正版と更新手順

Azure Linux 3.0でlibssh2を利用している場合は、インストール済みの完全なRPMリリース番号を確認し、libssh2-1.11.1-5.azl3以降へ更新してください。CVE-2026-66035は、SSHクライアントが悪意のあるSSHサーバーとEncrypt-then-MAC(ETM)暗号を交渉した際、認証前にヒープ領域を破壊される可能性がある脆弱性です。CVSS v3.1は7.5のHigh、脆弱性分類はCWE-122です。(NVD)

MSRCのFirstFixedには「azl3 libssh 0.10.6-8」「azl3 libssh2 1.11.1-4」が掲載されています。一方、Azure Linuxの公式パッケージ履歴では、CVE-2026-66035の修正パッチを追加した際にlibssh2のReleaseが4から5へ更新され、実際の配布リポジトリにも1.11.1-5.azl3が公開されています。このため、2026年8月2日時点では1.11.1-4.azl3で対応完了とせず、公式リポジトリから提供される最新パッケージ、少なくとも1.11.1-5.azl3以降を適用するのが安全です。(Microsoft Security Response Center)

目次

CVE-2026-66035の要点と対応結論

CVE-2026-66035の概要を整理すると、次のとおりです。

項目内容
対象Azure Linux 3.0で利用されるlibssh2
脆弱性ETM暗号処理時のヒープバッファーオーバーフロー
攻撃条件libssh2を使うクライアントが悪意のあるSSHサーバーへ接続する
発生タイミングSSHユーザー認証より前
CVSS v3.17.5 High
CVSSベクターAV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
CWECWE-122:Heap-based Buffer Overflow
上流の影響範囲libssh2 1.11.1まで
Azure Linuxでの推奨基準libssh2-1.11.1-5.azl3以降
主な対応パッケージ更新、プロセス再起動、コンテナイメージ再構築

上流のlibssh2では、バージョン1.11.1までが影響範囲として示されています。ただし、Linuxディストリビューションは脆弱性修正をバックポートするため、Azure Linuxでは上流バージョンが1.11.1のままでも、後ろのRelease番号によって修正状況が変わります。したがって、1.11.1というバージョン部分だけでは安全性を判断できません。(NVD)

実務上の判断は次のようになります。

確認結果判断
libssh2-1.11.1-5.azl3以降CVE-2026-66035の修正パッチを含む
libssh2-1.11.1-4.azl3以前更新が必要
libssh2が未インストールOSパッケージとしては対象外。ただし同梱ライブラリやコンテナを別途確認
libsshだけがインストール済みlibssh2とは別ライブラリ。libsshのバージョンだけで修正済みとは判断できない

ETM暗号交渉時にヒープバッファーオーバーフローが起きる仕組み

ETMは「Encrypt-then-MAC」の略で、暗号化したデータに対してMACによる完全性検証を行う方式です。CVE-2026-66035では、このETMを利用するSSH通信のパケット処理に問題がありました。

攻撃の流れは次のとおりです。

  1. libssh2を使用するクライアントがSSHサーバーへ接続する
  2. クライアントとサーバーがETM暗号方式を交渉する
  3. 悪意のあるサーバーが、暗号ブロックサイズより小さいpacket_lengthを含む不正なパケットを送る
  4. 脆弱なlibssh2が、コピーするデータ量より小さなヒープバッファーを確保する
  5. バッファーの境界を超えてデータが書き込まれ、隣接するヒープ領域が破壊される

NVDの説明では、特定条件下でヒープ管理情報や隣接オブジェクトが破壊され、プロセスのクラッシュだけでなく、関数ポインターの上書きにつながる可能性も示されています。ただし、実際の影響はCPUアーキテクチャ、メモリアロケーター、アプリケーションの実装などに左右されます。(NVD)

上流の修正コミットでは、復号処理へ進む前に、受信済みデータの合計サイズが「MAC長、パケット長フィールド、暗号ブロックサイズ」を満たしているか検証する処理が追加されました。サイズが不足している場合は復号エラーとして処理を中止し、不適切なメモリーコピーを防ぎます。(GitHub)

影響を受けるのはSSHサーバーではなくlibssh2を使うクライアント

CVE-2026-66035は、Azure Linux上のsshdが外部から不正な接続を受けるだけで直ちに悪用される脆弱性ではありません。主な対象は、libssh2を組み込んで外部のSSHサーバーへ接続するクライアント側アプリケーションです。

たとえば、次のような処理が確認対象になります。

  • SFTPやSCPを使うファイル転送バッチ
  • バックアップ製品やファイル同期ツール
  • libcurlを使ったSFTP・SCP通信
  • PHPのSSH2拡張を利用するWebアプリケーション
  • libssh2を直接組み込んだ自社アプリケーション
  • 外部SSHサーバーからデータを取得するエージェント
  • コンテナ内で動作する転送サービス
  • ユーザー入力で接続先を変更できるSSH関連機能

危険度は、単にlibssh2がインストールされているかだけでなく、接続先と実行権限を含めて判断します。

利用状況対応優先度理由
ユーザーが接続先ホストを指定できる高悪意のあるSSHサーバーへ誘導される可能性がある
外部企業や不特定のSSHサーバーへ自動接続する高接続先の侵害がクライアントへの攻撃につながる
ホスト鍵検証を無効にしている高偽装サーバーや中間者を排除しにくい
root権限のバッチでSFTPを実行している高メモリー破壊後の影響が大きくなりやすい
接続先を固定し、厳格にホスト鍵を検証している中攻撃経路は限定されるが、接続先侵害には対応できない
libssh2はあるが利用アプリが不明中依存関係を調査するまで対象外と断定できない
libssh2も同梱コピーも存在しない低脆弱なコードが実行環境にない

CVSSベクターでは攻撃元がネットワーク、攻撃条件の複雑さが高、攻撃者の事前権限は不要、クライアント側からの接続が必要と評価されています。CVSS 7.5という数字だけで一律に判断せず、外部SSHサーバーへ接続する処理から優先的に確認することが重要です。(NVD)

修正版の読み方:MSRCのFirstFixedだけで判定しない

MSRCのCVEページでは、Azure Linux 3.0向けのFirstFixedとして次のパッケージ表記が掲載されています。(Microsoft Security Response Center)

  • azl3 libssh 0.10.6-8 on Azure Linux 3.0
  • azl3 libssh2 1.11.1-4 on Azure Linux 3.0

ただし、Azure Linuxの公式GitHubリポジトリにある修正履歴では、CVE-2026-66035のパッチ追加と同時にlibssh2のReleaseが4から5へ変更されています。SPECファイルにはCVE-2026-66035.patchが追加され、変更履歴にも1.11.1-5でCVE-2026-66035を修正したことが記載されています。(GitHub)

さらに、MicrosoftのAzure Linux 3.0本番リポジトリでは、x86_64とaarch64の両方についてlibssh2-1.11.1-5.azl3が配布されています。1.11.1-4.azl3は2026年7月8日、1.11.1-5.azl3は同年7月29日に公開されており、CVE修正のマージ履歴とも整合します。(Microsoft Packages)

このため、実務では次の基準を採用してください。

  1. libssh2-1.11.1-4.azl3以前は更新対象とする
  2. libssh2-1.11.1-5.azl3以降を修正済みの基準とする
  3. 1.11.1-6.azl3など、さらに新しい公式版がある場合は新しい版を使う
  4. FirstFixedと完全一致する版へダウングレードしない
  5. MSRCの表示だけでなく、Azure Linuxのパッケージ履歴と実際のリポジトリを確認する

libssh、libssh2、OpenSSHは別のソフトウェア

名前が似ていますが、次の3つは同一ではありません。

名前主な役割確認時の注意
libsshSSH機能を提供する別のライブラリlibssh2の修正状況は判断できない
libssh2SSH2クライアント機能を提供するCライブラリCVE-2026-66035の実際の修正対象
OpenSSHsshやsshdを提供する実装ssh -Vではlibssh2の版を確認できない

MSRCにlibssh 0.10.6-8が表示されていても、libssh2が1.11.1-4.azl3のままであれば、CVE-2026-66035への対応完了とは判断しないでください。

Azure Linux 3.0でインストール済みバージョンを確認する手順

OSのバージョンを確認する

最初に、対象ホストがAzure Linux 3.0であることを確認します。

. /etc/os-release
printf 'ID=%s VERSION_ID=%s\n' "$ID" "$VERSION_ID"

VERSION_IDが3.0であることを確認してください。Azure Linux以外のコンテナをAzure Linuxホスト上で動かしている場合、ホストとコンテナは別々に調査する必要があります。

libssh2とlibsshの完全なRPMバージョンを確認する

次のコマンドでは、上流バージョンだけでなくAzure LinuxのRelease番号とCPUアーキテクチャまで表示できます。

rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' libssh2 libssh

修正済み環境では、たとえば次のように表示されます。

libssh2-1.11.1-5.azl3.x86_64
libssh-0.10.6-8.azl3.x86_64

aarch64環境では、末尾が.aarch64になります。安全性の判断で重要なのは、1.11.1だけでなく-5.azl3まで含めた完全な値です。

よくある間違った確認方法

次のコマンドはOpenSSHのバージョンを表示するため、CVE-2026-66035の確認には使えません。

ssh -V

また、libssh2はライブラリであり、環境によってはlibssh2 --versionという実行コマンド自体が存在しません。Azure Linuxのパッケージとして導入されている版は、rpm -q libssh2で確認してください。

アプリケーションがlibssh2を読み込むか確認する

対象の実行ファイルが分かっている場合は、動的リンクを確認できます。

ldd /path/to/application | grep libssh2

出力例は次のとおりです。

libssh2.so.1 => /usr/lib64/libssh2.so.1

ただし、何も表示されないからといって必ずしも安全とは限りません。静的リンク、独自ディレクトリへの同梱、実行時の動的読み込みではlddに現れないことがあります。製品のSBOM、依存関係ファイル、脆弱性スキャナー、ベンダー情報も併用してください。

Azure Linux 3.0のlibssh2を修正版へ更新する手順

Azure Linuxのパッケージ管理ではtdnfを使用します。Microsoftのドキュメントでも、インストール済みパッケージの確認にrpm、パッケージ更新にtdnf upgradeを使用する方法が案内されています。(Microsoft Learn)

更新前に確認すること

本番環境では、更新前に次の項目を確認します。

  1. SFTPやSCPを実行しているジョブの稼働時間
  2. 更新後に再起動するサービス
  3. 冗長構成の切り替え手順
  4. VMやディスクのバックアップ方針
  5. コンテナやAKSノードが別管理になっていないか
  6. 社内リポジトリやプロキシに最新版が同期済みか

ライブラリ更新は実行中のプロセスへ自動的に読み直されません。パッケージ更新だけでなく、利用アプリケーションの再起動まで変更計画に含めてください。

libssh2を個別に更新する

キャッシュを削除してから、libssh2を更新します。

sudo tdnf clean all
sudo tdnf upgrade -y libssh2

MSRCに掲載されたlibsshもインストール済みであれば、併せて最新版へ更新します。

rpm -q libssh >/dev/null 2>&1 && sudo tdnf upgrade -y libssh

パッケージ間の依存関係や他のセキュリティ修正もまとめて適用する運用であれば、システム全体を更新します。

sudo tdnf upgrade -y

対象パッケージを個別更新するか、システム全体を更新するかは、組織のパッチ管理方針と影響試験の範囲に合わせて選びます。ただし、古いパッケージを固定するバージョンロックが設定されている場合は、先に解除または例外登録が必要です。

更新後のバージョンを確認する

更新後に、完全なRPMバージョンを再確認します。

rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' libssh2 libssh

libssh2-1.11.1-5.azl3以降であることを確認してください。さらにパッケージの変更履歴を確認する場合は、次のコマンドを利用できます。

rpm -q --changelog libssh2 | grep -A2 'CVE-2026-66035'

変更履歴の表示は補助的な確認方法です。最終的には、インストール済みの完全なRPMリリース番号と、利用しているリポジトリの最新情報で判断します。

libssh2を読み込むプロセスを再起動する

ディスク上の共有ライブラリが更新されても、更新前から動いているプロセスは古いライブラリをメモリー内に保持している可能性があります。

次のようなプロセスを再起動してください。

  • SFTP・SCP転送サービス
  • バックアップエージェント
  • PHP-FPMやWebアプリケーション
  • libssh2を使う自社デーモン
  • ジョブ実行ワーカー
  • 長時間稼働するコンテナ

対象プロセスを特定できない場合は、影響を確認したうえでメンテナンス時間内にOSを再起動する方法が確実です。

接続テストを行う

再起動後は、信頼できるSSHサーバーを使って次の項目を確認します。

  1. SFTPまたはSCP接続が成功する
  2. ホスト鍵検証が正常に行われる
  3. ファイル送受信が成功する
  4. 転送後のファイルサイズやハッシュが一致する
  5. アプリケーションログに復号エラーやクラッシュがない
  6. 定期ジョブが正常終了する

本番の転送処理だけを確認するのではなく、認証、接続、転送、切断まで一連の処理をテストしてください。

コンテナとAKSで見落としやすいポイント

ホストを更新してもコンテナ内は更新されない

Azure Linux 3.0ホストのlibssh2を更新しても、コンテナイメージ内に含まれるlibssh2は変更されません。コンテナ内でSFTPやSCP通信を行う場合は、イメージ側のパッケージを調査します。

RPMベースのイメージであれば、次のように確認できます。

docker run --rm --entrypoint rpm <image-name> -q libssh2

実行中のKubernetes Podを確認する例は次のとおりです。

kubectl exec <pod-name> -- rpm -q libssh2

ただし、distrolessイメージや最小構成イメージにはrpmコマンドがありません。その場合は、コンテナスキャナー、SBOM、Dockerfile、ビルドログなどから依存関係を確認します。

脆弱なパッケージが含まれていた場合は、稼働中コンテナへ直接パッチを当てるのではなく、次の流れで対応します。

  1. ベースイメージを更新する
  2. パッケージ更新を含めてイメージを再ビルドする
  3. 脆弱性スキャンを実行する
  4. 新しいイメージをレジストリへ登録する
  5. Deploymentやジョブを再デプロイする
  6. 古いイメージの再利用を防止する

AKSノードはノードイメージの更新状況も確認する

AKSでAzure Linux 3.0ノードを使用している場合は、個々のノードへ手作業でパッケージを入れるだけでなく、修正版を含むノードイメージへ更新する運用を検討します。Microsoftは、ノードイメージの自動アップグレードチャネルや、メンテナンス期間内のセキュリティパッチ適用を推奨しています。(Microsoft Learn)

なお、AKSノードのOSとPod内のコンテナは別の管理対象です。

対象必要な対応
AKSノードOSのlibssh2ノードイメージ更新、OS更新チャネルの確認
Pod内のlibssh2コンテナイメージの再構築と再デプロイ
アプリに静的リンクされたlibssh2アプリケーション自体の再ビルド
ベンダー製エージェントベンダーの修正版へ更新

すぐに更新できない場合の一時対策

一時対策は攻撃経路を狭めるものであり、ヒープバッファーオーバーフロー自体を修正するものではありません。更新が完了するまでの短期間に限定して使用します。

  1. SSH・SFTPの接続先を許可済みIPアドレスやFQDNに限定する
  2. ファイアウォールやNSGで不要な外向きSSH通信を遮断する
  3. ユーザー入力から接続先ホストやポートを直接指定できないようにする
  4. SSHホスト鍵を事前登録し、厳格に検証する
  5. StrictHostKeyChecking=noなどの検証無効化設定を廃止する
  6. ファイル転送処理を非特権ユーザーで動かす
  7. 外部SSHサーバーへ接続する処理を専用ワーカーへ隔離する
  8. 信頼性を確認できない接続先への自動転送を一時停止する

ホスト鍵検証を有効にしても、正規の接続先サーバー自体が侵害されている場合は防げません。最終的な対策は、修正版のlibssh2へ更新することです。

対応時によくある失敗

失敗例問題点正しい対応
ssh -Vだけを確認するOpenSSHの版しか分からないrpm -q libssh2を実行する
1.11.1だけを比較するAzure Linuxのバックポートを判定できない1.11.1-5.azl3まで確認する
MSRCの1.11.1-4で止める公式のCVEパッチ追加はRelease 51.11.1-5.azl3以降へ更新する
libssh 0.10.6-8だけを確認するlibsshとlibssh2は別ライブラリ両パッケージを個別に確認する
VMホストだけを更新するコンテナ内に脆弱なコピーが残るイメージを再ビルドして再配備する
パッケージ更新後に再起動しない実行中プロセスが旧ライブラリを保持するサービスやコンテナを再起動する
FirstFixedへダウングレードする後続のセキュリティ修正を失う利用可能な最新の公式版を維持する
libssh2未導入だけで対象外と判断するアプリが独自コピーを同梱している可能性があるSBOMやバイナリ依存関係も調査する

CVE-2026-66035への対応で今すぐ行うこと

Azure Linux 3.0を運用している場合は、次の順序で対応します。

  1. rpm -q libssh2 libsshでインストール状況を確認する
  2. libssh2-1.11.1-4.azl3以前を更新対象として抽出する
  3. tdnfでlibssh2-1.11.1-5.azl3以降へ更新する
  4. libssh2を使用するサービスやジョブを再起動する
  5. コンテナ、AKSノード、静的リンクされたアプリも別途調査する
  6. 信頼できるSSHサーバーを使ってSFTP・SCPの接続試験を行う
  7. ホスト鍵検証と外向きSSH通信の制御を見直す

特に注意したいのは、MSRCのFirstFixed表示とAzure Linuxの実際のパッケージ修正履歴に差がある点です。CVE-2026-66035のパッチ追加が公式履歴で確認できるのはlibssh2-1.11.1-5.azl3であるため、1.11.1-4.azl3を残さず、利用可能な最新のAzure Linux 3.0向けパッケージへ更新してください。(GitHub)

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次