R:可以将恶意代码注入RDS对象吗?

问题描述 投票:0回答:1

我们有一个设置,允许外部用户通过UI运行分析工具。在此界面中,某些工具将R对象作为RDS接收为输入。这样安全吗?有人可以在提供的RDS中注入恶意代码调用(或其他攻击)吗?我们只使用loadRDS和saveRDS,而不是更一般的加载和保存处理整个工作区。

r security
1个回答
1
投票

从技术上讲,RDS对象是“任何东西”的单个对象。在此功能中,将有一个隐藏的系统调用,您认为这可能会引入漏洞利用。 system()函数将以用户身份在控制台上执行命令。只要运行R的进程具有访问权限,就可以利用它来利用主机系统。

示例:

x <- function() {
     system("echo EXPLOIT") 
} 
saveRDS(x, "x.RDS") 

y <- readRDS("x.RDS")
y()

当然,在readRDS之后的代码中需要执行y。

假设您正在使用存储在对象中的函数读取S3或S4对象。当代码执行此功能时,可以运行代码。

[就像许多编程语言一样,需要检查输入,并检查对象是否属于某个类必须非常严格(例如,如果您询问是否是data.frame,则它将响应TRUE)。您可能会提取读入对象的值,然后使用这些值创建一个新对象,或者您确实确定无法执行此操作。

使用eval时,人们可能会想到更多创造性的利用。

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.