はじめに
API2:Broken User Authentication
脅威エージェント/攻撃経路 | セキュリティの弱点 | 影響 |
---|---|---|
認証を正しく実装するのは容易ではありません。近年は複雑な多層システムで構成されることが多く、認証制御に何を含めるべきか、多くの開発者や設計者が混乱しがちです。さらに、認証機構は公開されているため、攻撃対象になりやすいです。 | 発生しうる問題の一つは、認証制御の実装ミスです。認証を扱うAPIエンドポイントは他と異なる設計が求められますが、見落とされがちです。例えば、モバイルアプリ用の認証エンドポイントがウェブアプリにも利用される場合などがあります。 | この脆弱性により、攻撃者が被害者のアカウントを乗っ取る可能性が高まります。攻撃者は被害者になりすまし、サイトに保存された個人データを盗む恐れがあります。 |
Broken User Authenticationは、いくつかの問題として現れます。認証を扱うAPIエンドポイントは、アプリ内の動線や表示されるデータを左右するため、特に注意する必要があります。次のいずれかの状態であれば、Broken User Authenticationといえます。
パスワードリカバリー
攻撃者は、/api/v1/reset-passwordエンドポイントを起動して、パスワードリセットの流れを開始する可能性があります。
POST /api/v1/reset-password
{
userID=123
}
これにより、ユーザー「rat」のパスワードリセットが実行され、4桁の数字のリセットトークンがメールで送信されます。エンドポイントにレート制限がないため、攻撃者は全ての4桁の組み合わせを高速に試し、ブルートフォース攻撃を行うことが可能です。
POST /api/v1/reset-password-token
{
userID=123.
tokenID=xxxx
newPass=test
}
その後、攻撃者はトークンを推測し、ユーザーのパスワードをリセットできます。
JWT検証エンドポイントが「None」アルゴリズムを受け入れる場合
JWTエンドポイントは必ず、適切なアルゴリズムでトークンを検証する必要があります。多くのJWTフレームワークではNoneアルゴリズムがデフォルトで有効になっており、これは非常に問題です。まずはJWTの動作を確認してください。
JWTトークンとはJson Web Tokenの略で、ユーザー情報などを含むトークンです。容易にデコードして内容を確認できるのが特徴ですが、内容変更にはアルゴリズムによる署名が必要です。
以下はJWTトークンの例で、デコードすると次のようになります:
{
"alg": "HS256",
"typ": "JWT"
}
{
"userID": "123",
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
このJWTトークンを編集するには、HS256の鍵が必要です。
JWTの仕組みが分かれば、検証機構がNoneアルゴリズムを受け入れるのがいかに問題か理解いただけると思います。JWT内の内容を変更し、アルゴリズムをNoneに変えて再エンコードすることが可能です。
{
"alg": "None",
"typ": "JWT"
}
{
"userID": "567",
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU2NyIsInN1YiI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiSm9obiBEb2UiLCJpYXQiOjE1MTYyMzkwMjJ9.NhHRUCQw5Wtuc7Jn2ImmC8URY0UmcuEkukmNA9Frccs
リクエスト時にヘッダ内のこのトークンを差し替えると、通常は無効なトークンとしてエラーが返るはずです。しかし、サーバーがNoneアルゴリズムで署名されたリクエストを許容している場合、Broken User Authenticationの脆弱性にさらされます。
認証エンドポイントを扱う際は、通常のエンドポイントよりも厳格なセキュリティ対策が求められます。レート制限、ロックアウト、キャプチャ機構を適切に実装し、攻撃者によるブルートフォース攻撃やクレデンシャルスタッフィングを防止してください。安全な認証仕組みの実装に不安がある場合は、OWASP Authentication Cheatsheet、またはOWASP Top 10 vulnerabilitiesの記事を参照するか、WallarmのAPIセキュリティプラットフォームの利用を検討してください。
最新情報を購読