capability-based-security

6 posts

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

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

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

ネットワークの近接性はアイデンティティではない:サービスが環境的権限なしに認証する方法

サービス間の信頼の大半は暗号学的証明ではなく、ネットワーク上の位置関係に基づいている。以下では、ケイパビリティ、相互TLS、SPIFFEを使ってサービスが環境的権限なしに認証する方法と、その実現が予想以上に難しい理由を解説する。

あなたのマイクロサービスはVPCを共有しているため、互いを信頼している。この信頼は環境的権限である。サービスを呼び出す許可は、暗号学的証明ではなく、ネットワークトポロジーによって与えられる。境界を突破した攻撃者は、その権限をすべて相続する。…

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

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

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

あなたのサービスは知らぬ間の共犯者:Confused Deputy Attackの仕組み

Confused Deputy Attackは、特権を持つサービスを騙してその権限を悪用させる攻撃です。ここでは、攻撃者が暗黙の信頼をどう突くか、そしてcapability-based securityがなぜ解決策になるかを解説します。

あなたのサービスはクラウドストレージへのAPIキーを持っています。ユーザーがリクエストを送信します。あなたのサービスは忠実にファイルを書き込みます。ファイルはあなたのバケットではなく、攻撃者のバケットに着地し、彼らはあなたのデータを手に入れました。あなたは知らぬ間の共犯者になったのです。 これがconfused…

あなたの権限チェックは嘘をついている

ケイパビリティベースセキュリティは、散在するロールチェックを改ざん不可能な権限トークンで置き換える。コードを読みにくくすることなく TypeScript で実装する方法はこちら。

後になって振り返ると、すべての権限バグは同じ顔をしている。コールスタックの奥深くにある関数が、呼び出し元がすでに をチェックしたと想定している。実際にはチェックされていない。あるいは新しいロールが追加され、47ファイルを横断して を grep し、見落としていないか祈ることになる。…

もしすべての関数が、権限を前提とするのではなく受け取る必要があったら?

ほとんどのコードは ambient authority のもとで動作している。つまり、すべての関数があらゆるリソースに暗黙的にアクセスできる。capability-based security はこのモデルを覆し、関数に明示的でスコープ化された権限を受け取らせる。

あなたの 関数は、たまたま同じプロセス内に存在するという理由だけで、データベース、決済ゲートウェイ、監査ログへのすべてのアクセス権を持っている。攻撃者が 1 つの HTTP ハンドラーに injection bug…