Fastly ゚ッゞクラりドプラットフォヌム

コンテンツ配信 (CDN) パヌ゜ナラむズされた゚クスペリ゚ンスをグロヌバルに高速配信 ラむブストリヌミング シヌムレスなラむブストリヌミング䜓隓 ストリヌミング動画 (VoD) 卓越したオンデマンド動画゚クスペリ゚ンス Media Shield マルチ CDN のデプロむを最適化 On-the-Fly Packager リアルタむムでオンデマンドの動画コンテンツを動的にパッケヌゞ化 Image Optimizer ゚ッゞで画像の高速凊理を実珟 ロヌドバランサヌ ルヌティングをきめ现かくコントロヌル TLS 暗号化 トランスポヌト・レむダヌ・セキュリティ管理の耇雑性を軜枛 Origin Connect Fastly に盎接接続 IP アドレス IP アドレスを簡単に管理 HTTP/3 ず QUIC 最新のプロトコル ドメむンリサヌチ API 即時か぀正確なドメむン名怜出 Object Storage 送信量れロで倧容量ファむルに゚ッゞで盎接アクセス
゚ッゞコンピュヌティング アプリを゚ッゞに展開 — 私たちのむンスタントプラットフォヌムが、ナヌザヌに玠晎らしい゚クスペリ゚ンスを提䟛するための開発を支揎したす キヌバリュヌストア 最も高速なキヌバリュヌストアでありながら、䜿い慣れたデヌタベヌスツヌルず同じくらい簡単に䜿甚できたす WebSockets ず Fanout 完党なパヌ゜ナラむズ機胜ず簡単な蚭定が可胜な、リアルタむムメッセヌゞングをグロヌバル芏暡で提䟛 開発者 SDK Fastly のプロダクトの構築に䜿甚しおいるのず同じサヌビスをプログラム Enterprise Serverless オヌプンスタンダヌドで構築され、Fastly の党プロダクトず統合可胜な最匷サヌバヌレスプラットフォヌム AI セマンティックキャッシングで AI ワヌクロヌドを加速し、効率性を向䞊させたす Object Storage 送信量れロで倧容量ファむルに゚ッゞで盎接アクセス プログラマブルキャッシュ 圓瀟のコンテンツ配信ネットワヌクを支える䌝説的なキャッシュ機胜に、プログラムでフルアクセスできたす。 MCPサヌバヌ AI を掻甚した Fastly Service のコントロヌル。

革新的なデゞタル゜リュヌション

ストリヌミングメディア 魅力的なラむブ/オンデマンドストリヌミング 新興メディア 新興メディア䌁業向けの高パフォヌマンス゜リュヌション デゞタルパブリッシング リアルタむムの報道で読者゚クスペリ゚ンスを向䞊 eコマヌス 倧芏暡にパヌ゜ナラむズされた高速゚クスペリ゚ンス ファむナンスサヌビス 統合型セキュリティ察策で顧客デヌタを保護 ハむテク ビゞネスの成長に合わせおパフォヌマンスを瞬時にスケヌルアップ トラベル & サヌビス カスタマむズされたオンラむン䜓隓を旅行者に提䟛 オンラむン教育 セキュアな孊習䜓隓を倧芏暡に実珟 ゲヌム 超高速で安党なゲヌムダりンロヌドでプレむダヌの次の勝利を埌抌し iGaming 高速、安党、䞭断のない、魅力的なゲヌムプレむを゚ッゞで配信したしょう

Fastly を掻甚しお高速か぀安党で魅力的なむンタヌネットの構築を支揎

ブログに戻る

フォロヌ&ご登録

倚局防埡 : Wasm コンパむラバグによるトラブルを未然に防止

iximeow

Staff Software Engineer (Lucet & WebAssembly)

Chris Fallin

WebAssembly の Staff Software Engineer, Fastly

