会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 【技能探究】WebAssembly安全研讨:浏览器进犯面的新趋势与含糊测验实践!

【技能探究】WebAssembly安全研讨:浏览器进犯面的新趋势与含糊测验实践

时间:2025-05-22 10:16:27 来源:锐评时讯 作者:人文 阅读:225次

0关于WebAssembly。

WebAssembly(Wasm)是一种新式的、可移植的、高效的二进制指令格局,可作为多种高档言语(如C、C++、Rust等)的编译方针,然后在Web上运转挨近原生功能的运用程序。

在浏览器中,JavaScript在虚拟机(VM)中履行,经过JIT优化代码以进步功能。虽然JavaScript是当时最快的动态语⾔之一,但在功能上仍无法与原生的C和C++代码竞赛。这正是 Wasm 的优势地点。Wasm运转在与JavaScript相同的VM中,但功能更优。两者能够自在交互,互为补充,使开发者既能享用JavaScript丰厚的生态体系和友爱的语法,又能取得Wasm挨近原生的功能。

一般,开发者运用C等言语编写Wasm模块,并将其编译为.wasm文件。这些.wasm文件不能直接被浏览器辨认,需求经过JavaScript的胶水代码进行加载。

1越来越多的浏览器缝隙源自WebAssembly组件。

Wasm作为现代Web应⽤的中心技能之一,经过沙箱化的履行机制,完成了挨近原生的功能和安全性的两层保证,其运用规模已逾越浏览器,快速渗透到云核算、物联网、边际核算等要害范畴。可是,跟着Wasm的遍及,其安全隐患也逐步闪现。

从厂商发表的缝隙来看,越来越多的缝隙源自Wasm组件。

Wasm的安全隐患已在屡次攻防实战中得到验证。在Pwn2Own 2021大赛中,研讨人员运用JavaScriptCore引擎的Wasm编译器缝隙(CVE-2021-1801),在Safari浏览器上完成了长途代码履行(RCE)。在Pwn2Own 2023的V8 CT中,也有团队运用V8的Wasm相关缝隙成功攻破了Chrome浏览器。从各大厂商的缝隙盯梢平台上,也能看到越来越多的Wasm缝隙被发表。

自2017年11月Wasm社区组(CG)发布最小可行产品(MVP)规范以来,该技能栈一直处于动态演进状况。四大干流浏览器厂商(Chrome、Edge、Firefox、Safari)经过规范化进程继续推动特性扩展。到现在,还有许多特性没有彻底支撑,且Wasm规范也在不断更新。这些新特性的引进,势必会带来潜在的缝隙危险。因而,Wasm已成为当时浏览器缝隙发掘的热门,并具有长时间的研讨价值。

云鼎实验室对Wasm的缝隙发掘进行了深化的探究,成功发掘了多个高危缝隙,提交了数十个缝隙陈述,并取得了苹果公司(Safari)和Mozilla基金会(Firefox)的官方称谢。

2WebAssembly含糊测验实践。

在2022至2024年的Black Hat大会上,接连呈现了与Wasm安全相关的议题。这些研讨均以含糊测验(Fuzzing)作为缝隙发掘的首要手法。

云鼎实验室前期也曾测验对Wasm进行含糊测验,但作用并不抱负。后来,受BlackHat上相关议题的启示,云鼎实验室改写了Wasm Fuzzer,成功找到了新的缝隙。

改写后的Wasm Fuzzer作业流程如下:

1.  种子生成:从语料库中提取种子,并进行变异得到随机输入。

2.  生成器:将随机输入传递给生成器,映射成结构正确的Wasm模块。

3.  JS模版嵌入:将生成的Wasm模块嵌入到预先准备好的JS模版中。

4.  履行与反应:运用浏览器的JS引擎解说履行生成的JS样本,并回传掩盖率信息,构成反应循环。

而这其间的要害技能点在于:

● 生成器的规划:Wasm模块是一个结构化的输入,因而Fuzzer的中心在于怎么让生成器尽或许生成合法且多样化的样本。跟着Wasm规范的更新以及新特性的引进,构建一个支撑全面特性的高效生成器具有挑战性。

● JS模版的规划:精心规划的JS模版能够更有效地触发引擎的各种行为。例如,经过规划循环结构,添加热门代码的履行频率,然后触发不同层级的JIT编译器。

在研讨现有作业后,云鼎实验室发现,Chrome V8为了便利内部测验,供给了构建Wasm的接口(API),利⽤这些接口,能够在较细粒度构建Wasm模块。这样一来,既降低了开发本钱,又能紧跟V8对Wasm新特性的支撑。

一起,云鼎实验室还规划了一些JavaScript模版来触发JIT并捕获非溃散过错。

很快,新改写的Fuzzer跑出了有意思的成果。

3新的缝隙:CVE-2025-1933。

与纯JavaScript相同,Wasm在浏览器中也有JIT。以Firefox为例,其JIT编译器有三个优化等级:Baseline、Ion、Optimizing。简略来说,代码履行得越频频,优化等级就越高。这意味着,同一个函数的初次履行和第1000次履行,生成的机器码或许彻底不同,由于编译器或许发生了改变。

新的缝隙由此发生。

在一次函数调用过程中,一个经过Wasm-Ion编译的函数回来整数值3,该值被存储在栈中。对应的汇编代码如下:

函数回来后,在一个经过Wasm-Baseline编译的函数中,希望将这个值从栈中弹出到rax寄存器。

可是,实践弹出的值是0x7ffd00000003,其间低32位是希望的值3 ,但高32位是未初始化的废物数据。这是由于被调用函数只存储了一个int32(32位整数),未正确清零高32位。接着,回来到JIT进口桩代码(JIT entry stub),程序履行了以下代码:

注释说到“无需扩展,由于值已被装箱”,这儿是由于 boxNonDouble函数假定了输入寄存器中的高32位已被正确清零。可是假如高位存在废物数据,会导致装箱后的成果不正确,夹攻导致程序溃散。

4缝隙怎么发生?怎么修正?

CVE-2025-1933缝隙发生的底子问题在于64位体系上没有对int32类型的值进行正确处理。

体系假如不正确处理高32位,或许导致高位残留废物数据。当回来值用于装箱(即转换为JavaScript的Value类型)时,假如高位包括非零值,装箱成果或许过错,乃至被误解为其他数据类型。

详细而言,在GenerateJitEntry函数中,处理回来值时,没有对int32类型的回来值进行恰当的扩展:

可是,boxNonDouble操作假定ReturnReg中的高位已清零。短少恰当的零扩展,导致高位包括废物数据,与类型标签进行或运算后,生成过错的Value。

该缝隙的安全影响较为严峻,被评价为sec-high等级。攻击者或许运用该缝隙,经过精心结构的Wasm模块,运用堆喷等技能诱导引擎在回来值的高位留下可控的废物数据,夹攻完成类型混杂,导致恣意代码履行。

补丁的修正办法简略直接。

在64位体系上,运用masm.widenInt32(ReturnReg);将int32值扩展为64位,保证高32位被正确清零,避免高位残留废物数据。Patch如下:

5大模型在Wasm Fuzzing中的运用。

跟着大模型(LLM)的鼓起,根据LLM的含糊测验办法逐步遭到重视。理论上,LLM具有了解和生成代码的才能,能够辅佐生成更智能的测验样本,掩盖更多的代码途径。

在Wasm Fuzzing范畴,LLM能够用于:

● 智能生成样本:运用LLM了解Wasm模块的结构和语义,生成更具针对性的测验样本。

● 缝隙猜测与分类:经过剖析前史缝隙数据,练习模型猜测或许存在缝隙的代码区域,进步测验功率。

● 辅佐缝隙剖析:在溃散发生后,运用LLM辅佐进行缝隙定位和根因剖析,加快缝隙修正。

作为一项新式技能,Wasm仍在快速发展中,也是现代浏览器的重要攻击面之一。新的特性和规范的引进,将为安全研讨带来新的挑战和机会。腾讯安全及云鼎实验室也将继续盯梢深化研讨,助力企业安排及时发现安全危险,完善安全防地。

参考文献。

1. Liu, S. "Achilles Heel of JS Engines: Exploiting Modern Browsers During WASM Execution." Black Hat USA 2024. 。

https://i.blackhat.com/BH-US-24/Presentations/US24-Liu-Achilles-Heel-of-JS-Engines-Exploiting-Modern-Browsers-During-WASM-Execution.pdf。

2. Cao, Y. "Attacking WebAssembly Compiler of WebKit." Black Hat Asia 2023.      。

https://i.blackhat.com/Asia-23/AS-23-Cao-Attacking-WebAssembly-Compiler-of-Webkit.pdf。

3. Ventuzelo, A. "A Journey Into Fuzzing WebAssembly Virtual Machines." Black Hat USA 2022.。

https://i.blackhat.com/USA-22/Wednesday/US-22-Ventuzelo-A-Journey-Into-Fuzzing-WebAssembly-Virtual-Machines.pdf。

4. WebAssembly Community Group. "WebAssembly Features." 。

https://webassembly.org/features/。

5. Apple Inc. "JavaScriptCore." WebKit Source Code.。

https://github.com/WebKit/WebKit/tree/main/Source/JavaScriptCore。

6. Google Inc. "V8 JavaScript Engine." 。

https://github.com/v8/v8。

7. Mozilla Foundation. "gecko-dev." 。

https://github.com/mozilla/gecko-dev。

内容来源:https://sonybravia.xyz/app-1/go88vip pro,http://chatbotjud.saude.mg.gov.br/app-1/jogar-free-fire

(责任编辑:生活)

    系统发生错误

    系统发生错误

    您可以选择 [ 重试 ] [ 返回 ] 或者 [ 回到首页 ]

    [ 错误信息 ]

    页面发生异常错误,系统设置开启调试模式后,刷新本页查看具体错误!