PayPayのフィッシングが簡単すぎた話
※この記事は以下記事を読んだ前提で書いてます。
※あまりに被害が多かったのか、2025/6/19 夕方にPayPay連携機能は止まったようです。
この記事を読んで、QRコードを読み取るだけでお金抜かれるなんてことがあるのか?と思ったら、実際あまりに簡単に抜けるような構成であることがわかったので、検証結果を置いておきます。
WINTICKET連携はQRコード2連続読込方式
正規のログイン・連携機能のUIを先に確認します。
PCブラウザでWINTICKETを操作、スマホでPayPayアプリを操作する場合の流れです。
競輪投票のWINTICKETでアカウント作成、ログイン後、
ポイント残高右側の「+」ボタンでチャージ画面に遷移します。
遷移後、入金手段としてPayPayを選択します。
※ポイント残高は出金できないが、投票結果の払戻金は出金できる仕様
すると、PayPayへ連携する画面が表示されるため、そのまま連携へ進むと、PayPayへログインする画面が表示されます。
画面幅が一定以上だとPCと判断し、QRコード読み込み画面が表示される
PCで上記画面を表示しつつ、スマホでPayPayアプリ→スキャンを行うと、QRコードが切り替わり、「QRコード2」をスキャンするように誘導されます。
スマホ側は、QRコード読み取り画面を継続して表示します。(SS忘れ)
10秒以内としているのはおそらくフィッシング対策だが・・・
2つのQRコードを連続して読み取ると、確認画面等はなく、そのままPC側はチャージ画面へ遷移します。
一方、スマホ側では、「アカウント連携が完了しました!」と表示されます。ここでモーダル後ろのグレー部分でWINTICKET連携であることは表示されるものの、あとはホーム画面に戻ることしかできません。
「PayPayホームにもどる」でそのまま何事もなかったかのようにホームへ戻ります。
連携後のアカウントでは、WINTICKETにて残高チャージが行えます。
支払いはPayPay残高からのみ使えるようですが、残高が不足している場合、「チャージして支払う」として、銀行口座を選択することができます。
これはオートチャージではないので、オートチャージ設定がOFFでも「チャージして支払う」は有効です。
このまま「チャージして支払う」を押すと、残高チャージとWINTICKETへの支払いが連続して行われます。結果ウォレット履歴は以下のようになります。
通常、ここからポイントで投票し、勝ったら払戻金となります。
払戻金は現金化が可能で、こちらはWINTICKETアカウント(本人確認済)と名義が一致している口座を登録することで振り込みが行われるようです。
フィッシング詐欺の推定悪用手段
勘がいい人はすぐわかると思いますが、これはフィッシングにすぐ悪用できる構成になってしまっています。
おそらく、以下のようなフィッシングサイトがあったものと思われます。
事前に本人確認済WINTICKETアカウントと出金口座を用意しておく
(このWINTICKETアカウントを犯人WINTICKET垢とします)フィッシングサイトに引っかかったユーザ(被害者)がアクセスしてきた場合、裏側で犯人WINTICKET垢のPayPay連携を開始し、QRコード1を取得、被害者へQRコードを表示します。(追記)この際、WINTICKET連携であることを画面上から隠し、単純なログイン目的と見せかけます。
被害者が自身のPayPayアプリにてQRコード1を読み込みすると、QRコード2へ切り替わるので、それをそのまま被害者のPC画面に表示させます。
被害者がQRコード2を読み込んだ瞬間、犯人WINTICKET垢と被害者PayPayアカウントが連携完了となり、自由に残高チャージが可能に
(スマホにWINTICKET連携と表示され初めて気付けるが、その時点で手遅れ)被害者が気づく前に全力で「チャージして支払う」を連打する
適当に硬いレースに投票し、1.0倍に近いオッズで払戻金を受け取る
払戻金を銀行口座へ出金、適当な出し子にでも出金させる
元記事を見る限り、2-4では、右側のスマホ用ログイン画面を表示しないように、犯人側で別途画面を構成、ログインに必要であると誘導させていたようです。ブラウザのURLを見ていれば気づけたかもしれませんが・・・。
QRコードのみPayPayから発行された本物のこのUIのみではスキャンするだけで抜かれるとはわからないでしょう
何が悪かったか
大きな失点が2点あります。
スマホの操作がQRコード2連続スキャンのみで、スキャン後も「連携完了」以上の情報がなく、フィッシングされると何が起きたかわからない
WINTICKETとPayPayと名義相違していもチェックがないと思われる
QRコードを無用意に読むな、と言っても、ボタン操作一つもなしで連携完了するUIはあまり経験ない方が大半だと思います。
ここで一度「WINTICKETへ連携しますか」と聞くだけでかなりの確率で止められたと思います。その意味でPayPayのUIがかなり悪いと思います。
店頭など、PayPayアプリで自身の管理外のQRコードをスキャンすることは日常的に行われるため、その後確認を挟まない実装はかなり良くないです。
また、この挙動から名義を確認していないであろうと思われ、詐欺の他、マネーロンダリング等にも利用されかねない部分になってしまっています。
これはWINTICKET以外にもよくある話なので改修されるが微妙そうですが。
自衛策
口座連携をしない、と言っても都度削除は面倒だと思うので・・・。
右下のアカウント→「利用可能額の設定」より、チャージ上限が設定可能です。
日常利用に影響しない範囲で上限を設定しておきましょう。
余談
今回の検証のためにWINTICKETアカウントを新しく作り、本人確認も通したうえで本記事を書いたのですが、記事を公開した直後、垢BANされてました。
私自身は正規の利用しかしてないですが、履歴上不審と判断されたようです。大丈夫だとは思いますが、お金返してください・・・。
(追記: この対応自体は当然とも思うので、ちゃんと本人確認の上再開してくれるのであれば、WINTICKETはそこまで悪くはない)
また、記事冒頭にも書いた通り、19時頃にはWINTICKETとPayPay連携機能が停止されていました。さすがに対策されるものと思われます。
追記: 検証ツイートはここにも書いています。(上記とほぼ変わりません)
PayPayとWINTICKETの連携、QR読み取り2つ連続のみでスマホ側での連携確認もなければ連携先すら表示されない(完了時点では出るけど手遅れ) ので詐欺に使われてるのね
— J416DY (@j416dy) June 19, 2025
コメント
6AppStoreやAmazonなどもPayPayと連携をするタイプですが、こちらは連携時にPayPayアプリ側で連携についての同意画面が出てきます。
なので、アプリ側で何事もなく連携ができてしまうWINTICKETの仕様はPayPayがWINTICKETのために用意した専用のものである可能性が高そうです。
QRコードについては頑張れば読めるだろうと思ってましたが、面倒なのでそのままにしました。記事公開時点で失効しているはずなので、特に問題ないはずです。
paypayチャージ上限設定しても警告出るだけでチャージは出来ちゃいますよ
上限設定時に「取引を一時保留する」としてください。
当然ながらフィッシング対策としては保留しないと意味がないので