}
}
这里的table是一个std :: vector包含在函数表中的名称,在将元素存储到table中时,|offset| 字段没有被正确检查。...table.resize(module->table.initial);
|module->table.initial| 这个代码片段读取的值是根据函数表声明,在WASM文件中的读取的,该字段的有效值为...|offset| 字段的值是根据数据段从WASM文件中读取的,它是一个带符号的32位值。
所以通过这个漏洞,我们可以在table向量之后的内存,越界写入一定范围的内容。...3.设置一个漏洞合约
我们提供了一个会造成程序崩溃的WASM漏洞验证文件(POC)
在这个PoC中, 我们简单的设置了 |offset| 字段引用 0xfffffff地址,所以会触发越界写造成程序崩溃...3.使用越界写入的原生代码,我们可以覆盖WASM模块实例的WASM内存缓冲区,在恶意WASM代码的帮助下,最终可以在nodeos进程中实现了任意内存读/写操作,并绕过了64位操作系统上的DEP / ASLR