2026/02/13 CyberSecurityNews — next-mdx-remote ライブラリに存在する深刻な脆弱性 CVE-2026-0969 が、セキュリティ・アドバイザリ HCSEC-2026-01 により明らかにされた。この脆弱性 CVE-2026-0969 により、信頼されていない MDX コンテンツをレンダリングするサーバ上で、任意のコード実行が可能となる。この脆弱性の影響が及ぶ範囲は、バージョン 4.3.0 〜 5.0.0 であり、修正版はバージョン 6.0.0 となる。

この next-mdx-remote は、Next.js ベースの React アプリ向けに広く利用されているオープンソース TypeScript ライブラリである。このライブラリは、データベース/API に加えて、ユーザー入力から取得した MDX (Markdown with JSX) を動的に処理し、サーバ/クライアントでのレンダリング可能にする。
攻撃の仕組み
Markdown の簡潔さと React コンポーネントを組み合わせた MDX は、ブログ/ドキュメント/ユーザー生成コンテンツに適している。
この脆弱性は、 serialize 関数と compileMDX 関数に存在する。これらの関数は、信頼されていない MDX 内の JavaScript 式に対して、適切なサニタイズを実装していなかった。
| Aspect | Information |
|---|---|
| CVE ID | CVE-2026-0969 |
| Affected | next-mdx-remote 4.3.0 to 5.0.0 |
| CVSS Score | Critical (estimated 9.8/10) |
| Impact | RCE on SSR with untrusted MDX |
波括弧 {} 内に eval()/Function()/require() などに挿入された悪意のコードが、サーバによる Server-Side Rendering (SSR) 中に処理されると、サーバ権限で実行されてしまう。
結果としてリモートコード実行 (RCE) が発生し、データ窃取/マルウェア設置/サーバ乗っ取りなどが引き起こされる。
JavaScript 式が有効化されている状況 (デフォルト設定) で、攻撃者により送信された {require(‘child_process’).execSync(‘rm -rf /’)} のような MDX は、サーバに検証されることなく実行されてしまう。
新たなバージョン 6.0.0 では大きな変更が導入され、JavaScript 式はデフォルトでブロックされるようになった (blockJS: true)。
“blockJS: false” で有効化する場合であっても、新たに blockDangerousJS: true ( デフォルト有効) が追加されているため、process/eval/require などはフィルタリングされる。
サーバ上で信頼されていない MDX を処理しているユーザーは、next-mdx-remote 6.0.0 へと速やかにアップグレードする必要がある。その上で、compileMDX または serialize の呼び出し箇所を監査すべきである。
ユーザーが提供する MDX を、サニタイズなしでレンダリングしてはならない。追加の防御として、remark-rehype などのライブラリを使用する必要がある。デフォルト変更による影響を検出するため、ステージング環境での検証も実施すべきである。
React アプリで Markdown と JSX を組み合わせて表示する際に便利な next-mdx-remote ライブラリに、サーバの完全な乗っ取りにいたる深刻な脆弱性が発見されました。この問題の原因は、MDX 内の波括弧 “{ }”で囲まれた JavaScript 式を処理する際の、サーバ側での不十分なサニタイズに起因します。通常、Markdown は静的なテキストとして扱われますが、MDX はプログラム (JavaScript) を実行できるという特性を持っています。そのため、攻撃者が “OS コマンドを実行せよ” といった悪意の命令を MDX に紛れ込ませると、サーバ上で正規のプログラムとして実行され、リモートコード実行 (RCE) を引き起こすという不備が生じています。ご利用のチームは、ご注意ください。よろしければ、React での検索結果も、ご参照ください。
You must be logged in to post a comment.