rtorrent 的 XML-RPC 存在可利用漏洞

国外网站 arstechnica 发表了一篇文章,称有黑客利用 rtorrent 的漏洞,在受害者服务器上安装挖矿工具,赚了3900美元。

这个漏洞和最近 uTorrent、Transmission 爆出的漏洞类似。rtorrent 使用了 XML-RPC 这个软件来实现 web-ui 服务,而使用 TCP sockets 方式配置的 RPC,不需要任何验证就可以执行 shell 命令。

这个漏洞比 uTorrent 和 Transmission 的更严重,因为不用像 uTorrent 那样必须和用户产生交互。


XML-RPC 的配置有两种常见的方法: TCP sockets 和 UNIX sockets

1.

  • TCP sockets:

    1
    2
    httpd.conf:  SCGIMount /RPC2 127.0.0.1:5000
    rtorrent.rc: scgi_port = localhost:5000
  • TCP sockets 方式在 Nginx 的配置:

    1
    2
    3
    4
    5
    location /RPC2 {
    scgi_pass 127.0.0.1:5000;
    include scgi_vars;
    scgi_var SCRIPT_NAME /RPC2;
    }

2.

  • UNIX sockets:

    1
    scgi_local = /tmp/rpc.socket
  • UNIX sockets 方式在 Nginx 的配置:

    1
    2
    3
    4
    location /RPC2 {
    include scgi_params;
    scgi_pass unix:///tmp/rpc.socket;
    }

其实在很早以前 rtorrent 官网的配置说明中就不推荐使用 TCP sockets 的方法,在 rtorrent 的 wiki 和 archlinux 的 wiki 也都注明了漏洞的相关警告。

但是目前网上还有很多教程在配置 Nginx 时使用的是 TCP sockets。如果你是按照网络教程安装的 rtorrent ,可检查 Nginx 或其他web服务程序的配置文件,以及观察服务器 CPU 使用率是否异常。

如果你需要把 Nginx 的 RPC 配置改成 UNIX sockets 方式,可以参考这篇文章:rTorrent + ruTorrent 安装和配置

还有一部分人可能用的是 github 上面的一键脚本 arakasi72/rtinst,这个脚本默认使用 rutorrent 的 RPC Plugin 来和 rtorrent 通信,并且启用了 Nginx 的登录验证,目前不会受到此漏洞影响。


参考资料: