MySQL npm包中的本地文件泄露漏洞

在一次安全评估中,专家发现使用npm mysql包的应用程序存在安全隐患,即使禁用了LOCAL_FILES标志,恶意MySQL服务器仍能读取客户端本地文件,影响多个2.x版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

“A pure node.js javascript Client implementing the MySQL protocol.”

漏洞

在某次安全评估中,Synacktiv专家无意中发现某个应用可以从另一台MySQL服务器中读取敏感数据,而该应用程序正是使用了mysql的npm软件包。该npm软件包所支持的LOAD DATA LOCAL命令可让服务器读取客户端机器上的文件。 尽管用户可以通过指定标记LOCAL_FILES来禁用这个危险功能,但实际上该配置并不生效,最后导致恶意的MySQL服务器始终可以读取连接客户端本地的文件。

影响版本

文章发布时多个2.x版本受到影响(2.17.1受到影响)。

技术细节

根据官方文档的说法,mysql的npm包支持在进行连接时指定各种flag(某些设定参数),其中的LOCAL_FILES代表在客户端中是否可以使用LOAD DATA LOCAL命令。

以下示例显示了如何禁用该命令:

var mysql = require('mysql');

var connection = mysql.createConnection('mysql://test:test@127.0.0.1/test?flags=-LOCAL_FILES');

connection.connect();

connection.query('SELECT 1', function (error, results, fields) { });

connection.end();

通过抓包软件可以看到,LOAD DATA LOCAL是不可用的:
在这里插入图片描述

但是,服务器仍然可以要求连接过来的客户端读取本地文件,下图中的bettercap命令是Bettercap已经集成的一个简易恶意MySQL服务器,相关链接为[https://github.com/bettercap/bettercap/wiki/mysql.server](https://github.com/bettercap/bettercap/wiki/mysql.server)

在这里插入图片描述

可以从上图看出“/etc/passwd”已被读取。该漏洞存在的根本原因是LOCAL_FILES标记并没有在代码运行时起到作用。

在这里插入图片描述

时间线

2019/05/10:发现漏洞

2019/05/14:发送报告给官方

2019/05/14:官方确认收到

2019/05/15:同意90天漏洞公开期

2019/07/24:发送邮件询问最新进展,无回应

2019/10/24:发送邮件询问最新进展,无回应

2019/11/04:漏洞详情公开

感谢你的阅读!

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场:https://nosec.org/home/detail/3157.html
来源:https://www.synacktiv.com/ressources/advisories/Local_file_disclosure_mysql_npm_package_2.17.1.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值