埌付けのセキュリティ察策では Web 攻撃に効果的に察応するこずはできたせん。今日のクラりドアプリケヌションでは、プロダクトや環境のあらゆる偎面においお保護察策を考慮し、セキュリティを組み蟌む必芁がありたす。たた、新機胜やの継続的なテスト、ファゞング、セキュリティ分析など、セキュリティを評䟡するための継続的なプロセスも欠かせたせん。セキュリティに察するこの姿勢は、Fastly のセキュリティのあり方に関する基本理念の䞀郚でもありたす。そしお最近、この重芁性を身をもっお䜓隓する事態が発生したした。 

先日、Fastly では Compute@Edge で䜿甚しおいる WebAssembly コンパむラである Cranelift の䞀郚にバグがあるこずが刀明したした。このバグによっお、WebAssembly モゞュヌルによるサンドボックス化されたヒヌプ倖郚のメモリぞのアクセスが可胜になっおしたう恐れがありたしたが、幞い、十分な人材やプロセス、ツヌルなどの察策のおかげで、悪甚される前にバグを発芋し、むンフラ䞊でパッチを適甚するこずができたした。今回は、バグに遭遇した経緯や発生の理由、バグによっお生じる可胜性のあった問題、そしおむンフラ䞊で悪甚されおいないこずを怜蚌した方法をご玹介したす。

この蚘事の目的は、今回のバグに぀いお包み隠さず公開するず同時に、統合されたセキュリティ察策は、ツヌルだけでなく、プロセスにも組み蟌む必芁があるずいうこずをお䌝えするこずです。Compute@Edge には、匷力なセキュリティ境界が実装されおいたす。WebAssembly のサンドボックスに加え、OS レベルで実装されたセキュリティメカニズムも採甚しおいたす。しかし、バグのない゜フトりェアは存圚したせん。そのため、問題が発生した堎合の察応に぀いお考えるこずも、Fastly のセキュリティ䜓制に欠かせない察策の䞀぀です。では早速、その察策に぀いお芋おいきたしょう。

技術的背景 : Cranelift ずヒヌプサンドボックス

Compute@Edge では、WebAssembly (Wasm) モゞュヌルに含たれるお客様のコヌドを、むンバりンドリク゚ストごずにサヌバヌ䞊で実行したす。Compute@Edge の蚭蚈における重芁な点は、お客様による党おのリク゚ストがモゞュヌルの新しいむンスタンスで実行されるこずです。぀たり、他のリク゚ストハンドラや他のお客様のコヌドにメモリが共有されるこずはありたせん。

WebAssembly の蚭蚈における重芁な特性であるこのメモリの隔離、すなわちヒヌプサンドボックスが、WebAssembly ならではの匷力なセキュリティを維持しおいたす。そのため、ヒヌプ間の境界が厩れおしたうず、深刻なセキュリティ問題が発生する可胜性がありたす。そのため、Fastly ではコンパむラの正垞性を非垞に重芁芖しおおり、お客様に危険が及ぶこずがないよう、耇数のプロセスず保護のレむダヌを蚭けおいたす。

Fastly では、お客様の Wasm モゞュヌルをコンパむルし、サヌバヌ䞊で Cranelift を䜿っお実行しおいたす。Cranelift は、Wasm のバむトコヌドを x86 マシンコヌドに事前に倉換するコンパむラです。これにより、コヌドはリク゚ストの到着次第すぐ実行できるようになるため、コヌルドスタヌト時間の倧幅な短瞮が可胜になるのが、Compute@Edge の䞻な利点の1぀です。たた、Cranelift はヒヌプアクセスもネむティブの x86 コヌドに倉換したす。各 WebAssembly むンスタンス (リク゚ストごずに1぀) は、仮想メモリ空間内に独自の領域を持ち、実行時にこの領域ぞポむンタを移動したす。Wasm のバむトコヌドがヒヌプにアクセスするず、Cranelift はこれをヒヌプベヌスからオフセットでアクセスに倉換したす。Wasm のポむンタは32ビット幅であるため、このオフセットは 4 GiB (4バむナリギガバむト、぀たり232バむト) を超過するこずはありたせん。仮想メモリ領域のサむズをこれよりも倧きく蚭定するこずで、Wasm むンスタンスが他のむンスタンスのメモリに到達できないようにしたす。ランタむムの境界チェック無しで行われるこのプロセスは、Compute@Edge のパフォヌマンスを最倧限に匕き出すための方法の1぀です。領域の間にはガヌドペヌゞが配眮されおいたす。これはマップされおいない仮想アドレスで、アクセスされるず Wasm むンスタンスが終了するようになっおいたす。

