脅威エージェント / 攻撃ベクトル | セキュリティ弱点 | 影響 |
---|---|---|
API固有:悪用可能性 容易 | 普及度 一般的:検出可能性 平均 | 技術的 深刻:特定のビジネスに依存 |
この問題を悪用するには、攻撃者が対象APIが統合している他のAPIやサービスを特定し、その後侵害する必要があります。通常、この情報は公に利用可能ではないか、統合されたAPIやサービスが容易に悪用可能ではありません。 | 開発者は、外部または第三者のAPIとやり取りするエンドポイントを信頼し、検証しない傾向があります。これには、輸送セキュリティ、認証/認可、および入力の検証およびサニタイズに関するより弱いセキュリティ要件が含まれます。攻撃者は、対象APIが統合しているサービス(データソース)を特定し、最終的にはそれらを侵害する必要があります。 | 影響は、対象APIが引き出したデータをどのように処理するかによって異なります。攻撃が成功すると、権限のないアクターに対して機密情報が露出したり、多種多様なインジェクションまたはサービス妨害が発生する可能性があります。 |
APIは脆弱ですか?
開発者は、ユーザー入力よりも第三者APIから受け取ったデータを信頼する傾向があります。これは特によく知られた企業によって提供されるAPIに関して当てはまります。そのため、開発者は入力の検証およびサニタイズに関して、より弱いセキュリティ基準を採用する傾向があります。
APIが脆弱である可能性があるのは以下の場合です:
- 他のAPIと暗号化されていないチャネルでやり取りしている場合;
- 他のAPIから収集したデータを適切に検証およびサニタイズせずに処理するか、下流のコンポーネントに渡す場合;
- リダイレクトを無条件に追跡する場合;
- 第三者サービスのレスポンスを処理するためのリソース数を制限していない場合;
- 第三者サービスとの相互作用にタイムアウトを実装していない場合。
攻撃シナリオの例
シナリオ #1
あるAPIは、ユーザーが提供したビジネスアドレスを豊かにするために第三者サービスに依存しています。エンドユーザーがAPIにアドレスを供給すると、それが第三者サービスに送信され、返されたデータがローカルのSQL対応データベースに保存されます。
悪意のあるアクターは、第三者サービスを使用して、自分が作成したビジネスに関連するSQLiペイロードを格納します。その後、対象APIに特定の入力を提供して、第三者サービスから彼らの「悪意のあるビジネス」を引き出させます。SQLiペイロードはデータベースによって実行され、データが攻撃者が制御するサーバーに外部化されます。
シナリオ #2
あるAPIは、第三者サービスプロバイダーと統合して、敏感なユーザー医療情報を安全に保存します。以下のようなHTTPリクエストを使用してセキュアな接続でデータが送信されます:
POST /user/store_phr_record
{
"genome": "ACTAGTAG__TTGADDAAIICCTT…"
}
悪意のあるアクターは、第三者APIを侵害する方法を見つけ、前述のようなリクエストに対して308 Permanent Redirect
を返すようになりました。
HTTP/1.1 308 Permanent Redirect
Location: https://attacker.com/
APIは第三者のリダイレクトに盲目的に従うため、同じリクエストを攻撃者のサーバーに送信し、ユーザーの敏感なデータを含めてしまいます。
シナリオ #3
攻撃者は'; drop db;--
という名前のgitリポジトリを準備します。
これにより、攻撃されたアプリケーションからの統合が悪用され、リポジトリ名が安全な入力であると信じているアプリケーションにSQLインジェクションペイロードが使用されます。
防止方法
- サービスプロバイダーを評価する際に、彼らのAPIセキュリティポリシーを評価します。
- すべてのAPIの相互作用が安全な通信チャネル(TLS)上で行われることを確認します。
- 統合されたAPIから受け取ったデータを使用する前に、常に適切に検証およびサニタイズします。
- 自分のAPIがリダイレクトすることが許容される場所のホワイトリストを維持します。リダイレクトを盲目的に追跡しないでください。
参考文献
OWASP
- Web Service Security Cheat Sheet
- Injection Flaws
- Input Validation Cheat Sheet
- Injection Prevention Cheat Sheet
- Transport Layer Protection Cheat Sheet
- Unvalidated Redirects and Forwards Cheat Sheet