编译:奇安信代码卫士团队

最近,热门的开源NPM serialize-javascript 中被指存在一个漏洞,可使攻击者执行远程代码。

Serialize-javascript由雅虎开发并维护,是一款颇受欢迎的开源项目,用于将 JavaScript 序列化为 JSON 的超集,包括表达式、日期和函数。

5月20 日,Jordan Milne 和 Ryan Siebert 将该漏洞告知 GitHub,后者于上周通过 GitHub Advisory 数据库公布。该漏洞的编号是 CVE-2020-7660,可导致远程攻击者通过 deleteFunctions 函数将任意代码注入 index.js 中。

Serialize-javascript低于3.1.0的版本受影响。

PoC

Serialize-javascript是一款热门库,其下载量超过1600万次,有840个相关项目。

GitHub 在安全公告中指出,这个不安全的序列化问题将导致对象如 {"foo": /1"/, "bar":"a\"@__R-<UID>-0__@"} 序列化为 {"foo": /1"/, "bar":"a\/1"/},因此用户输入能够规避 bar 的键值。

因此,如果攻击者额能够控制“foo”和“bar”的值并猜测出 UID,那么就有可能执行 RCE。安全公告指出,该 UID 的密钥空间为40亿,因此利用是一个“现实的网络攻击”。

当 `serialize()`d版本是 `eval()`d时,如下 PoC 能够调用 console.log():

    eval("("+ serialize({"foo": /1" + console.log(1)/i, "bar": ""@__R-<UID>-0__@"}) + ")");

    该漏洞已在serialize-javascript 版本3.1.0 中修复,贡献人员已通过修改代码确保占位符前面没有反斜杠的方式修复该漏洞。

    影响范围广

    CVE-2020-7660 的CVSS 评分为8.1,“重要”范围内靠近“严重”的级别。

    然而,Red Hat 在关于该漏洞的安全公告中指出,已将该漏洞的严重等级调整为“中危”,因为利用serialize-javascript 的应用程序必须能够控制通过它传递的 JSON 数据才能触发该漏洞。

    Red Hat 指出,虽然Container NativeVirtualization 2 的受支持版本不受影响,但遗留版本包括2.0在内均受影响。

    OpenShift ServiceMesh 1.0/1.1 (servicemesh-grafana) 的修复方案已发布,目前正在为 Red Hat OpenShiftContainer Platform 4 (openshift4/ose-prometheus) 准备补丁。

    鉴于该数据包很热门,其它仓库也受影响,包括 Ruby on Rails 的Webpacker。

    上周日,使用易受攻击的serialize-javascript 的稳定版本已修复。

    目前,研究员 Milne 和 Siebert 尚未置评。

    原文链接

    https://portswigger.net/daily-swig/remote-code-execution-vulnerability-exposed-in-popular-javascript-serialization-package

    声明:本文来自代码卫士,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。