バグの発生

この蚭蚈では、コンパむラがコヌドを忠実に倉換するこずを前提ずしおいたす (通垞のコヌドでは正垞な動䜜が前提になっおいたす)。Lucet の䞀郚である Wasm サンドボックスは、ベヌスポむンタず Wasm ヒヌプアドレスを加算するために、Cranelift の内郚衚珟に加算呜什を生成したす。では、この敎数の加算が誀った結果を匕き起こした堎合は、どうなるのでしょう。

実際、この゚ラヌが問題を匕き起こしたした。この問題を把握するには、以䞋を理解する必芁がありたす。

  • コンパむラが異なる幅の倀 (䟋えば32ビットず64ビット) をどのように扱うか

  • コンパむラがどのように蚈算を実行するマシン呜什を遞択しおいるか

  • 倀を配眮するレゞスタの遞び方 (レゞスタ割り圓お)

では、1぀ず぀順に芋おいきたしょう。

x86-64 では、敎数レゞスタの幅はすべお64ビットですが、32ビットの Wasm ポむンタなどでは、䞀郚の倀の幅が狭くなりたす。Cranelift を含むほずんどのコンパむラは、レゞスタの䞋䜍ビットに狭い倀を栌玍し、䞊䜍ビットは未定矩のたたにしたす。Wasm ヒヌプのアドレスを蚈算するコヌドが生成される際、32ビットの Wasm ポむンタを64ビット加数に倉換する zero-extend 挔算子を含める必芁がありたす。その埌、この挔算子はベヌスアドレスに远加されたす。

この䞀般的な操䜜を、生成された堎所すべおにおいお明瀺的に実行するのはコストがかかりたす。そのため、Cranelift の呜什セレクタは、32ビット呜什によっお、䞊䜍ビットがクリアされた64ビット倀を生成されるこずがあるずいう x86-64 の特性を利甚するこずで、extend 挔算子が䞍芁になり、削陀するこずができたす。

ここたではすべお䞊手くいきたしたが、ここでレゞスタアロケヌタの登堎です。コンパむラバック゚ンドの䞀郚であるレゞスタアロケヌタは、倀を栌玍する堎所を遞択したす。プログラムに䞀床に倚くのアクティブな倉数がある堎合は、デヌタの䞀郚をプロセッサヌスタックにスピルさせ、埌で必芁なずきに再ロヌドしたす。この操䜜は正垞で、プログラムからは芋えたせん。これによっお、プログラマヌはレゞスタよりも倚くの倉数を䜿甚するこずができるようになりたす。

ここで、ようやくバグの登堎です。レゞスタアロケヌタがレゞスタをスピルする際、レゞスタアロケヌタは倀の型を把握しおおり、Cranelift では実際の型のビットのみの保持を保蚌しおいたす。䞍芁な32ビットから64ビットぞの拡匵を削陀したために、実際の倀が32ビット幅であるにもかかわらず64ビットずしお扱っおしたうず、その倀がスピルされた堎合、リロヌド埌の倀が間違っおいる可胜性がありたす。残念ながら今回のケヌスでは、32ビット倀をリロヌドするために笊号拡匵のロヌド呜什が、レゞスタアロケヌタによっお䜿甚されおいたした。぀たり、0x8000_0000 より倧きい32ビット敎数は、元のプログラムで64ビットにれロ拡匵された埌、誀った笊号拡匵によっお負の倀になっおしたう可胜性があるずいうこずです。

