Rust编程语言暴露的漏洞,攻击者可以轻松删除文件和目录系统删除文件和目录。该漏洞影响Rust1.0.0至Rust1.58.0,近期发布的Rust1.58.1版本已修复该漏洞。“根据Rust编程维护者的安全建议,Rust安全响应工作组已获悉std::fs::remove_dir_all标准库函数容易受到启用符号链接跟随(CWE-363)的竞争条件的影响语言。攻击者可以通过诱使特权程序删除攻击者无法访问或删除的文件和目录来利用此安全问题。”安全公告指出std::fs::remove_dir_all已经包含防止递归删除符号链接的机制,但它们没有正确实现。“不幸的是,这个检查在标准库中没有正确实现,导致了TOCTOU(检查时间使用时间)竞争条件。标准库没有告诉系统不要遵循符号链接,而是检查它首先要删除的不是符号链接,否则它将继续递归删除目录。这暴露了一个竞争条件:攻击者可以创建一个目录并在检查和实际删除之间交换该目录以获取符号链接。虽然这攻击可能在第一次尝试时不起作用,但在实验中它能够在几秒钟内可靠地执行,”Rust维护者说。攻击者利用该漏洞的原因如下:假设一个非特权访问系统的攻击者想要删除一个名为sensitive/的系统目录,但他没有操作权限,他可以利用该漏洞找到一个特权程序删除它有权访问的目录(名为temp/),创建从temp/foo到sensitive/的符号链接,并等待上述特权程序删除foo/。特权程序将遵循从temp/foo到sensitive/的符号链接,同时递归删除,导致sensitive/被删除。参考链接:https://securityaffairs.co/wordpress/127135/security/rust-programming-language-flaw.html
