
A Proof of Concept for the CVE-2021-46398 flaw exploitation
在此仓库中,您将找到一个通过 docker compose 利用 CVE-2021-46398 漏洞的概念验证,以及该漏洞对信息系统影响的分析。
# Exploit Title: FileBrowser 2.17.2 - Cross Site Request Forgery (CSRF) to Remote Code Execution (RCE)
# Date: 05/02/2022
# Exploit Author: FEBIN MON SAJI
# Vendor Homepage: https://filebrowser.org/
# Software Link: https://github.com/filebrowser/filebrowser
# Version:
FileBrowser <= 2.17.2
# Tested on: Ubuntu 20.04
# CVE : CVE-2021-46398
根据 FileBrowser 官网 的介绍,FileBrowser 是一款流行的“创建你自己的云”类软件,您可以将其安装在服务器上,指定一个路径,然后通过一个使用 Go 语言开发的漂亮 Web 界面访问您的文件,并拥有众多功能。它有点像 Google Drive,但每个人都可以拥有并托管自己的实例。
FileBrowser 的管理员可以创建多个用户,甚至另一个拥有管理员权限的用户,并授予其访问任意目录的权限。用户创建由端点 /api/users 处理。该端点接受 JSON 格式的输入来创建用户,但未能验证 Content-Type HTTP 头——其值本应为 application/json,却接受了 text/plain;漏洞就此产生。此外,Origin 也未经校验,且未实现任何反 CSRF 令牌。因此,攻击者只需将恶意网页 URL 发送给合法管理员,即可轻松利用此漏洞创建一个具有管理员权限且可访问主目录或任何目标目录的后门用户,进而访问整个服务器的文件系统(演示部分将更详细说明)。
此外,管理员可以在系统上执行命令,因此该漏洞还会导致 RCE(远程代码执行)。
以下是一个描述攻击过程的序列图(爱丽丝为黑客,鲍勃为管理员及 FileBrowser 实例的托管者):
sequenceDiagram
爱丽丝(黑客) ->> 爱丽丝(黑客): *恶意创建恶意 HTML 页面*
爱丽丝(黑客) ->> 鲍勃(管理员): 这里有个很酷的页面!你一定得看看,兄弟!
鲍勃(管理员) ->> 爱丽丝(黑客): 谢了老兄,我来打开看看!
鲍勃(管理员) ->> 鲍勃(管理员): *打开页面,以为是什么好东西*
鲍勃(管理员) -->> FileBrowser: *在不知情的情况下发送了一个创建用户的请求*
FileBrowser -->> FileBrowser: *按要求创建了一个新的管理员特权用户*
爱丽丝(黑客) ->> FileBrowser: 嘿嘿,鲍勃真傻!*使用后门用户连接 FileBrowser*
FileBrowser ->> 爱丽丝(黑客): *接受爱丽丝使用新创建用户登录*
爱丽丝(黑客) ->> FileBrowser: *点击相应按钮请求 FileBrowser 的 shell 访问权限,然后在鲍勃的计算机上执行系统调用*
本次演示的目标是搭建一个由两/三台机器组成的小型架构:
这是一个非常简化的架构,旨在突出漏洞的技术层面。
本实验只需要 docker。
在该设置中,目标机器基于 FileBrowser v2.17.2 镜像(该版本存在此漏洞),其中唯一的 FileBrowser 账户是管理员账户,登录名/密码为 admin/admin。
启动目标机器:
mkdir srv && docker compose up
从攻击者角度,恶意网页将允许我们执行 FileBrowser API 调用,并从管理员的计算机上创建后门用户。
本仓库提供了一个此类页面的示例,文件名为 index.html。它是一个简单的 HTML 页面,包含一个隐藏的表单,该表单向 FileBrowser 的 /api/users 端点执行 POST 请求,有效负载包含在 input 的 name 属性中。该有效负载会创建一个登录名为“oui”、密码为“oui”的管理员特权用户,点击按钮即可触发。
显然,我们可以制作一个比这个更漂亮、更具吸引力的页面,并将 HTTP 请求的发送隐藏在网站的另一个元素中,这里只是为了展示漏洞利用的技术层面。请记住,恶意网页的目的是让 FileBrowser 管理员在毫无察觉的情况下打开它!
从管理员角度,我们正常在 FileBrowser 上进行管理操作。访问 127.0.0.1:8080,使用管理员凭据 admin/admin 登录。
然后,我们通过某种方式(例如网络钓鱼邮件)收到了恶意网页,并执行触发漏洞利用的操作。打开 index.html 网页,点击按钮;它会执行有效负载。
现在,回到攻击者角度,我们在 FileBrowser 服务器上拥有一个具有管理员权限的后门用户。
在隐私浏览模式下打开您最喜欢的 Web 浏览器,以确保未使用任何管理员的身份验证凭据。访问 localhost:8080,使用后门用户凭据 oui/oui 登录。
恭喜!您现在可以访问 FileBrowser 服务器的文件系统,从而访问服务器上所有用户的文件!
由于 FileBrowser 是一个功能丰富的优秀平台,您可以通过点击“切换 shell”按钮启动一个终端实例……尝试输入 whoami,然后以 root 身份执行任何操作 :)
为了让后门用户能够使用 shell 命令,必须在有效负载中显式声明这些权限。请参阅
index.html添加您的权限!
该漏洞已从 v2.18.0 版本开始修复。相关信息可在他们的 GitHub上找到。修复的部署成本很低,仅需要在一个程序文件中修改 6 行代码。由于漏洞源于解析缺陷(参见漏洞描述),只需确保任何请求在处理其他内容之前都被解析为 application/json 格式即可。
本工作是在格勒诺布尔 INP - Ensimag, UGA 信息系统工程专业最后一年开设的信息系统安全课程中完成的。