2018-04-28 22:43:52

rocket.cat 集成问题

最近接触到 rocket.chat,因为一些原因写了一些集成,发现 rocket.chat 居然是用 nodejs 的 vm 模块来跑的集成代码。这下好办了,由于 rocket.chat 并不支持一个 webhook 发往多个频道和多个接收人,这个对我来说有点烦,毕竟 rocket.chat 的集成得管理员手动一个一个加

逃逸 vm

我们都知道 vm 有问题,可以通过 this.constructor直接逃逸 vm 环境,执行任意代码,rocket.chat 也不例外,虽然它并不是直接跑而是 compile 绕了一圈,但是结果还是逃不出攻击的问题:

var Script = this.constructor.constructor(`
  return {
     process_incoming_request({ request }) {
      // do what the fuck you want to do
     }
  }
`)

如果代码中也想用反引号,可以在 babel 官网自己转一下

发往多个接收人

翻了翻 rocket.chat 的代码,emmmmm,实在是写得太烂了,没用 ts 倒还好说,测试够也没啥,关键是用 meteor 框架导致无意义的全局变量到处都是,发消息的函数就是这样一个全局变量,贼搞笑:

// https://github.com/RocketChat/Rocket.Chat/blob/537553609613581f95ba3d4590a1b0b2a4c12c4e/packages/rocketchat-integrations/server/processWebhookMessage.js
processWebhookMessage(content, user, defaults)

传啥上面的源代码里都有了

其他

rocket.chat 现在有两千个 issue,说明替代 slack 的方案还是挺受欢迎的?毕竟 slack 大规模用还是涉及到收费的问题

本文链接:https://smallpath.me/post/nodejs-vm-escape

-- EOF --