UUID Insecurities

HackTricksをサポートする

基本情報

ユニバーサルユニーク識別子(UUID)は、コンピュータシステム内の情報を一意に識別するために使用される128ビットの番号です。UUIDは、中央の調整なしに一意の識別子が必要なアプリケーションで不可欠です。データベースキーとして一般的に使用され、ドキュメントやセッションなどのさまざまな要素を参照できます。

UUIDは一意であり、推測が難しいように設計されています。特定の形式で構造化されており、32の16進数の数字で表される5つのグループに分かれています。UUIDには異なるバージョンがあり、それぞれ異なる目的に使用されます:

  • UUID v1は時間ベースで、タイムスタンプ、クロックシーケンス、ノードID(MACアドレス)を組み込んでいますが、システム情報を露出する可能性があります。

  • UUID v2はv1に似ていますが、ローカルドメイン用の修正が含まれています(あまり広く使用されていません)。

  • UUID v3およびv5は、名前空間と名前からハッシュ値を使用してUUIDを生成し、v3はMD5を使用し、v5はSHA-1を使用します。

  • UUID v4はほぼ完全にランダムに生成され、高い匿名性を提供しますが、重複のリスクがわずかにあります。

UUIDのバージョンとサブバージョンは通常、UUID内の同じ位置に表示されます。例えば: 12345678 - abcd - 1a56 - a539 - 103755193864 xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx

  • Mの位置はUUIDのバージョンを示します。上記の例では、UUID v1です。

  • Nの位置はUUIDのバリアントを示します。

サンドイッチ攻撃

「サンドイッチ攻撃」は、ウェブアプリケーションにおけるUUID v1生成の予測可能性を悪用する特定のタイプの攻撃です。特にパスワードリセットのような機能で使用されます。UUID v1は時間、クロックシーケンス、ノードのMACアドレスに基づいて生成されるため、攻撃者がこれらのUUIDのいくつかを取得できれば、ある程度予測可能になります。

UUID v1を使用してパスワードリセットリンクを生成するウェブアプリケーションを想像してください。攻撃者がこれを悪用して不正アクセスを得る方法は次のとおりです:

  1. 初期設定

  • 攻撃者は2つのメールアカウントを制御しています:`attacker1@acme.com`と`attacker2@acme.com`。

  • 対象のメールアカウントは`victim@acme.com`です。

  1. 実行

  • 攻撃者は最初のアカウント(`attacker1@acme.com`)のパスワードリセットをトリガーし、UUIDを含むパスワードリセットリンクを受け取ります。例えば、`99874128-7592-11e9-8201-bb2f15014a14`です。

  • その直後、攻撃者は被害者のアカウント(`victim@acme.com`)のパスワードリセットをトリガーし、次にすぐに2番目の攻撃者制御アカウント(`attacker2@acme.com`)のためにトリガーします。

  • 攻撃者は2番目のアカウントのためのリセットリンクを受け取り、UUIDは`998796b4-7592-11e9-8201-bb2f15014a14`です。

  1. 分析

  • 攻撃者は、時間的に近い2つのUUID(`99874128`と`998796b4`)を持っています。時間ベースのUUIDの連続的な性質を考えると、被害者のアカウントのUUIDはこれら2つの値の間にある可能性が高いです。

  1. ブルートフォース攻撃

  • 攻撃者は、これら2つの値の間のUUIDを生成するツールを使用し、生成された各UUIDをテストしてパスワードリセットリンクにアクセスしようとします(例:`https://www.acme.com/reset/<generated-UUID>`)。

  • ウェブアプリケーションがそのような試行を適切にレート制限またはブロックしない場合、攻撃者は範囲内のすべての可能なUUIDを迅速にテストできます。

  1. アクセス獲得

  • 被害者のパスワードリセットリンクの正しいUUIDが発見されると、攻撃者は被害者のパスワードをリセットし、不正にアカウントにアクセスできます。

ツール

参考文献

HackTricksをサポートする

Last updated