EC-Cubeのプラグインのバグ見つけた。かなりやばい系。

眠たいので、詳しいことは書きたくても書けないのですが、EC-Cubeのカード決済プラグインで、カード情報が漏洩するかもしれないバグをみつけました。

モジュール:SMBCファイナンスサービス決済モジュール(2.12系・2.13系)
URL:http://www.ec-cube.net/products/detail.php?product_id=670

皆さん、気をつけてくださいね。

モジュールが、カード番号をログに吐き出します。data/logsの配下にmdl_smbc.log というログを吐くのですが、この中にカード番号が入っています。カード番号は記録しないのがお約束のはずですけどねぇ。

SMBCファイナンスに聞いても、「バグはない。他の客からもそんなレポート上がってない。あんたんとこがレベルが低いからそんな作り込みするんだ。」と言われてますからね。まぁ、ね。そんな、大企業様に敵うような会社じゃ無いですけどね、これで本当にバグだったらコンプライアンス疑いますよ(笑)

問題のバグはSC_SMBC.phpファイル内 689 行目より以下のコードの一部にあります。

こんなコード。

// パスワード等をマスクする
if (!$raw && is_array($msg)) {
    $keys = array('card_no', 'security_cd');
    foreach ($keys as $key) {
        if (isset($msg[$key]) && !is_array($msg[$key])) {
            $msg[$key] = str_pad('', strlen($msg[$key]), '*');
        }
    }
    $msg = print_r($msg, true);
 }

すんごいコードですねぇ。card_noとかsecurity_cdっていう変数は「*」で置き換えてログに吐き出しちゃえって。
まぁ、いいんですよ。それはね。

問題は、ここ

!is_array($msg[$key])

配列じゃ無かったら。

配列だったら、カード番号とかセキュリティコードとか、バンバンログに吐いちゃう(笑)

2.11の時は大丈夫だったんですよ。そんなコード無かったんです。card_noとか見つけたら片っ端から「*」にしてたんです。

これ、改悪な気がするんですよね。

まぁ、配列じゃ無ければ問題無いんですけどね。

吐き出されたログが以下です。

[card_no] => Array
    (
        [size] => 16
        [encode] => SJIS-win
        [value] => 4980000000000000
    )

こんな感じです。あっちゃー。やっちゃってるっぽ(^^;

ちなみに、4980000000000000は4980-0000-0000-0000っていう、テスト用のカード番号です。

たぶん、気づかずにローカルにカード番号溜めちゃってるECサイト作っている人いっぱいいると思うんだよね。

だって、「バグはない。他の客からもそんなレポート上がってない。」そうですから。

被害が無ければ良いんですけどね。

あ。だめですよ?自分の会社のECサイトからカード番号抜いちゃ。
刑事罰受けますからね!


Comments are closed.