sandboxing

3 posts

C言語の依存ライブラリがプロセス全体をクラッシュさせる。WebAssemblyがそれを防ぐ。

単一のCライブラリを隔離するためにコンテナを使うのは大げさすぎる。WebAssemblyにコンパイルし、WASIサンドボックス内で実行すれば、メモリ安全性、ケイパビリティベースのファイルシステムアクセス、クラッシュ封じ込めをDockerなしで実現できる。

Cライブラリ内でのたった一つのヌルポインタ参照が、アプリケーション全体をクラッシュさせることがある。そのライブラリがユーザー入力を解析したり、画像を展開したり、ネットワークプロトコルを扱うのであれば、一つの異常なパケットがクラッシュを引き起こす危険性がある。コンテナはこの問題を解決するが、一つの依存関係のためにDock…

依存関係は環境変数を読める。JavaScriptはそれを許している

Ambient Authorityとは、Node.jsプロセス内のあらゆるコードがファイルシステム、ネットワーク、環境に触れられる状態のことだ。ここでは、lockdown、compartment、明示的なcapabilityの受け渡しによってそれを剥ぎ取る方法を解説する。

一つの侵害された推移的依存関係が、あなたの を外部に漏洩し、ファイルシステムに書き込み、外向きの接続を開くことができる。自分のコードに脆弱性がある必要はない。同じプロセス内に存在するだけで十分だ。JavaScriptでは、デフォルトですべてのモジュールがランタイムの完全な権限を継承する。これがAmbient…

依存ライブラリがディスク上の任意のファイルを読める。cap-std は許可を求めさせる

Rust の標準ライブラリはあらゆる依存ライブラリに対して、暗黙的なファイルシステム権限を付与する。cap-std はそれを能力ベースの API に置き換え、コードがパスを開く前にそのアクセス権を証明することを強制する。

依存ツリーのどのクレートも、 を開いたり、 ディレクトリに書き込んだり、プロジェクト内のすべてのファイルを列挙したりできる。Rust の標準ライブラリは許可を求めない。 を呼べるコードなら、オペレーティングシステムが許すあらゆるパスに触れる権限を持つものとして扱う。 cap-std はこの前提を覆す。Rust の…