Confused deputy problem

Confused Deputy Problem （混乱した使節の問題）は、Capability-based securityの重要性を示す例として 情報セキュリティ分野で取り上げられる問題である。
ユーザ及びクライアントプログラムが、より権限の高い代理プログラムを使用する事により、想定外のセキュリティホールを生む可能性がある。

Deputy 
Deputy （使節、代理人）は、クライアントによって呼び出され、クライアントによって一時的に権限を与えられ、クライアントの代わりに（使節となって）働くアプリケーションである。クライアントは deputy にどのリソースに作用すべきか、その名前を提供する。deputy には作業に必要となる他の作用を行うための権限が組み込まれている。

例えばパスワードを変更するためのUNIXの passwd コマンドが好例である。一般のユーザはパスワードファイルへのアクセスが禁止されているが、このコマンドを用いるとパスワードファイルを操作することができる。

混乱した Deputy 
ここで、クライアントが自分には操作する権限のないリソースを指名したとしよう。deputy はそのリソースに対し通常どおり動作しようとする。deputy には十分な権限が組み込まれているから、セキュリティ機構はその動作を許可する。この組み込み権限の濫用のせいで、deputy は意に反して、セキュリティルールが排除しようとするクライアントの操作に対する間接的な共犯者になるのである。もしシステムの意味論が、「この動作は私のクライアントの権限に服すべきであります」などと deputy に主張させなければ、deputy を犯罪者にすることもないはずなのだ。

passwdコマンドの例を続けよう。このコマンドには、他のユーザのパスワードを変更するオプションがある。そのコマンドを起動したユーザの使節となって、他のユーザのパスワードを変更する権限がコマンド自体に実際に組み込まれているのである。セキュリティホールを防ぐには、passwdコマンド自体が厳しく（例えばルート権限下で動作していることを）チェックするより他ない。

Capability を用いた解決 
Capability を導入すると、この問題は解決する。クライアントから Deputy に渡される名前を capability とし、必要な権限を自然に含むようにする。Deputy はその capability を通じて動作する。クライアントは自分の所有しない capability を提供することはできないはずである。

passwdコマンドの例でいえば、この手法によってユーザは事実上パスワードファイルの中で自分自身のエントリーだけを変更できるようになる。passwdのようなコマンドを起動するプログラムも同様の制限を受ける。

関連項目 
 setuid

外部リンク 
 The Confused Deputy, the original article describing the problem
ここでは、home file licenseを与えられたコンパイラの出力オプションを悪用してコンパイラと同じディレクトリにある課金情報ファイルを上書き破壊する例が示されている。課金情報ファイルのファイル名が判りさえすれば、コンパイラのデバグ情報ファイルの名前を意図的に課金情報ファイルと同一にしてコンパイラを起動すればいい。ここでファイル名の代わりに、ファイル名と上書き権限を一体にした capability をコンパイラが要求すれば、コンパイラを起動した者が十分な権限を持たない場合ファイル出力段階で悪事を防ぐことができるとしている。

コンピュータセキュリティ