10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

评论

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

小小的代码分支模型如何撬动研发过程管理

陈晨

Gitlab CI进阶之共享CI库

雪雷

DevOps gitlab CI/CD gitlab ci

XSKY新一代分布式文件系统XGFS揭秘——元数据服务

XSKY星辰天合

K8s事件监控之kube-eventer

雪雷

k8s事件告警 k8s资源监控 k8s管理

Gitlab CI之单元测试和代码扫描

雪雷

单元测试 CI/CD gitlab ci 代码扫描

Git 常用命令总结

迷羊

git

Istio微服务治理笔记(一)

雪雷

istio 服务治理 server mesh

Prometheus + Grafana详解

雪雷

监控 Grafana Prometheus 告警

一文带你检查Kubernetes应用是否为最佳实践

雪雷

k8s k8s最佳实践

赋能云端管理 激发智能边缘 英特尔发布超能云终端解决方案

最新动态

构建统一监管制度 加快数据要素立法修法

CECBC

区块链 金融 区块链数字经济

Java 生成解析二维码

喜瑞斯

Guacamole实战

雪雷

guacamole 远程登录 堡垒机

区块链加未来3至5年可以预见 上链将成为常态

CECBC

区块链 金融 数字时代

K8s可视化监控之-Weave Scope

雪雷

k8s k8s可视化 k8s监控

GitOps工具Argo CD实战

雪雷

DevOps CI/CD gitops argo cd

玩K8S不得不会的HELM

雪雷

k8s Helm

微服务注册发现配置中心-consul

雪雷

Consul 服务注册与发现 配置中心

极客公园张鹏对话百度CTO王海峰,揭秘中国AI的今昔与前路

脑极体

Kubernetes config多集群管理工具

雪雷

k8s kubecm k8s多集群管理 kubeconfig

等级三整理之深信服

Lane

微服务链路追踪之Jaeger

雪雷

全链路监控 Jaeger

曾经每个手机上都有的游戏,作为前端如今你也能开发出来了,附教程

聚客AI学院

html5 大前端

大数据技术思想入门(一):分布式存储特点

cristal

Java 大数据 hadoop 分布式

mPaas-RPC拦截器各种场景下的使用指南

阿里云金融线TAM SRE专家服务团队

RPC

支付宝蜻蜓刷脸支付

诸葛小猿

支付宝 蜻蜓 刷脸支付

一.操作系统概述

Winter

操作系统

Go: 使用pprof收集样本数据

陈思敏捷

pprof Go 语言

搜狗联合清华天工研究院推出ChoreoNet模型:让数字人随着音乐翩翩起舞

脑极体

Kubernetes-学习必备(awesome-kubernetes-notes)

雪雷

学习 k8s入门 k8s文档 k8s知识

MySQL5.7应当注意的参数

Simon

MySQL 参数

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