背景
getcookies
包存在后门代码, 目前已经被发现并从 npmjs.org 中删除.
相关报道
- Hacker News: Backdoor injected to NPM express-cookies package
2018-05-02T08:26:01.000Z
- npmjs Reported malicious module: getcookies
May 2, 2018 (3:47 pm)
- solidot 有人尝试在流行的 JavaScript 包中植入后门
2018年05月04日 15时50分
基本信息
恶意包包括: getcookies
, express-cookies
, http-fetch-cookies
, 其中后门代码在getcookies
中.
由于 npm 已经删除了上述恶意包, 无法正常获取信息. 但是作为镜像的
npm.taobao.org
当前仍旧可以获取信息. 此后的信息都是从npm.taobao.org
获取. 同时为了避免失效, 获取到的信息都有留存.
发布人的信息: dustin87 <[email protected]> https://npm.taobao.org/~dustin87
留存
三个包的留存
getcookies
包信息: https://registry.npm.taobao.org/getcookies 备份 版本备份: https://github.com/isayme/blog/blob/master/issues/13/getcookies/
express-cookies
包信息: https://registry.npm.taobao.org/express-cookies 备份 版本备份: https://github.com/isayme/blog/blob/master/issues/13/express-cookies/
http-fetch-cookies
包信息: https://registry.npm.taobao.org/http-fetch-cookies 备份 版本备份: https://github.com/isayme/blog/blob/master/issues/13/http-fetch-cookies/
三个包的基本信息
getcookies
首次上传时间: 2018-03-22T07:45:55.796Z
, 上传人邮箱: [email protected]
包内的 History.md 文件描述此包创建于2012-05-28
. 其实这个包是从 cookie@0.3.1 修改而来, History.md
的信息都是cookie
的记录, 存在误导.
express-cookies
首次上传时间: 2018-03-22T07:46:26.847Z
, 上传人: [email protected]
包内的 History.md 文件描述此包创建于2014-02-15
. 其实这个包是从 cookie-parser@1.4.3 修改而来, History.md
的信息都是cookie-parser
的记录, 存在误导.
http-fetch-cookies
首次上传时间: 2018-04-12T12:44:43.189Z
, 上传人: [email protected]
此包为空包, 暂无更多信息.
谁在用这些包?
expess-cookies 依赖 getcookies; http-fetch-cookies 依赖 expess-cookies; mailparser 依赖 http-fetch-cookies;
mailparser
└── http-fetch-cookies
└── express-cookies
└──getcookies
其中 mailparser
存在一定的文档下载量:
仅 mailparser
2.2.1
2.2.2
2.2.3
三个版本分别依赖了 http-fetch-cookies
的 1.0.0
1.0.0
1.0.1
版本, 目前 mailparser
的这三个版本已经删除, 备份: https://github.com/isayme/blog/blob/master/issues/13/mailparser/
其中 [email protected]
发布于 2018-04-12T12:45:09.611Z
, [email protected]
发布于 2018-04-12T12:46:40.121Z
, [email protected]
发布于 2018-04-12T12:52:13.451Z
. 有趣的是: mailparser
在 2018年3月11日 GMT+8 下午6:18
就已经标记为 deprecated
.
后门机制
攻击者通过headers
构建上传恶意代码并执行:
- 匹配
req.headers
中 gCOMMAND
hCODE
; - 当
COMMAND
是0xfffe
时重置 code buffer; - 当
COMMAND
是0xfffe
/0xfffa
以外的值时加载CODE
至 code buffer; - 当
COMMAND
是0xfffa
时执行 code buffer 的代码, 其中 code buffer 返回一个函数.
示例 code buffer:
var codebuffer = `(function() {
return function (...args) {
console.log(args)
}
})()`
require('vm')['runInThisContext'](codebuffer)('we', 'can', 'do', 'anything', 'here')
require('vm')['runInThisContext'](codebuffer)(module.exports, require, req, res, next)