WebAssembly のセキュリティが「構造的に」強い理由
WASM のセキュリティは、ライブラリやランタイムの「努力」ではなく、仕様レベルで担保された構造的なもの。
1. メモリ隔離(Linear Memory)
各 WASM モジュールは 自分専用の独立メモリ空間 しか触れない。ホスト OS やブラウザのメモリには 物理的にアクセス不可。バッファオーバーフローが起きても、被害はそのモジュール内に閉じる。
2. 構造化制御フロー
関数の戻り先・ジャンプ先は コンパイル時に検証済み。マルウェアの常套手段(ROP / 関数ポインタ書き換え)が そもそも実行できない構造。
3. ケーパビリティセキュリティ(WASI)
POSIX = 「自分の権限で何でもできる」モデル。
WASI = 「明示的に渡されたケーパビリティしか持てない」モデル。
例:ファイル読込は「ホストが事前に開いて渡したハンドル」経由でのみ可能。
4. デフォルト Deny
何も渡さなければ、何もできない。npm の悪意あるパッケージのような「インストールした瞬間に環境変数を盗む」攻撃が 構造的に成立しない。
Node.js は「全権限を持つコードに、後から制限をかける」。
WASM は 「最初から無権限。必要な権限だけ渡す」 — 発想が逆転している。