
CVE-2012-2122 - MySQL認証バイパス
CVE-2012-2122の概念実証(PoC)です。この脆弱性は、脆弱なMySQLおよびMariaDBサーバーに影響を与える深刻な認証バイパスです。
免責事項
このプロジェクトは、教育目的、セキュリティ研究、および許可されたペネトレーションテストのみを目的としています。所有していないシステムやテストする明示的な許可がないシステムに対してこのソフトウェアを使用しないでください。
CVE-2012-2122は、MySQLのパスワード検証ロジックで発見された認証バイパスの脆弱性です。
整数キャスト/比較バグにより、特定の条件下で無効なパスワード比較が等しいと評価されると、認証が誤って成功する可能性があります。
攻撃者は有効なパスワードを知らなくても、比較バグがトリガーされるまで任意のパスワードを使用して認証を繰り返し試行できます。
成功確率はおおよそ次のとおりです。
この比較的高い確率のため、自動化ツールは通常、数百回のログイン試行以内に認証をバイパスできます。
| 指標 | 値 |
|---|---|
| CVE | CVE-2012-2122 |
| CVSS v2 | 7.5(高) |
| 攻撃ベクトル | ネットワーク |
| 認証 | なし |
| ユーザー操作 | なし |
| 影響 | 認証バイパス |
この脆弱性は、脆弱なコンパイラ最適化でコンパイルされたMySQLビルドに影響を与えます。以下のバージョンが含まれます。
この問題は主に、コンパイラの動作がバグを露呈したLinuxディストリビューションに影響を与えました。
これらのバージョンのすべてのインストールが脆弱であるわけではありません。
パスワード検証中、MySQLは内部でmemcmp()関数を使用して2つのハッシュ値を比較します。
通常の状況下では:
memcmp(hash1, hash2)
次の値を返します:
0この脆弱性は、戻り値が符号付き整数に格納され、後に特定の非ゼロ値が認証成功として解釈されるような方法で変換されたために発生しました。
簡略化されたロジック:
if (memcmp(hash1, hash2) == 0)
{
// Login successful
}
脆弱なコンパイラの動作下では、memcmp()からの特定の戻り値が誤って比較条件を満たす可能性がありました。
その結果、誤ったパスワードが時折認証に成功しました。
攻撃者に必要なのは:
パスワードの知識は不要です。
攻撃者はランダムなパスワードを使用してログイン試行を継続的に送信します。
最終的に、比較バグにより1回の認証が成功します。
典型的な攻撃の流れ:
Attempt #1
↓
Authentication Failed
Attempt #57
↓
Authentication Failed
Attempt #141
↓
Authentication Failed
Attempt #237
↓
Authentication Successful
平均的な成功は約256回の試行に1回発生します。
悪用に成功すると、攻撃者は以下が可能になります:
管理者権限の認証情報が標的となった場合、データベースサーバーの完全な制御が得られる可能性があります。
指標は次のとおりです:
MySQL認証ログを確認し、過剰なログイン失敗アクティビティを監視します。
推奨される緩和策は、パッチが適用されたリリースにアップグレードすることです。
追加の防御策は次のとおりです:
---
## Example Usage
```bash
python3 exploit.py -ip <target>
Example:
python3 exploit.py -ip 192.168.1.100
This repository demonstrates how a subtle implementation bug in authentication logic can completely undermine password verification.
Although the vulnerability is over a decade old, it remains an important case study in: