近日,安全人员发现了新的代码存储库漏洞,其中在 tasks.json 配置文件中存在恶意代码,这些代码被设置为在 Visual Studio Code中打开文件夹时自动执行。
在这种情况下,VS Code 的运行亦符合用户预期,看不出太多变化。
tasks.json 文件允许开发者将命令行工具集成到编辑器中,以便可以使用“运行任务”或“运行生成任务”命令来执行这些工具。此外,还可以选择在打开包含该任务的文件夹时自动运行这些任务。当 tasks.json 文件特定于某个代码仓库时,它位于隐藏的 .vscode 文件夹里。
VS Code 有两层保护机制防止不必要的任务自动运行。
一是“允许自动任务”设置,默认开启。二是文件夹默认不受信任,任务不会在不受信任的文件夹中运行。打开包含自动执行任务的文件夹时,会弹出警告提示“创建终端的进程需要执行代码”。
尽管如此,警告对话框突出显示了“信任文件夹并继续”选项,其视觉效果与文本内容并不相符。此外,VS Code 还提供了一个选项,允许信任父文件夹内的所有文件夹;如果之前已选中此选项,则默认情况下会信任新的子文件夹。
安全公司也往往会夸张其发现的风险,鉴于这并非 VS Code 的漏洞,这个问题或许被夸大了;真正的问题在于恶意代码库的存在,根据jamf 团队称,这些代码库通常“以招聘流程或技术任务为幌子”被创建。即使没有恶意自动运行的任务,受感染的代码库也很危险。
不过,VS Code 在这方面的设计确实还有改进的空间。“一个文本编辑器仅仅通过打开文件夹就能运行隐藏的代码,这太可怕了……如果用户认为信任某个文件能提高工作效率,他们总是会点击信任按钮。软件设计如此容易出错,我们也不能责怪他们。”一位开发者如此评论道。
本周发现的这个特定案例中有一个后门,攻击者可以利用该后门进行“远程代码执行、系统指纹识别和持久的C2(命令与控制)通信”。它利用了tasks.json的一个特性,允许根据操作系统运行不同的命令,并针对macOS、Windows和Linux进行了相应的修改。而恶意JavaScript代码通过curl工具从远端位置获取。
这段恶意代码库托管在 GitHub 上,现已被移除,而 JavaScript 恶意代码则托管在 Vercel 上。将恶意代码托管在外部(并不是代码库本身)会增加 GitHub 安全工具扫描的难度。
那么,开发者该如何保护自己?
研究人员指出:在将代码库标记为可信之前,“审查其内容至关重要”,但当代码量巨大时,这几乎不可能做到。更重要的是,他们建议“在与第三方代码库交互时一定要慎之又慎”。
如果在隔离的、临时的环境中进行开发,这样运行不受信任的代码的后果就不那么严重了。
“在容器内进行开发应该成为一种默认的工作流程,“一位开发者如此提示大家。
作者:洛逸
本篇文章为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。
请扫描二维码,使用微信支付哦。