技術約6分で読めます

MariaDBの#mysql50#接頭辞でテーブル名のエンコードを回避できるCVE-2026-92262

いけさん目次

概要

項目内容
CVECVE-2026-92262
対象MariaDB Server(MySQLから分かれたコミュニティ版のフォーク)
深刻度CVSS v3.1 9.9(Critical、採番機関のGitHubによる評価)
原因古い #mysql50# 接頭辞を付けたテーブル名が、通常のファイル名エンコードを通らない
影響クラッシュ、データ破損、データの持ち出し、リモートコード実行の可能性
成立条件ネットワーク経由、低い権限のアカウントが必要、利用者の操作は不要
回避策なし。修正版への更新だけ
修正版10.6.28、10.11.19、11.4.13、11.8.9、12.3.3、13.0.2

CVEレコードの公開日は2026年10月16日で、最終更新は2026年10月21日だ。
2026年11月7日の時点で公開から3週間ほどの脆弱性だ。
一方で修正を含むリリースはそれより前の2026年8〜9月に出ているので、その時期以降にMariaDBを更新していれば、すでに修正されている可能性が高い。

このCVEはMariaDBのアドバイザリとして出たものだ。
ここで扱った原典はどれもMariaDB Serverだけを対象にしていて、Oracle版のMySQLが影響を受けるかどうかは書かれていない。
MySQLにも同じ問題があるとは言えないので、この記事ではMariaDBに限って説明する。

テーブル名とファイル名の対応

MariaDBは、テーブルをデータディレクトリの中のファイルとして保存する。
テーブル名にはファイル名に使いにくい文字も入れられるので、保存するときに名前をエンコード(安全な文字列へ変換)する。

GitHubのセキュリティアドバイザリの例では、a-b というテーブルは a@002db のようなファイル名で保存される。
ハイフンが @002d という形に置き換わっているわけだ。

ところが、テーブル名の頭に #mysql50# を付けると、このエンコードが行われない。
#mysql50#a-b という名前は、変換されないままの a-b というファイルに対応する。
これは、ファイル名のエンコードが導入される前のMySQL 5.0で作られたテーブルを読むための仕組みだと、アドバイザリは説明している。

flowchart LR
  A["テーブル名 a-b"] --> B["エンコードする"] --> C["ファイル a@002db"]
  D["テーブル名 #mysql50#a-b"] --> E["エンコードしない"] --> F["ファイル a-b"]

アドバイザリの題名は「歴史的な #mysql50# のテーブル名エンコード回避が原因の多数の問題」で、1つの不具合というより、この抜け道から派生した問題をまとめて1つのCVEにしている。
CVEレコードの弱点分類はCWE-706(名前や参照を誤って解決する)だ。

報告された具体的な症状

修正のもとになったMDEV-40362の題名は「#mysql50# がテーブルキャッシュとディスク上でテーブル名と混同される」となっている。
テーブルキャッシュは、開いたテーブルの情報をサーバーがメモリ上に持っておく仕組みだ。

チケットの再現手順では、MEMORYエンジンの t というテーブルを作り、続けて #mysql50#t という別名のテーブルを作ってデータを入れる。
そのあと t を SELECT すると、#mysql50#t に入れた行が返ってくる。
本来は別のテーブルのはずなのに、片方のデータがもう片方から見えてしまう、という症状だ。
報告者はAutomatticのセキュリティチームのBen Bidner氏で、チケットは2026年7月13日に作られ、7月22日に解決済みになっている。

MDEV-40362から派生した問題として、#mysql50# を付けたパーティション名で ADD PARTITION に失敗するとテーブルが消えるMDEV-41480も、チケット上で関連付けられている。

アドバイザリが挙げる影響は、クラッシュ、データ破損、データの持ち出し、リモートコード実行の4つだ。
ただ、どの操作でどの影響に至るかという攻撃手順は、アドバイザリにもチケットにも書かれていない。
リモートコード実行は「起こり得る影響」として挙げられているもので、具体的な実行方法が公開されているわけではない。

攻撃が成り立つ条件

CVSSのベクトルは AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H だ。
読み下すと、ネットワーク越しに攻撃でき(AV:N)、難しい条件はなく(AC:L)、低い権限のアカウントが必要で(PR:L)、利用者の操作は要らない(UI:N)、という評価になる。
S:Cは、影響がMariaDBの中だけにとどまらず、ほかの部分へ及び得るという意味だ。

外部から認証なしで突破されるタイプではなく、何らかのデータベースアカウントを持っていることが前提になる。
どの権限があれば成立するのかは、アドバイザリに明記されていない。
MDEV-40362の再現手順はテーブルを作って書き込む操作なので、少なくともその例ではテーブルを作れるユーザーが操作している。

共用のデータベースサーバーで利用者ごとにアカウントを配っている環境や、Webアプリの脆弱性を突かれてアプリ用のデータベースアカウントを使われた場合は、この「低い権限」の条件を満たしやすい。

悪用状況については、CVEレコードに付いているCISAの評価(SSVC)で、悪用は「none」、自動化は「no」となっている。
これはCISAが評価した時点の判定で、今後変わる可能性はある。

影響を受けるバージョンと修正版

影響範囲はCVEレコードとアドバイザリで一致している。
修正版の公開日は、MariaDB公式の各リリースノートの日付だ。

系列影響を受けるバージョン修正版修正版の公開日
10.610.6.1〜10.6.2710.6.282026年8月13日
10.1110.11.1〜10.11.1810.11.192026年8月24日
11.411.4.1〜11.4.1211.4.132026年8月24日
11.811.8.1〜11.8.811.8.92026年8月24日
12.312.3.1〜12.3.212.3.32026年8月24日
13.013.0.113.0.22026年9月15日

10.6.28、10.11.19、11.4.13、11.8.9、12.3.3の各リリースノートは、セキュリティの表にCVE-2026-92262(CVSS 9.9)を載せ、変更点にMDEV-40362を挙げている。
13.0.2のリリースノートにはセキュリティの節がなく、このCVEの記載は見当たらなかった。
13.0.2を修正版とする根拠は、CVEレコードとアドバイザリの修正版の一覧になる。

10.6系には注意がいる。
10.6.28のリリースノートには、10.6系の保守は2026年7月までで、10.6.28がこの系列の最終リリースだと書かれている。
10.6.28へ上げればこのCVEは塞がるが、この先の脆弱性の修正は10.6系には出ない。

対処

アドバイザリには「回避策はない。すぐに更新することを勧める」とある。
設定の変更で #mysql50# を無効にする方法は示されていないので、上の表の修正版以降へ更新するしかない。

動いているバージョンは、MariaDBに接続して SELECT VERSION(); を実行すれば確認できる。
LinuxディストリビューションのパッケージでMariaDBを入れている場合は、修正が別のバージョン番号のパッケージに取り込まれていることがあるので、各ディストリビューションのセキュリティ情報で、このCVEが修正済みかを確かめる。

公開日の表記について

このCVEは、見る場所によって日付がずれている。
CVEレコードは2026年10月16日に公開され、10月21日に更新された。
GitHubのアドバイザリのページでは公開日が2026年9月7日と表示されている。
修正を含むリリースは8月13日から9月15日にかけて出ていて、CVEの公開はその後になる。

修正版が先に配られ、脆弱性の詳細があとから公開された順番だ。
リリースノートのセキュリティの表だけを見て更新を後回しにしていると、CVSS 9.9の修正を見落としやすい。