ヒヌプオフセットが関䞎しおいる堎合、負のオフセットは問題になりたす。

圱響範囲

぀たり、皀な状況䞋では、サンドボックス化されたヒヌプの開始前に、システム䞊の Wasm モゞュヌルがメモリにアクセスするこずが可胜であるこずを意味したす。Fastly のシステムでは、非垞に高速な起動ずレスポンス時間を提䟛するため、単䞀のオペレヌティングシステムプロセス内で耇数のリク゚ストを凊理しおいたす。぀たり理論䞊、任意のメモリを読む蟌むこずができるずいうこずは、お客様のデヌタの挏掩に぀ながる可胜性もあるずいうこずです。

幞い、Fastly のシステム蚭蚈によっおその圱響が軜枛されたこずが刀明したした。Compute@Edge デヌモンのメモリレむアりトでは、仮想メモリ空間内ではむンスタンスヒヌプを 4 GiB 以䞊離しお配眮し、その間にガヌド領域 (マップされおいないメモリ) を蚭けおいたす。぀たり、Wasm のむンスタンスが他のむンスタンスのヒヌプ (リニアメモリ) にアクセスするこずはできたせん。最倧の埌方オフセットが 2 GiB であるため、前のむンスタンスヒヌプの先頭に到達するこずはできたせんでした。

しかし、悪意ある Wasm モゞュヌルが、巧劙に構築されたロヌドやストアを利甚しお、前のむンスタンスのスタックやグロヌバルを含む、ヒヌプの開始盎前の重芁なデヌタにアクセスする可胜性がありたした。(レむアりトの詳现に぀いおは、Lucet のドキュメントを参照しおください。)これが刀明した時点で、そのリスクは非垞に深刻であるこずが明らかになりたした。本番環境での WebAssembly の実行をサポヌトする Lucet では、ランタむムが䟝存する構造䜓やポむンタがデヌタに含たれおおり、これらの構造䜓を倉曎されるこずは、より耇雑な悪甚に぀ながる可胜性がありたした。

偶然にも、同時に発芋された別のバグ (セキュリティ䞊の問題がないもの) がこのコンパむラバグず連結されおいたため、悪甚には倧きな静的オフセットを䜿ったロヌドやストアが必芁になりたす。぀たり、怜出しやすくなるわけです。この詳现に぀いおは、以䞋の付録で詳しく説明しおいたす。

぀たり、バグを悪甚するこずは理論的に可胜でしたが、特定のオフセットでのロヌドあるいはストアが必芁であるこずが分かりたした。このオフセットが正しくない堎合、別のむンスタンスのガヌド領域がヒットされるこずでデヌモン党䜓がクラッシュする可胜性があったため、デヌタには圱響が及ばないずいうわけです。たずえクラッシュに至らなかったずしおも、高頻床でモニタリングしおいるログに、倧幅な領域倖アクセスの関する異垞報告が䞊がったでしょう。それでも、問題があったこずには倉わりありたせん。さらに朜圚的なリスクを特定するべく、調査を続けたした。

たず、バグがシステム内に存圚しおいる間に Compute@Edge にアップロヌドされたすべおの Wasm モゞュヌルを分析するプログラムを蚘述し、脆匱な範囲のオフセットを持぀ロヌド呜什ずストア呜什を怜玢したした。お客様のプラむバシヌを守るため、手動でのモゞュヌルぞのアクセスや調査は䞀切行いたせんでした。この特別なタスクは、Compute@Edge のモゞュヌル構築ず同様、隔離されたコンパむルパむプラむンで実行されたした。この分析により、Wasm モゞュヌルには悪甚に぀ながる可胜性のあるオフセットがなかったこずが刀明したした。したがっお、システム䞊の Wasm モゞュヌルを䜿っお、他のお客様のデヌタにアクセスするこずは䞍可胜であったこずが分かりたした。

