【发布时间】:2022-07-07 13:17:04
【问题描述】:
我今天注意到我可以像这样替换一个敏感的内置 JS 函数:
async function _hackedEncrypt(algorithm, key, data) {
console.log('hacked you!');
}
const subtle = global.crypto.subtle; // Assign to get around "read-only" error.
subtle.encrypt = _hackedEncrypt;
global.crypto.subtle.encrypt(); // 'Hacked you!' appears in console.
哎呀!
这个漏洞利用非常简单。我的 Web 应用程序中的数千个依赖项(直接和传递)中的任何一个都可以重新分配此功能。请注意,我的问题并非特定于 Web Crypto - 它只是攻击者更危险的目标之一。
我怎样才能检测到该函数已被重新分配或保证我总是调用它的原始浏览器实现?
【问题讨论】:
-
运行一种病毒会危及您的整个系统。不要有数千个依赖项。
-
一个空的
create-react-app在你添加一行代码之前会带有1380个依赖。因此,对于我选择的平台,一个非常受欢迎的平台,我无法接受您的建议。 -
我在写react,我从来没有用过
create-react-app。react本身(因为最近提交)将具有零依赖关系,react-dom仍然有两个。 -
你的观点有道理。我仍在寻找一种解决方案,它不依赖于信任我的直接和传递依赖项,不会让我暴露于这个漏洞。
-
您指的是供应链攻击。如果你有一个受损的依赖项,它可以通过注册回调来虹吸用户信用卡等,而无需替换内置的 JS 函数。有dedicated security products for protecting against supply chain attacks。
标签: javascript security dom websecurity