【かたこんごう】

型混同(Type Confusion) とは?

最終更新:
💡 型を取り違えると、同じデータの意味が変わる

ある型の値やオブジェクトを、適合しない別の型として扱ってしまう不具合。処理の誤りを招き、メモリ操作を伴う実装では不正な読み書きなどにつながることがある。

📌 このページのポイント
同じ値でも、型で意味が変わる 整数として保存 ポインタと誤認 数値のデータ 場所を指す値? 共有するメモリ領域の例 被害は実装や防御の条件による
整数を保存した領域をポインタとして扱ってしまう一例。型混同が必ず不正なメモリ操作やサンドボックス脱出になるわけではない。
ひよこ ひよこ
型混同って何?
ペンギン先生 ペンギン先生
データを、その値に適合しない別の型として扱ってしまう不具合だよ。型はデータの意味や操作方法に関わるので、取り違えると計算や判定を誤る。メモリ操作を伴う実装では、不正な読み書きの原因にもなるんだ。
ひよこ ひよこ
具体例はある?
ペンギン先生 ペンギン先生
同じメモリ領域を複数の型で使う仕組みで、整数として保存した値を、誤ってポインタとして読む例があるよ。数として使うはずの値を、メモリの場所として扱ってしまう。実際にどんな操作が可能になるかは、実装や攻撃者が制御できる範囲によるんだ。
ひよこ ひよこ
ブラウザだけの問題?
ペンギン先生 ペンギン先生
ブラウザにも例があり、Chromeは2022年にV8の型混同を修正したと報告しているよ。でもブラウザ専用の問題ではない。CWE-843には、メモリ破損とは異なる処理の誤りも載っている。型の取り違えを、いつも同じ被害になるバグとして扱わないことが大事だね。
ひよこ ひよこ
すぐにパソコン全体を乗っ取られるの?
ペンギン先生 ペンギン先生
必ずではないよ。条件によって不正なメモリ操作やコード実行につながる可能性はあるけれど、その範囲は実装や防御によって変わる。サンドボックスは被害を封じ込めるための仕組みで、型混同だけで必ずその境界を越えられるわけではないんだ。
ひよこ ひよこ
どう防ぐの?
ペンギン先生 ペンギン先生
開発では、値が想定する型であるか、型を変えて扱う根拠が正しいかを確認する設計が必要だね。メモリの安全性と、JITが生成するコードや処理の正しさも分けて考えよう。利用者は、修正が提供されたソフトウェアを更新することが対策になるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「型混同」って出てきたら「データを適合しない別の型として扱ってしまう不具合」と思えればだいたいOK!
📖 おまけ:英語の意味
「Type Confusion」 = 型の混同
💬 type(データの型)+confusion(混同・混乱)で、プログラムが型を取り違えて動作してしまう状態を表しているんだよ。

参考資料

← 用語集にもどる