Azure Linux 3.0でperl-DBI 1.643-5を使用している場合は、perl-DBI 1.651-1以降へ更新する必要があります。CVE-2026-15043は、Perl DBIに内蔵された簡易SQLエンジンDBI::SQL::Nanoで、文字列に対する比較演算子<=と>=が逆向きに評価される脆弱性です。
この問題が厄介なのは、処理がエラーで停止するのではなく、条件と反対側のデータが正常な検索結果として返される点です。アクセス制御、帳票出力、ファイルベースのデータ抽出などに該当条件を使用していると、本来取得してはいけない行が含まれる可能性があります。上流のPerl DBIでは1.42から1.650までが影響を受け、1.651で修正されています。Azure Linux 3.0向けには1.651-1が公開されています。()
CVE-2026-15043の概要
CVE-2026-15043の要点は次のとおりです。
| 項目 | 内容 |
|---|---|
| 対象 | Azure Linux 3.0のperl-DBI |
| 確認されている対象バージョン | 1.643-5 |
| 上流DBIの影響範囲 | 1.42以上、1.651未満 |
| 問題のある機能 | DBI::SQL::Nanoの文字列比較 |
| 誤動作する演算子 | <=、>= |
| 修正版 | Azure Linux 3.0では1.651-1、上流DBIでは1.651 |
| 主な影響 | WHERE句による抽出結果の誤り、フィルターのすり抜け |
| MSRCの個別回避策 | 掲載なし |
注意したいのは、Azure Linux 3.0のリポジトリに存在するperl-DBI 1.650-1も修正版ではないことです。上流の影響範囲は1.650までであるため、「1.643-5より新しいから安全」とは判断できません。更新後のRPMバージョンが1.651-1以上であることを確認してください。()
文字列の「以下」と「以上」が逆に評価される仕組み
問題は、DBI::SQL::Nanoが数値ではない値を文字列として比較する処理にあります。
本来、SQLとPerlの文字列比較は次のように対応する必要があります。
| SQLの条件 | 本来使用すべきPerl演算子 | 脆弱な実装で使用されていた演算子 |
|---|---|---|
値 <= 境界値 | le | ge |
値 >= 境界値 | ge | le |
つまり、<=では「以下」ではなく「以上」、>=では「以上」ではなく「以下」として判定されていました。修正コミットでは、この2つの演算子が正しい向きへ置き換えられています。(GitHub)
たとえば、文字列列に次の値が入っているとします。
A
M
Z
次のSQLは、本来AとMを返すべきです。
SELECT * FROM sample_table
WHERE code <= 'M';
しかし、影響を受ける実装では、実質的にcode >= 'M'として評価されるため、MとZが返されます。
逆に、次のSQLは本来MとZを返します。
SELECT * FROM sample_table
WHERE code >= 'M';
脆弱な実装ではMとAが返されます。
境界値と等しいMはどちらの結果にも含まれるため、少量のテストデータでは問題を見落とすことがあります。検証時には、境界値より小さい値、等しい値、大きい値の3種類を必ず用意することが重要です。
すべてのPerl DBI環境が同じ影響を受けるわけではない
perl-DBIがインストールされているだけで、直ちに問題のコードが実行されるわけではありません。直接的な影響を受ける可能性が高いのは、次の条件が重なる環境です。
- Azure Linux 3.0上で、1.651未満のDBIを実行している
- アプリケーションが
DBI::SQL::Nanoを使用している - ファイルベースのDBIドライバーを使用している
- WHERE句で文字列に対する
<=または>=を使用している - その検索結果が権限制御、データ公開範囲、帳票出力などに利用されている
DBI::SQL::Nanoは、DBIに組み込まれた簡易SQLエンジンです。DBD::File、DBD::DBM、CSV系などのファイルベースドライバーで、SQL::Statementが利用できない場合にフォールバックとして使われることがあります。また、環境変数DBI_SQL_NANO=1で明示的に使用させる構成もあります。()
MySQLやPostgreSQLなど、データベースサーバー側がSQLを評価する一般的な構成では、同じDBI::SQL::Nanoの処理を必ず通るわけではありません。ただし、アプリケーションの一部だけがCSVやDBMファイルを扱っているケースもあるため、DBIの接続先を名前だけで判断せず、実際に使用しているドライバーを確認する必要があります。
セキュリティ問題になるケースと、データ不整合で終わるケース
上流のアドバイザリでは、誤った述語評価によってファイルベースのフィルターを回避できる可能性が指摘されています。一方で、この問題自体はSQLインジェクションや任意コード実行を発生させるものではありません。危険度は、誤った検索結果が何に使われるかによって大きく変わります。()
| 利用場面 | 想定される影響 | 対応優先度 |
|---|---|---|
| ユーザーごとの閲覧可能範囲をWHERE句で制御 | 許可されていない行が返る可能性 | 最優先 |
| 個人情報や機密情報のエクスポート | 対象外データがファイルに含まれる可能性 | 最優先 |
| ユーザー入力を比較境界として利用 | 入力値によってフィルターをすり抜ける可能性 | 高 |
| 請求、在庫、集計バッチ | 誤集計や対象データの取り違え | 高 |
| 管理画面の参考表示 | 表示結果の誤り | 中 |
| DBIは存在するがSQL::Nanoを使用していない | 直接的な影響は限定的 | 更新は必要 |
特に確認すべきなのは、WHERE句が単なる検索条件ではなく、アクセス制御の代わりとして使われていないかです。
たとえば、「ユーザーの権限コード以下のデータだけを表示する」といった設計で文字列比較を使用している場合、結果が逆転すると、本来より高い権限に属するデータが返る可能性があります。
Azure Linux 3.0で影響を確認する手順
OSとインストール済みRPMを確認する
最初に、対象ホストがAzure Linux 3.0であることと、perl-DBIのRPMバージョンを確認します。
cat /etc/os-release
rpm -q --qf '%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\n' perl-DBI
影響を受ける環境では、次のような結果が表示される可能性があります。
perl-DBI 1.643-5.azl3 x86_64
次の結果も修正前です。
perl-DBI 1.650-1.azl3 x86_64
修正済みと判断できる基準は、次のバージョンです。
perl-DBI 1.651-1.azl3 x86_64
MicrosoftのAzure Linux 3.0向けx86_64リポジトリでは、1.643-5、1.650-1に加えて、修正版の1.651-1が公開されています。(packages.microsoft.com)
Perlが実際に読み込むDBIも確認する
RPMの情報だけでなく、Perlプロセスが実際に読み込むDBIのバージョンとパスも確認します。
perl -MDBI -e 'printf "DBI=%s\nPATH=%s\n", $DBI::VERSION, $INC{"DBI.pm"}'
修正後の例は次のとおりです。
DBI=1.651
PATH=/usr/lib/perl5/vendor_perl/DBI.pm
RPMと実行時バージョンの両方を確認する理由は、CPANやcpanmで別のDBIがインストールされている可能性があるためです。
たとえば、RPMは1.651-1でも、/usr/local/lib配下に古いDBI.pmが残っていると、Perlの検索パス順序によって古いモジュールが読み込まれることがあります。反対に、実行時DBIだけを更新してRPMを放置すると、パッケージ管理上の状態と実行環境が一致しなくなります。
更新可能なバージョンを確認する
Azure Linuxではtdnfを使用してパッケージを管理します。
sudo tdnf makecache
tdnf list perl-DBI
一覧に1.651-1以上が表示されることを確認します。Microsoft Learnでも、Azure Linuxのパッケージ確認にはtdnf list、更新にはtdnf updateを使用する手順が案内されています。(Microsoft Learn)
修正版が表示されない場合は、次の点を確認してください。
- リポジトリメタデータが更新されているか
- 社内ミラーへの同期が完了しているか
- プロキシやファイアウォールでリポジトリ通信が遮断されていないか
- 使用しているアーキテクチャ向けに修正版が提供されているか
- パッケージがバージョン固定されていないか
DBI::SQL::Nanoを強制していないか確認する
現在のシェルでは、次のコマンドで環境変数を確認できます。
env | grep '^DBI_SQL_NANO='
アプリケーションの設定ファイルや起動スクリプトも検索します。
grep -R --line-number 'DBI_SQL_NANO' \
/etc /opt /srv /usr/local 2>/dev/null
systemdサービスとして起動している場合は、サービス定義も確認します。
systemctl cat <サービス名>
コンテナーの場合は、Dockerfile、Composeファイル、KubernetesのDeploymentやConfigMap、Secretも調査対象です。
DBI_SQL_NANOが見つからなくても、フォールバックによって使用される可能性があります。環境変数がないことだけで影響なしとは判断しないでください。
ファイルベースのドライバーを探す
アプリケーションのソースや設定から、関連するドライバーを探します。
grep -R --line-number -E \
'DBD::(File|DBM|CSV)|dbi:(File|DBM|CSV)' \
/opt /srv /usr/local 2>/dev/null
さらに、対象アプリケーションで文字列列に対する<=または>=を使用していないか確認します。
検索時には、次のような処理を重点的に調べます。
- ユーザー権限や公開範囲の絞り込み
- CSVやローカルファイルからのデータ抽出
- 文字列の日付を使った期間指定
- ランク、区分、コードによる範囲指定
- バッチ処理の対象選択
- 帳票やエクスポートの抽出条件
単純なソースコード検索では、Perl側の比較演算子やHTMLまで大量に検出されます。検索結果をそのまま影響件数とせず、SQL文字列として実行される箇所を個別に確認してください。
perl-DBIを1.651-1へ更新する手順
VMや通常のAzure Linuxホストを更新する
変更前に、対象アプリケーション、依存パッケージ、ロールバック方法を確認します。その後、次のコマンドで更新します。
sudo tdnf makecache
sudo tdnf update perl-DBI
更新後は、RPMと実行時モジュールの両方を確認します。
rpm -q --qf '%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\n' perl-DBI
perl -MDBI -e 'printf "DBI=%s\nPATH=%s\n", $DBI::VERSION, $INC{"DBI.pm"}'
期待する結果は、少なくとも次の状態です。
perl-DBI 1.651-1.azl3 x86_64
DBI=1.651
上流DBIの1.651では、CVE-2026-15043に対応する文字列比較の修正がリリース内容として明記されています。(MetaCPAN)
長時間動作しているPerlプロセスを再起動する
パッケージを更新しても、すでに起動しているPerlプロセスは、メモリ上に読み込んだ古いモジュールを使用し続ける可能性があります。
更新後は、該当するサービスやワーカーを再起動します。
sudo systemctl restart <サービス名>
sudo systemctl status <サービス名>
cronから毎回新しいPerlプロセスを起動する処理では、次回実行から新しいモジュールが読み込まれます。ただし、常駐型のジョブワーカー、Webアプリケーション、デーモンは明示的に再起動してください。
コンテナーはイメージを再ビルドする
Azure Linux 3.0のコンテナーで使用している場合、稼働中のコンテナーだけを手作業で更新しても、再作成時に元の脆弱な状態へ戻ります。
Dockerfileまたはビルド工程で更新します。
RUN tdnf makecache \
&& tdnf update -y perl-DBI
その後、次の流れで再展開します。
- コンテナーイメージを再ビルドする
- CIで
perl-DBI 1.651-1以上を検証する - 新しいイメージをレジストリへ登録する
- ステージング環境で比較条件をテストする
- 本番環境のPodやコンテナーを入れ替える
- 古いイメージタグを再利用しない
実行中のコンテナーへ一時的にパッチを適用する方法は、調査目的には使えても恒久対応にはなりません。修正版を含むイメージを成果物として残すことが重要です。
更新後に実施する回帰テスト
境界値の前後を含む3点で確認する
文字列の比較対象として、境界値より小さい値、等しい値、大きい値を用意します。
| テスト値 | 値 <= 'M'の期待値 | 値 >= 'M'の期待値 |
|---|---|---|
A | 真 | 偽 |
M | 真 | 真 |
Z | 偽 | 真 |
実際のアプリケーションで、次の両方を実行します。
SELECT * FROM sample_table
WHERE code <= 'M';
SELECT * FROM sample_table
WHERE code >= 'M';
上流の修正にも、>=と<=の文字列比較を確認するテストが追加されています。(GitHub)
検証用の値には、単純な英字だけでなく、実データに含まれる形式も使います。
- 大文字と小文字
- 数字を含む文字列
- 日付形式の文字列
- 日本語を含む値
- 空文字列
- NULL
- 境界値と完全に一致する値
ただし、文字コード、正規化、照合順序によって結果が変わる可能性があります。最終確認は、対象アプリケーションと実際のドライバーを使用して行ってください。
エラーの有無ではなく取得行を確認する
この脆弱性では、SQLの実行自体が正常終了することがあります。
そのため、次の確認だけでは不十分です。
- 例外が発生しなかった
- HTTPステータスが200だった
- バッチが正常終了した
- ログにエラーがなかった
更新前後で、取得件数と取得された行の内容を比較してください。特に、権限制御や機密情報の抽出に使われる処理では、テストユーザーごとの取得可能範囲を確認する必要があります。
過去に生成した結果も確認する
更新によって修正されるのは、今後実行される比較処理です。影響期間中に作成された次の成果物は自動的には修正されません。
- CSVエクスポート
- 帳票
- 請求データ
- 集計結果
- キャッシュ
- 他システムへ連携したファイル
- アクセス判定の監査記録
該当するコードパスが確認された場合は、アプリケーションのリリース履歴とDBIの導入履歴から影響期間を特定し、重要な処理を再実行または再照合してください。
MSRCに個別回避策がない場合の考え方
MSRCのCVE-2026-15043ページには、Azure Linux 3.0向けの個別回避策が掲載されていません。そのため、基本対応はperl-DBI 1.651-1以降への更新です。(msrc.microsoft.com)
すぐに更新できない場合は、修正の代わりではなく、一時的なリスク低減策として次を検討します。
- 該当するバッチやエクスポート処理を一時停止する
- 文字列の
<=と>=に依存するアクセス制御を使用しない - 出力ファイルを外部へ送信する前に内容を確認する
- 対象データファイルの読み取り権限を必要最小限にする
- ユーザーが比較境界を自由に指定できる機能を一時的に制限する
- 影響するAPIを管理者だけに限定する
- 更新までの操作と出力結果を記録する
独自に比較条件を書き換えたり、SQLエンジンを切り替えたりすると、別の互換性問題が発生する可能性があります。緊急変更を行う場合も、本番データと同じ形式で回帰テストを行ってください。
対応時に起こりやすい失敗
1.650-1を修正版だと判断する
最も注意したい誤りです。1.650-1は1.643-5より新しいものの、上流の修正版は1.651です。
Azure Linux 3.0では、1.651-1以上を基準にしてください。()
RPMの表示だけで対応完了とする
CPANで導入した別のDBIが優先されることがあります。次の2つを両方確認します。
rpm -q perl-DBI
perl -MDBI -e 'print "$DBI::VERSION $INC{\"DBI.pm\"}\n"'
数値列だけをテストする
CVE-2026-15043で問題になっているのは、非数値として処理される文字列比較です。数値列のテストだけでは修正確認になりません。文字列列と実際のドライバーを使用してください。()
更新後に常駐プロセスを再起動しない
ディスク上のモジュールだけが新しくなり、稼働中のプロセスでは古いコードが残る可能性があります。Webサービスやワーカーの再起動までを更新手順に含めます。
エラーログだけを調査する
今回の問題では、誤った行が正常な結果として返る可能性があります。エラー件数ではなく、検索結果そのものを監査してください。
稼働中のコンテナーだけを修正する
コンテナーを再作成すると脆弱な状態へ戻ります。Dockerfile、ベースイメージ、CIのバージョンチェックを更新し、修正版を含むイメージへ置き換える必要があります。
CVE-2026-15043への対応で実施すべきこと
Azure Linux 3.0の管理者は、次の順番で対応します。
rpm -q perl-DBIでRPMバージョンを確認するperl -MDBIで実行時バージョンと読み込みパスを確認するDBI::SQL::Nano、ファイルベースドライバー、文字列の<=と>=の利用箇所を調査するtdnf update perl-DBIで1.651-1以降へ更新する- 常駐するPerlプロセスやコンテナーを再起動・再展開する
- 境界値の前後を含む回帰テストを行う
- 権限制御やデータ出力に使っていた場合は、過去の取得結果も監査する
CVE-2026-15043は、派手なクラッシュやエラーメッセージではなく、検索結果を静かに反転させるタイプの問題です。perl-DBIの存在だけで影響を決めつける必要はありませんが、バージョン、実行時の読み込み先、SQL::Nanoの利用有無、文字列比較の用途を分けて確認することが重要です。
最初の対応として、Azure Linux 3.0上でrpm -q perl-DBIを実行し、1.651-1未満であれば更新計画を立ててください。

コメント