fkm blog

software開発に関することを書いていきます

IabHelperが更新されています

今朝, Googleからメールが来てた.

ACTION REQUIRED: Google Play Merchant In-app Billing Sample Code Security Update

In-app billing v3のサンプルに, 商用でそのまま使える感じのクラス群がある. それをそのまま使うと割ととんでもないバグが見つかったので早く修正してね という通知.

影響が出るのは, 下記のようなアプリ

  • In-app billing v3を使っている
  • IabHelperを使っている(=utilsをそのままいれてる)
  • アプリだけで購入情報の確認をしている

なので, 攻撃方法がわかったとしてもサーバー側で確認のはいるパズドラのようなアプリは影響を受けないはず。。。

修正部分のdiffはこちら

修正されたメソッドは1つ. UnitTestを自分で書いてみると「うわやばい」というのがわかると思います(詳しくは書きません

修正前のコードはこちら

public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
    if (signedData == null) {
        Log.e(TAG, "data is null");
        return false;
    }

    boolean verified = false;
    if (!TextUtils.isEmpty(signature)) {
        PublicKey key = Security.generatePublicKey(base64PublicKey);
        verified = Security.verify(key, signedData, signature);
        if (!verified) {
            Log.w(TAG, "signature does not match data.");
            return false;
        }
    }
    return true; // えっ
}