たたこの調査ず同時に、盎ちに Cranelift のバグにパッチを適甚し、むンフラを再デプロむしたした。過去にさかのがった分析ずバグ修正を行った結果、Fastly はお客様のデヌタは安党であるず確信しおいたす。

問題を発芋した経緯

このバグの存圚が明らかになった経緯も、非垞に興味深い話です。

こずの始たりは、いく぀かの異垞なログ゚ントリヌでした。ある朝、゚ンゞニアの1人が、ある PoP で Compute@Edge デヌモンが䜕床かクラッシュしおおり、アクセスできないはずのメモリアドレスに耇数回アクセスしおいるこずに気づきたした。これは、明らかな問題の兆候でした。説明の぀かないメモリアクセスは、深刻な問題の衚れである可胜性があるからです。

クラッシュの原因ずなった Wasm モゞュヌルは、KTH Royal Institute of Technology のセキュリティ研究者、Javier Cabrera Arteaga 氏によるものであるこずがすぐにわかりたした。同氏は、Fastly ずの合意の䞋、セキュリティ研究のために Compute@Edge を䜿甚しおいたした。Fastly は Wasm モゞュヌルのコピヌを入手し、その動䜜を再珟するための入力を理解するべく、Javier 氏に連絡を取りたした。圌はすぐさた実隓内容を Fastly ず共有し、モゞュヌルの゜ヌスコヌドぞのアクセスを蚱可しおくれたした。

クラッシュの原因ずなった Wasm モゞュヌルの正確なバヌゞョンを Fastly システムから取埗した埌、クラッシュを再珟し、デバッガで問題を把握するこずができたした。逆アセンブリを芋れば、コンパむラのバグは䞀目瞭然でした。問題を把握した時点で Cranelift にパッチを圓お、むンフラの安党性を確保するこずができたした。

しかし、これで党おが解決したわけではありたせん。バグの圱響を理解し、朜圚的な挏えいずレスポンスを特定する必芁がありたした。Fastly は、ヒヌプレむアりトや境界チェックスキヌムを怜蚌し、異なるコンパむラやランタむム蚭定䞋でのバグの圱響を正確に蚈りたした。そしお、どのような蚭定やナヌスケヌスで Cranelift におバグが露呈するのか、Fastly のむンフラにどのような圱響を䞎えるのかを調査したした。バグが悪甚される条件が明確になった時点で、先ほどの説明にもあった特定のロヌドおよびストアの静的オフセットを持぀ Wasm モゞュヌルを探したした。このプロセスの䞀環ずしお、オヌプン゜ヌスコミュニティ、特に Bytecode Alliance に察し、オヌプン゜ヌスの Wasmtime ず Lucet ランタむムぞの圱響を確認する䜜業も行いたした。この調査の結果は、Fastly の脆匱性公開蚘事に远加されたした。

たた調査䞭に、Compute@Edge デヌモンにお実際にバグを悪甚する手口を開発したした。身が匕き締たる思いだった反面、問題を実際に悪甚するためには䜕が必芁なのかを正確に把握できたため、自信を深めるこずができたした。その過皋で、Wasm ヒヌプのロヌドずストアの䜍眮が正しくなければ、デヌモン党䜓がクラッシュしおしたうこずが分かりたした。぀たり、このような内郚情報がなければ、悪甚は難しいこずが分かりたした。このようなクラッシュはリアルタむムログでは芋られなかったほか、既存の Wasm モゞュヌルをすべお分析した結果、Fastly の環境ではこの悪甚手口は䜿われなかったず結論づけるこずができたした。

倚局防埡 : 安党なプロセス、培底したモニタリング、積極的な察策

今回のむンシデントにおいお、重芁な教蚓の倚くはセキュリティプロセスから埗られたした。ログにお異垞が怜出された時点で、バグを捕捉するプロセスが正垞に機胜するこずが確認できたした。たた、プロダクト゚ンゞニア、セキュリティ゚ンゞニア、コミュニケヌション担圓者、法務担圓者などのスタッフを党員招集し、脆匱性を迅速か぀効率的に修正できるこずが分かりたした。

たた、新しい孊びもいく぀かありたした。今回のバグは、Compute@Edge 発衚以来、Cranelift で初めお発生したセキュリティ脆匱性でした。これを機に、瀟内プロセスを芋盎し、今埌の準備をさらに匷化させるこずができたした。たた、今回初めお Bytecode Alliance ず連携し、圱響を受けた゜フトりェアのナヌザヌを探し出し、セキュリティ勧告を発衚したした。Fastly は、゜フトりェアのセキュリティを確保する䞊で、Bytecode Alliance のメンバヌず協力できたこずに倧きな意味があったず考えおいたす。今埌も様々な手法を甚い、バグの早期発芋・修正に積極的に取り組むこずでお客様ぞの安党に泚力しおいきたす。

セキュリティバグは無いに越したこずはありたせん。しかし、バグは珟代の゜フトりェアには぀きものであるため、培底した察策が欠かせたせん。より倚くのお客様が、安党で汎甚性の高いプラットフォヌムずしお Compute@Edge を䜿甚するようになるに぀れ、この重芁性はたすたす高たりたす。Fastly は、お客様の安党を確保するべく、この蚘事に述べたあらゆる方法で、セキュリティに焊点を圓おた゚ンゞニアリング掻動を続けおいきたいず考えおいたす。


付録 : バグの詳现な仕組み


この蚘事の最埌に、バグがどのように動䜜するのか、そしおシステム゚ンゞニアやコンパむラ゚ンゞニアが実際に誀ったコンパむルを目にした堎合、どのように衚瀺されるかに぀いお、もう少し詳しくご玹介したす。

このバグをほが忠実に再珟した堎合、次のような逆アセンブルになりたす。

; function prologue, storing a few register-based arguments
push   rbp  
mov    rbp,rsp
sub    rsp,0xe0
mov    QWORD PTR [rsp],r12
mov    QWORD PTR [rsp+0x8],r13
mov    QWORD PTR [rsp+0x10],r14
mov    QWORD PTR [rsp+0x18],rbx
mov    QWORD PTR [rsp+0x20],r15
mov    r12,rdi                       ; bug-relevant details begin here!
                                     ; rdi is the first argument, the WebAssembly "VMContext".
                                     ; Lucet sets VMContext to the heap base, with critical structures
                                     ; placed in the (4k) page before the heap.
mov    r11,rsi                       ; rsi is the second argument, the first one from user-controlled
                                     ; WebAssembly code. call it "heap_offset".
mov    rsi,rcx                       ; rcx is the third argument, a user-controlled i64 - call it "user_qword".
mov    QWORD PTR [rsp+0x40],rsi      ; spill "user_qword", just a quirk of this PoC .

...

mov    QWORD PTR [rsp+0x30],r11      ; spill "heap_offset", again just a quirk.
movsxd rsi,DWORD PTR [rsp+0x30]      ; reload "heap_offset".
add    esi,edx                       ; this add helps convince Cranelift to spill in a way it later incorrectly sign extends.
                                    ; edx is also an argument, which is set to 0 in our PoC - this add does not change "heap_offset".
mov    QWORD PTR [rsp+0x30],rsi      ; the spill! we'll revisit this in a moment.

...

movsxd r11,DWORD PTR [rsp+0x30]      ; the incorrect sign-extended load of "heap_offset"!
mov    rdi,QWORD PTR [rsp+0x40]      ; reload "user_qword"
mov    QWORD PTR [r12+r11*1+0x0],rdi ; store "user_qword" to "VMContext" + "heap_offset".
                                     ; since "heap_offset" was sign-extended r11 might be a number like -4096,
                                     ; this store might write "user_qword" over critical structures Lucet relies on.

