本文へ移動
情シスのミカタ
ニュース約5分で読めます

MistuneのInclude機能に脆弱性 外のファイルが読める 3.3.0へ

PythonのMarkdown変換の部品Mistuneで、Includeのディレクティブにパストラバーサルとクロスサイトスクリプティング(XSS)の脆弱性CVE-2026-115355が公表されました(High)。対象は3.2.0以下で、3.3.0で修正されています。Includeを有効にしているかで影響が分かれます。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
MistuneのInclude機能に脆弱性 外のファイルが読める 3.3.0へ

この記事のまとめ

  • PythonのMarkdown変換の部品Mistuneに、パストラバーサルとXSSの脆弱性CVE-2026-115355(High)が公表されました。対象は3.2.0以下で、3.3.0で修正されています。
  • 当たるのは、Includeのディレクティブを自分で有効にしている場合だけです。有効にすると、Markdownに書かれた相対パスで、置き場所の外のファイルを取り込めてしまいます。
  • 修正版の3.3.0は6月21日に出ていました。勧告のデータベースへの登録が10月だったため、そのあいだに作った環境や、版を固定した環境に古い版が残っていないかを確認します。
こんな方に#30代#40代#50代実務

PythonでMarkdownをHTMLに変える部品「Mistune」のIncludeのディレクティブ(別のファイルを取り込む書き方)に、脆弱性CVE-2026-115355が公表されました。深刻度はHighで、対象は3.2.0以下、修正版は3.3.0です。

当たるかどうかは、Includeを有効にしているかで決まります。Mistuneを入れているだけの会社が、すぐ慌てる話ではありません。

GitHubの勧告のデータベースのGHSA-h7ww-273w-6cm8の画面。題はMistune: Path Traversal and XSS in Include directive。深刻度はHigh、パッケージはmistune(pip)、対象の版は3.2.0以下、修正版は3.3.0。説明に、Includeのディレクティブが、解決したファイルのパスが元のディレクトリの中に収まるかを検証していないと書かれている。
Mistuneの勧告。3.2.0以下が対象で、3.3.0で修正出典: GitHub Advisory Database「GHSA-h7ww-273w-6cm8」(引用)

Includeが「置き場所の外」まで読んでしまう

勧告によると、問題は2つあります。

  • パストラバーサル: Includeは、取り込むファイルのパスが、元のMarkdownの置き場所の中に収まっているかを検証していません。../ を含む相対パスで、外にあるファイルを読めてしまいます
  • XSS(クロスサイトスクリプティング): エラーメッセージと、取り込んだファイルの中身が、HTMLのエスケープなしで出力されます。escape=True を指定していても同じです

勧告の分類はCWE-22(パストラバーサル)で、深刻度はHighです。勧告のデータベースには、CVSSの数値はまだ入っていません(2026年10月26日時点)。GitHubが示す悪用の見込み(EPSS)は0.461%でした。

Includeは、Mistuneの既定では有効になっていません。勧告は「プラグインとして明示的に有効にする必要がある」としています。Mistuneの文書は、Includeを「ドキュメント生成ツール向けの強力なプラグイン」と紹介しており、ほかのファイルを章として取り込む使い方が想定されています。

修正は6月に出ていた

修正のコミットは6月21日、修正版の3.3.0も同じ日に公開されています。GitHubの勧告のページにも、リポジトリ側では「6月21日公開」と表示されています。一方、CVE番号を付けた形で勧告のデータベースに載ったのは10月23日です(GitHubのAPIの記録)。

版 PyPIに出た日 状態
3.2.0 2025年12月23日 対象(勧告の表記)
3.2.1 2026年5月3日 3.3.0より前。修正のコミットより前のため、更新の対象(編集部の見立て)
3.3.0 2026年6月21日 修正版
3.4.0 2026年10月19日 修正済み。確認した時点の最新版で、Python 3.10以上が必要

勧告の表には「3.2.0以下」とありますが、修正のコミットは3.2.1のあとに入っています。VulnCheckの勧告も題で「3.3.0より前」としているため、3.2.1も更新の対象として扱うのが安全です。

修正の中身は、取り込むファイルの場所を実際のパス(シンボリックリンクを解いたあと)で調べ、元のディレクトリの外なら「Could not include outside source dir」というエラーにすることです。ファイルが自分自身や、互いを取り込み合う循環も止めます。取り込んだ中身は、エスケープが有効なら、HTMLにする前にエスケープされます。

3.3.0には、Includeのほかにも、処理が極端に遅くなる問題の修正(リンクの解析など)や、危険なURLスキームを止める修正が入っています。Includeを使っていなくても、更新する理由はあります。

Mistuneを使う代表的な部品

Mistuneは、ほかのツールの内部で使われることが多い部品です。確かめられた範囲は次のとおりです。

部品 Mistuneとの関係 当たるか
nbconvert(Jupyter Notebookの変換) 2.0.3以上4未満のMistuneを使う指定 mainブランチの既定のプラグインにIncludeは無い(10月26日確認)。自社で足していなければ当たらない
m2r2 最新の2.1.0が、Mistune 3.3以上3.4未満を要求 最新版を入れていれば、修正版の範囲に入る。古いm2r2を固定している環境は個別に確認

上の2つ以外は、確かめられていません。社内の文書の生成や、メモ・Wikiの表示に使っているPythonのアプリは、自社のコードで mistune を呼んでいる箇所を探すのが早道です。

影響する会社・しない会社

  • 影響する: Mistune 3.3.0より前の版を使い、Includeのディレクティブを有効にして変換している会社。Markdownを書く人が社外の人や、信頼できない入力(投稿・アップロード・外部のリポジトリ)を含む場合は、特に当たります
  • 影響しにくい: Includeを有効にしているが、Markdownを書くのが社内の文書の担当者だけで、変換の実行の権限も絞ってある会社。取り込める範囲が広いこと自体は変わらないので、更新はします(編集部の見立て)
  • 影響しない: Includeのプラグインを有効にしていない会社。Mistune 3.3.0以降(確認した時点の最新は3.4.0)を使っている会社

なお、Includeは、変換するファイルの場所が分かるときだけ働きます。3.3.0のコードでは、場所が渡されない変換は「Missing source file」というエラーになります。文字列だけを渡して変換している使い方は、さらに当たりにくくなります(編集部の見立て)。

更新できないときの対処

  • Includeのプラグインを外します。取り込みが要らなければ、これが確実です
  • 外せないときは、Markdownを書ける人を信頼できる範囲に絞ります。変換を動かすアカウントも、読ませてよいファイルだけにアクセスできる権限にします
  • 変換した結果のHTMLを、ブラウザーに出す前に、別のサニタイズの処理にも通します

確かめる手順

  1. 入っている版を調べます。 開発や運用のサーバー、CIの実行機、コンテナのイメージで pip show mistune を実行します。ロックファイル(requirements.txt、poetry.lock、uv.lockなど)でも、版を一覧にします。
  2. Includeを有効にしているかを調べます。 自社のPythonのコードで mistune を使う箇所を検索し、directives、FencedDirective、RSTDirective、Include の指定があるかを見ます。委託先が作ったアプリは、依頼先に同じ調査を頼みます。
  3. 3.3.0以降に更新します。 対象の版が入っていれば、3.3.0以降(最新の3.4.0はPython 3.10以上が必要なので、古いPythonでは3.3.0)に上げ、コンテナのイメージは作り直します。nbconvertのように別の部品が入れているときは、親の部品ごと更新します。
  4. 版を固定した環境を見直します。 版を固定していると、依存を入れ直しても古いままです。固定した理由を確かめ、更新の日取りを決めます。
  5. 同じ型の脆弱性を探します。 ほかの部品の include や「別のファイルを取り込む」機能も、パスの検証が同じように抜けていないかを、開発の部門に確認してもらいます。

同じPythonの部品では、filelockの脆弱性も10月に公表されています(Pythonのfilelockに脆弱性2件)。依存の版を一覧にする作業は、まとめて済ませると手間が減ります。

よくある質問

QMistuneを入れているだけで危ないですか。

A勧告は、Includeのプラグインを明示的に有効にする必要があるとしています。入れているだけ、または既定の設定で使っているだけなら、この脆弱性の条件には当たりません。ただし、ほかの修正も3.3.0に入っているため、更新は進めます。

QJupyterのnbconvertは対象ですか。

AnbconvertはMistuneを使います(Mistune 2.0.3以上4未満を許す指定)。ただし、2026年10月26日に当社が確認したnbconvertのmainブランチの既定のプラグインには、Includeが入っていません。自社でプラグインを足していなければ、この条件には当たりません。

Q更新できないときはどうしますか。

AIncludeのプラグインを外すのが確実です。外せない場合は、変換する人が信頼できる範囲(社内の文書の担当者だけなど)に限り、変換を動かすアカウントの権限を、読ませてよいファイルだけに絞ります。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月26日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします