眠たいので、詳しいことは書きたくても書けないのですが、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サイトからカード番号抜いちゃ。
刑事罰受けますからね!