【かたこんごう】
型混同(Type Confusion) とは?
💡 鍵のつもりで渡したのが、実はナイフだった
📌 このページのポイント
型混同って何の話なの?
オブジェクトを間違った型として扱ってしまうバグだよ。型が違うとメモリ上のフィールド配置も違うから、別の型として解釈すると意図しないアドレスを読み書きしてしまうんだ。
もう少し具体的に教えてほしいな。
たとえば型Aのオブジェクトが「整数、ポインタ」の順でフィールドを持つとするね。それを「ポインタ、整数」の順の型Bとして解釈すると、整数値がポインタとして読み取られてしまうんだよ。攻撃者はその整数値を細工することで、任意のメモリアドレスを指させられるんだ。
ブラウザでよく見つかるって聞いたけど、なんでなの?
JavaScriptのJITコンパイラは型推論で最適化するために、型チェックを一部省略することがあるんだよ。その省略箇所で型が変化すると型混同が起きてしまう。ChromeのV8やFirefoxのSpiderMonkeyでも多数報告されてきたね。
実際にどんな被害が出るの?
防ぐ方法はあるの?
まとめ:ざっくりこれだけ覚えればOK!
「型混同」って出てきたら「違う型として解釈させてメモリを誤操作する脆弱性」と思えればだいたいOK!
📖 おまけ:英語の意味
「Type Confusion」 = 型の混同
💬 type(データの型)+confusion(混同・混乱)で、プログラムが型を取り違えて動作してしまう状態を表しているんだよ。