QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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:054594

评论

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

无场景不智能-面向场景的智能运维算法体系

云智慧AIOps社区

算法 日志 场景 智能运维 数据指标

GitHub上标星120K!Alibaba官网发布了这份Java全栈知识体系手册

Java~~~

Java 架构 面试 JVM 多线程

加速国产开源软件创新,云智慧AIOps社区正式发布

云智慧AIOps社区

开源 算法 数据 场景 智能运维

云智慧智能研究院实习生招聘信息~只等优秀的你!

云智慧AIOps社区

深度学习 招聘 异常检测 实习 智能运维

CTO离职前悄悄和我说,吃透这5本Java核心技术笔记,涨薪特别简单

Java~~~

Java MySQL spring 架构 面试

这个 TCP 问题你得懂:Cannot assign requested address

AlwaysBeta

Linux TCP TCP/IP Linux内核 TCP协议

【架构设计模块七】:王者荣耀商城异地多活架构设计

Ryoma

女科学家流失之殇

脑极体

Filecoin价格今日走势:filecoin暴涨!Filecoin未来会涨到多少钱?

区块链 分布式存储 filecoin未来价格预测? filecoin价格走势 filecoin大涨

TLS协议分析 (七) 安全性分析

OpenIM

Java设计模式如何优雅的使用本地缓存?

张音乐

Java 缓存 9月日更

Navicat Premium 查询 x 列时不显示

玄兴梦影

MySQL navicat select

27W字总结阿里Java高并发编程:案例+源码+面试+系统架构设计

Java~~~

Java 架构 面试 算法 多线程

“IBP在城市大脑项目中的应用”入选工信部2021年大数据产业发展试点示范项目名单

云计算

如何让项目准时上线?

石云升

项目管理 管理 引航计划 内容合集 9月日更

阿里P8整理出SQL笔记:收获不止SOL优化抓住SQL的本质,带你领略SQL的世界!

Java MySQL 架构 面试 架构师

无敌!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说

Java~~~

Java 架构 面试 项目 架构师

云智慧AIOps研究院来咯~

云智慧AIOps社区

技术 算法 数据 智能运维 指标

机器学题平台PAI论文入选国际顶会KDD-构建端到端的大规模AI工程能力

阿里云大数据AI技术

【布道API】关于 API 分页

devpoint

API REST API 9月日更

阿里内部流传的JDK源码剖析手册!GitHub已获上千万的访问量

Java 编程 架构 jdk 面试

基于深度学习的日志异常检测

云智慧AIOps社区

深度学习 招聘 异常检测 实习 智能运维

pyhanlp 添加自定义词典(qbit)

qbit

Python nlp 分词

【网络安全】记一次挖洞的日常

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

Kubernetes踩坑问题集

玏佾

Kubernetes k8s k8s文档

GAIA:智能运维领域通用公开数据集

云智慧AIOps社区

算法 AIOPS 数据集 场景 智能运维

交易所刷量机器人定制开发,刷k线机器人搭建

量化系统19942438797

交易所 市值机器人

10款低/无代码开发平台哪个才是适合你的?

低代码小观

程序员 低代码 无代码 低代码平台 无代码平台

谈 C++17 里的 FlyWeight 模式

hedzr

c++ 设计模式 Design Patterns 享元模式 flyweight

TLS协议分析 (六) handshake协议扩展

OpenIM

职场浅谈三则

姬翔

9月日更

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