Rust 1.56.1 发布,解决 Unicode 安全漏洞
Rust 1.56.1 现已发布。此版本引入了两个新的 lints,以减轻最近披露的一个安全问题 CVE-2021-42574 的影响:
在 Unicode Specification through 14.0 的双向算法中发现了一个问题。它允许通过控制序列对字符进行视觉重新排序,可用于制作源代码,呈现与编译器和解释器摄取的标记的逻辑顺序不同的逻辑。攻击者可以利用这一点对接受 Unicode 的编译器的源代码进行编码,从而将目标漏洞引入人类审查者不可见的地方。
Rust 官方表示,他们于今年 7 月 25 号收到了报告并开始着手修复。虽然这问题本身不是 rustc 的缺陷,但他们正在采取积极措施来减轻其对 Rust 开发人员的影响。其建议所有用户立即升级,以确保他们的代码库不受该安全问题的影响。
Rust 1.56.1 引入了两个新的 lints,以检测和拒绝包含受影响的 codepoints;而 Rust 1.0.0 到 Rust 1.56.0 中则不包括这样的 lints。公告指出,如果你不对这些 codepoints 的存在进行 out-of-band checks,你的源代码就容易受到这种攻击。
为了评估生态系统的安全性,Rust 团队分析了曾经在 crates.io 上发布的所有 crate 版本(截至 2021-10-17),只有 5 个 crate 的源代码中存在受影响的代码点,而且没有出现任何恶意的情况。
Rust 1.56.1 中有两个新的 deny-by-default lints,可以检测受影响的 codepoints,分别在 string literals 和 comments 中。这些 lints 将阻止包含这些 codepoints 的源代码文件被编译,从而保护用户免受攻击。
如果你的代码对这些 codepoints 有正确的用途,官方建议用相关的转义序列来替换它们。错误信息会建议使用正确的转义。
如果你不能升级你的编译器版本,或者你的代码库还包括非 Rust 源代码文件。官方不择建议定期检查以下 codepoints 是否存在于你的版本库和你的依赖中:U+202A、U+202B、U+ 202C、U+202D、U+202E、U+2066、U+2067、U+2068、U+2069。
安全研究员 Ross Anderson 指出,鉴于该漏洞是 Unicode 问题,所以它不仅会影响 Rust;还会影响 C、C++、C#、JavaScript、Java、Rust、Go 和 Python 等其他顶级语言,并怀疑它适用于大多数其他现代语言。
此外,其还发现了一个类似的安全问题;即 CVE-2021-42694,涉及标识符内的 homoglyphs。不过从 Rust 1.53.0 开始,Rust 已经包含了对该攻击的缓解措施。由于 Rust 1.0.0 到 Rust 1.52.1 版本中缺乏对 non-ASCII 标识符的支持,因此不受影响。
更多详情可查看官方公告。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Brave 浏览器 1.31 发布,将默认搜索引擎改为 Brave Search
Brave 是基于 Chromium 引擎开发的免费开源网络浏览器。Brave 是一个注重隐私的浏览器,它通过在默认设置中自动阻止在线广告和网站跟踪器来将自己与其他浏览器区分开来。 Brave Browser 1.31 正式发布,该版本更新内容如下: 修正了在 Brave News 中点击推广项目时的崩溃 (#188983) 将 Chromium 升级到 95.0.4638.69 (#190833) 通过 brave://adblock 增加了在 Shields 中自定义过滤列表的支持 (#81076) 在 Brave 中增加了 WDP(Web Discovery Project)(#181663) 在 Tor 窗口中禁用了 WDP (#188856) 增加了对自适应 CAPTCHA 的支持 (#156007) 为 go-ipfs 添加了 Brave 代理的版本后缀 (#185052) 对于某些地区的 Brave 浏览器新安装用户,将默认搜索引擎更改为 Brave Search (#183313) 更新了奖励面板设计 (#146024) 更新了隐私窗口新标签页的设计 (#18486) ...
- 下一篇
D 语言/DLang 2.098.0 发布
D 语言(DLang) 2.098.0 版本已发布,公告显示,DLang 2.098.0 现在以 DMD 2.098.0(D 编译器)和 LDC 1.28.0(基于 LLVM 的 D 编译器)的形式提供。此外,D 语言已经支持 OpenBSD。 此版本包含 17 项目主要变更,同时修复了 160 个 issue。 编译器变更 添加别名赋值 (Alias Assignment) 功能 通过 ImportC 编译器从 D 语言访问C 语言的声明 使用 syntax(args) => {}会触发一条 deprecation 消息 对生成 C++ 头文件的改进 默认启用 -preview=dtorfields 为向量类型添加.min, .max 等属性 使用可变变量作为 switch case 会触发错误 越界的数组访问现在会提供更友好的错误消息 从 D 语言中删除类分配器 (Class allocators) 初始化来自static this的不可变全局数据现在会触发一个错误 添加-target=<triple>用于操作系统、C 和 C++ 运行时交叉编译 默认初始化uni...
相关文章
文章评论
共有0条评论来说两句吧...