在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

Rust 修复了 std 库中 Windows 10/11 的关键命令注入缺陷

  • 2024-04-22
    北京
  • 本文字数:1204 字

    阅读完需:约 4 分钟

大小:613.34K时长:03:29
Rust修复了std库中Windows 10/11的关键命令注入缺陷

本文最初发表于The Register网站,由 InfoQ 中文站翻译分享。

 

Rust 安全专家解决了一个可能导致 Windows 机器上产生恶意命令注入的关键漏洞,建议程序员升级其 Rust 版本。

 

该漏洞的 CVSS 严重性评分为 10 分(满分即为 10 分),通过 CVE-2024-24576 编号进行跟踪。它会影响 Rust 标准库,当使用库的 Command API 在 Windows 上调用批处理文件时,它会出现不正确地转义参数,具体来讲就是 std::process::Command。

 

Rust 安全响应工作组(Rust Security Response Working Group)的 Pietro Albini 说到:“如果攻击者能够控制传递给生成进程的参数,那么他们就可以绕过转义执行任意的 shell 命令”,他负责撰写了该安全通知

 

报告这一问题的东京 Flatt Security 公司的研究人员说,主要问题似乎源于 Windows 的 cmd.exe 程序,该程序有更复杂的解析规则,没有它的话,Windows 就无法执行批处理文件。

 

Albini 说,Windows 的命令提示符有自己的参数分割逻辑,与标准库提供的常规 Command::arg 和 Command::args API 不同,这些 API 通常允许将不可信的输入安全地传递给生成的进程。

 

Albini 说,“在 Windows 上,该实现比其他平台更复杂,因为 Windows API 只提供了一个包含所有参数的字符串给生成的进程,并且由生成的进程负责来拆分这些参数。”大多数的程序员使用标准 C 运行时的 argv,在实践中,这基本上会以一种一致的方式来拆分参数。

 

“但不幸的是,据报道,我们的转义逻辑不完备,有可能传递恶意的参数,导致任意的 shell 均可执行。”

 

Chris Denton 是 Rust std 库的贡献者,他开发了解决这个问题的修复程序,包括改进转义代码,并确保 Command API 在无法安全转义参数时返回 InvalidInput 错误。

 

Albini 说,由于微软命令提示符的复杂性,团队无法确定在每种情况下都能安全转义参数的修复方法。

 

“如果你自己实现转义或只处理可信的输入,在 Windows 上也可以使用 CommandExt::raw_arg 方法来绕过标准库的转义逻辑。”

 

Rust 在 4 月 9 日发布了 1.77.2 版本,并表示之前的每个版本都会受到该安全漏洞的影响。

 

这门语言得到了粉丝们的热爱,经常在 Stack Overflow 的排名中名列前茅,因为开发人员发现在工作中使用 Rust 非常令人愉悦,谷歌员工也称赞了它在生产力方面的优势。该语言是国家安全机构敦促开发人员采用的较新的内存安全语言之一,以取代 C 和 C++等旧技术。

 

BatBadBut

RyotaK 是报告该漏洞的研究人员,他们将其称为 BatBadBut,该名称来源于该漏洞与批处理相关及其严重程度,即“很严重,但并不是最糟糕的”,该问题比 Rust 本身影响的技术更多。

 

Erlang、Go、Python 和 Ruby 也受到了影响,它们已经更新了各自的文档页面,以提高对这个问题的重视程度。

 

Node.js 和 PHP 现在都在编写补丁,而 Rust 和 Haskell 已经推出了修复程序。根据这名研究人员的报告,Java 同样受到了影响,但它的团队没有计划解决这个问题。

 

RyotaK 还指出,用户不应该仅仅依靠 CVSS 评级就得出结论,因为问题的严重性将取决于每个应用程序,应该根据具体情况重新考量和评估。

2024-04-22 17:055761

评论

发布
暂无评论
发现更多内容

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Java 程序员 架构 面试

金融科技加速经济低碳转型 但面临政策、市场、技术等多方挑战

CECBC

Kubernetes手记(15)- dashboard

雪雷

k8s 6月日更

【Vue2.x 源码学习】第十八篇 - 根据 render 函数,生成 vnode

Brave

源码 vue2 6月日更

【Flutter 专题】100 何为 Flutter Widgets ?

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

JAVA面向对象(六)--类和对象

加百利

Java 6月日更

科技进步道阻且长,仍未来可期

架构精进之路

科技 6月日更

Kubernetes手记(16)- 网络通信

雪雷

6月日更

Nike上货提醒:监控到商品尺码SKU

木头

Nike监控 上货监控 SKU监控

解读SpringBoot和SpringMVC中配置类的@Impot等导入是如何解析的

赵镇

spring

Python——命名元组 (namedtuple)

在即

6月日更

经济日报刊评:数字人民币应用场景拓展

CECBC

架构实战营 模块六作业

netspecial

架构实战营

架构实战营模块6作业

Vic

架构实战营

【架构实战营】第 6 模块作业

swordman

架构实战营

微服务的由来

卢卡多多

微服务 6月日更

[译] R8 优化:Null 数据分析 (第一篇)

Antway

Dajngo网站开发---Task2

IT蜗壳-Tango

6月日更

JSON转Excel

入门小站

工具分享

架构实战营 - 模块 6- 作业

泄矢的呼啦圈

架构实战营

[译] R8 优化:Null 数据分析 (第二篇)

Antway

6月日更

四个决策树让你彻底掌握 HTTP 状态码

看山

HTTP 6月日更

Three.js杂记(十二)—— VR全景效果制作·中

空城机

大前端 three.js 6月日更

软件技术从1996年以后就停滞不前了!?难道软件技术难返“春天”了么?

三掌柜

试用期 签约计划 人气作者 TOP10

模块6作业 拆分电商系统为微服务

TH

架构实战营

架构师实战营 模块六作业(拆分电商系统为微服务)

好吃不贵

业务架构

Angular | 浅谈Angular错误处理方式

devpoint

angular.js angular 6月日更

Java常用的几个Json库,性能强势对比!

xcbeyond

性能优化 6月日更

简单实现springmvc中的请求处理

赵镇

springmvc

备战618!分布式电商项目:天猫Java亿级高并发架构设计笔记

Java架构追梦

Java 阿里巴巴 架构 面试 亿级架构

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

Java 程序员 架构 面试

Rust修复了std库中Windows 10/11的关键命令注入缺陷_安全_Connor Jones_InfoQ精选文章