
Meessho Androidアプリにおける、MD5鍵導出を用いた安全でないAES-CBC暗号化を実証する概念実証であり、暗号文の改ざんやパディングオラクル攻撃の可能性を可能にします。
著者: Soyam Arya(別名 honest_corrupt)
発見日: 2026年3月
影響を受けるアプリ: Meesho Androidアプリ(com.meesho.supply)
ステータス: 検証中
カテゴリ: 不十分な暗号化 / データ完全性の欠陥
このレポートは、Meesho Androidアプリケーションにおける暗号化の脆弱性を文書化したもので、機密データが完全性保護なしのAES/CBC/PKCS5Paddingで暗号化され、暗号鍵が安全でないMD5ハッシュアルゴリズムを使用して導出されています。
アプリケーションは、以下の形式で暗号化されたペイロードを構築します:
Base64(IV) . Base64(暗号文)
しかし、認証(例:HMACやAES-GCMなどのAEADモード)がないため、この実装は以下の脆弱性を持ちます:
これは、複数のOWASP Mobile Top 10およびMASVS暗号化ガイドラインに違反しています。
| カテゴリ | 説明 |
|---|---|
| M5: 不十分な暗号化 | 弱い暗号プリミティブの使用(MD5、完全性のないAES-CBC) |
| CWE-327 | 破損またはリスクのある暗号アルゴリズムの使用 |
| CWE-649 | 完全性チェックなしの暗号化への依存 |
| OWASP MASVS | MSTG-CRYPTO-3、MSTG-CRYPTO-4 |
リバースエンジニアリングにより、以下のロジックが明らかになりました:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] iv = new byte[16];
new SecureRandom().nextBytes(iv);
SecretKeySpec key = new SecretKeySpec(
MD5(str), "AES"
);
cipher.init(ENCRYPT_MODE, key, new IvParameterSpec(iv));
String message = Base64(iv) + "." + Base64(ciphertext);
暗号化されたペイロードは、APIリクエストで次のように送信されます:
http POST /api/endpoint
message=Base64(IV).Base64(暗号文)

Burp Suiteでリクエストをキャプチャします:
` message=AbCdEfGhIj...xyz.KLMNOPQRST... ``
暗号文の1バイトを変更します:
`` 元の値: ...KLMNOPQRST...
変更後: ...KLMNOPQRSU... ``
--
変更したリクエストをサーバーに送信します。
messageパラメータを含むAPIリクエストを傍受する| 日付 | イベント |
|---|---|
| 2026年3月 | 脆弱性を発見 |
| 2026年3月 | リバースエンジニアリング完了 |
| 保留中 | ベンダーへの通知 |
| 保留中 | CVEリクエスト |
Soyam Arya(別名 honest_corrupt) CVE ID: CVE-2025-5154、CVE-2025-6748 モバイル&Webアプリケーションペネトレーションテスター