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

时间:2019-10-17 07:19:32

标签: r security

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

1 个答案:

答案 0 :(得分:1)

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

示例:

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

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

当然,y必须在readRDS之后的代码中执行。

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

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

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

希望有帮助。

相关问题