タリーズのサイトからのクレジットカード情報漏えいについて、CSP(Content Security Policy)やintegrity属性(サブリソース完全性)の重要性がよくわかったという意見をX(Twitter)上で目にしましたが、これらでの緩和は難しいと思います。

まず、CSPの方ですが、今回の件では元々読み込んでいたスクリプトが改ざんされたと考えられるので、オリジンとしては正規のものです。evalが使われていたのでCSPで制限されると考えている人が多いですが、evalは難読化のために使われているので、evalを使わないことは可能です。個人的には、難読化しない方がかえって目立たなくてよいと思うのですが、あの人達は難読化をしたがるのですよね…
また、XMLHttpRequestやFetchの送信先を制限するというアイデアについても突破される可能性が高いです。一例として、同一オリジン上に受け皿となるサーバースクリプトをおいてそちらに送信してカード情報を蓄積しておく方法が考えられます。現に、侵害されたサイトにクレジットカード情報を蓄積していた例はリリース等で見たことがあります(おそらくCSP回避ではなく別の理由だと思いますが)。

また、通常の決済APIだとカード情報をECサイトに送信しない設定だったものを、ECサイトに送信するように改変した例もあるようです。そうしておいて、サーバー側で蓄積するなり、サーバーから別ホストに送信すると、CSPでの制限は及びません。

integrity属性についても、JavaScriptの改ざんと合わせて、読み込み側のハッシュ値も同時に改ざんすれば突破できます。integrity属性は、サードパーティJavaScriptのみが改ざん可能な場合は有効ですが、今回はファーストパーティのJavaScriptが改ざんされているので、PHP等のサーバースクリプトも改ざんできたはずで、攻撃側は回避可能です。

CSPやintegrity属性は、XSSやサードパーティJavaScriptの改ざんには有効ですが、今回はサーバーに侵入されてソースコードが改ざんされているので、これら技術による緩和には限界があるということです。

対策としては、サーバーに侵入されるような脆弱性を解消しておく、WAF(Web Application Firewall)を導入する、ファイル改ざん検知システムを導入する、などが有効だと思います。

4時間

利用規約プライバシーポリシーに同意の上ご利用ください

徳丸 浩さんの過去の回答
    Loading...