APIセキュリティ

今回はOWASP API Security TOP 10Excessive Data Exposureについて解説します。
Excessive Data Exposureは不要なデータを露出することで発生する脆弱性になります。
下記はOWASPで解説されているExcessive Data Exposureの概要になります。

Looking forward to generic implementations, developers tend to expose all object properties without considering their individual sensitivity, relying on clients to perform the data filtering before displaying it to the user.

上記の概要は開発者が情報の重要性を考慮せずにすべてのデータプロパティを露出して、クライアント側でフィルタリングしてユーザーに表示していることを述べています。

これはAPIから出力されるデータに表示すべきでない情報が含まれていて、それをクライアント側の処理、例えばHTMLでウェブブラウザに出力する時に制限して表示しているので、ユーザーからは必要なデータしか見えな状態になり問題に気がつきません。

これをシンプルな例で解説したいと思います。 あるユーザがアクセス可能なデータセンターAのサーバの情報が表示されるページがあります。
この画面を開く時、バックエンドのAPIからデータを取得し、ユーザーがアクセス可能なデータセンターAのサーバ情報が画面に表示されます。
しかしユーザーがアクセスするウェブページではなく、バックエンドのAPIに直接リクエストを送信して表示してみると、データセンターAのサーバ一覧が表示され、ユーザーAがアクセスできるサーバ以外にも情報が参照できるような状態になっています。
/api/datacenter/A/servers
このAPIへリクエストを送信すると、以下のようなレスポンスが返ってきます。
[
 {"id":"001","server_name":"xxxxx1","ip_addr":"x.x.x.1","group","1"},
 {"id":"002","server_name":"xxxxx2","ip_addr":"x.x.x.2","group","1"},
 {"id":"003","server_name":"xxxxx3","ip_addr":"x.x.x.3","group","2"},
 ..
 ..
 ..
]

本来ユーザーはグループ1に属していてアクセスできるサーバのデータが、001と002だけなのですが、裏側ではそれ以外のデータが出直され、クライアントサイドでフィルタリングがかかっているだけの状態になります。
攻撃者は表から見える情報だけではない、バックエンドに直接アクセスしてデータを参照しますので、クライアントサイドのフィルタリングに頼る制御は非常に危険なことがわかります。

また名前とニックネームだけ表示する画面で、実は裏ではクレジットカードや住所、電話番号など個人情報が無防備に出力されている状態であれば、個人情報を適切に保護していない状態になりますので、適切に修正することが必要になります。

クライアントサイドの制御は攻撃者から見れば簡単に回避できますので、APIから出力されているデータが過度な情報を提供していないか、また個人情報のような機密情報が露呈していないか、開発時に確認することが重要になります。
実際に脆弱性診断の現場でも、ある箇所で表示される過度な情報から別のAPIの送信パラメータでその情報を活用することで、開発者が意図していない情報が表示される事例が発見されるケースがあります。
情報の入力に加えて、情報の出力の制御をしっかり行うことがExcessive Data Exposureへの対策のポイントになります。

 

関連リンク