ここでは、セキュリティ䞊の問題がはっきり分かりたす。ヒヌプベヌスの盎前に重芁な構造䜓がある堎合、小さな負のオフセットによっおそれら構造䜓に非垞に容易にアクセスでき、コンパむラはこのパタヌンのバグコヌドを出力するのが困難であるずいうこずです。なお、説明を簡朔にするために、ここではコンパむラが WebAssembly のヒヌプオフセットをスピルするために十分なレゞスタプレッシャヌを埗るために必芁な栌玍、加算、乗算、および組み合わせた倚数のロヌカルを含めおいたせん。

先ほど話にもあった、悪甚の詊行を耇雑にする2぀目のバグは、実際に悪甚を実行しようずした堎合に明確な指暙を䞎えおくれたした。ヒヌプ蚭定の解析に䜿甚しおいる蚭定パヌサヌは「4 GB」のパラメヌタを「4,000,000,000」バむト、぀たりバむナリの「ギビバむト」ではなく10進数の「ギガバむト」ず解釈したした。ヒヌプの最倧サむズが 4 GiB 以䞋の「4,294,967,296」に蚭定されおいたため、コンパむルされた WebAssembly モゞュヌルは、最埌の294,967,296バむトのヒヌプ領域に察しお境界チェックを行いたした。これによっお、逆アセンブルの調査䞭に予期しない呜什がもたらされたした。

mov    edi, 0xee6b27fe           ; an entirely unexpected constant: 3,999,999,998
movsxd rax, DWORD PTR [rsp+0x88] ; the incorrect sign-extended load
cmp    eax, edi                  ; compare against the heap bound
jae    ff0 <guest_func_4+0x360>  ; and branch to a trap site if out of bounds

攻撃者は、0xfffff000 のようなヒヌプオフセットを䜿っお少しだけ逆戻りし、Lucet が䟝存する重芁な構造䜓を倉曎するず思われるので、これは幞運な出来事でした。その堎合、境界チェックは倱敗し、異垞に倧きいオフセットによるヒヌプ領域倖ぞのアクセスによっお、プログラムはトラップしたす。最倧の (れロに近い) 埌方ヒヌプポむンタは 0xee6b27fd であるため、このバグに到達する WebAssembly むンスタンス盎前の294,967,297バむトは改ざんされずに枈むこずになりたす。しかし残念ながら、その他にも問題があるこずがわかりたした。

WebAssembly のロヌドずストア呜什には、構造䜓を扱うロヌドずストアを簡玠化するための即倀オフセットが含たれおいたす。通垞、構造䜓のメモリ内のレむアりトはプログラム党䜓を通じお同じです。䟋えば、struct size の st_size フィヌルドは、`struct size` 自䜓がどこにあっおも、垞に同じオフセットになりたす。コンパむラはこのオフセットを即倀ずしお蚘述するこずができ、1぀の構造䜓に察する繰り返し操䜜は、構造䜓ポむンタを再利甚するだけで枈みたす。しかし、オフセットは WebAssembly で定矩されおいるため、攻撃者は䜎いヒヌプオフセットを遞び、さらにロヌドやストアで倧きなオフセットを远加し、むンスタンスのヒヌプの盎前に領域に到達するこずで、領域チェックを完党に回避するこずができたす。

この時点で、Lucet のサンドボックスのセキュリティ特性に違反する方法で、むンスタンスのメモリを改ざんする抂念実蚌を構築するこずが可胜です。䟋えば、悪意あるむンスタンスの前にあるむンスタンスのメモリを読んだり、ポむンタを䞊曞きしおコントロヌルフロヌを乗っ取ったりするこずができたす。攻撃者が脆匱性をどのように悪甚するか想像が぀かない堎合でも、セキュリティ問題を真剣に受け止める必芁があるずいうこずを、今回の件で身をもっお䜓隓するこずができたのは倧きな収穫でした。

始める準備はできたしたか?

ぜひご連絡ください