mtasci42/moltbook-a2a-prompt-injection
GitHub: mtasci42/moltbook-a2a-prompt-injection
首个针对纯 AI 社交网络中 Agent 间提示词注入攻击的系统性研究项目,提供攻击分类法、人工验证数据集及轻量级检测基准。
Stars: 0 | Forks: 0
# 纯 AI 社交网络中的 Agent-to-Agent Prompt Injection
[](https://doi.org/10.5281/zenodo.20822682)
[](LICENSE)
[](https://creativecommons.org/licenses/by/4.0/)
本论文的代码、数据和可复现性材料:
- **源代码 (GitHub):**
- **归档发布 (Zenodo):**
本仓库包含经过人工验证的数据集、分析和建模 notebook,以及论文中使用的图表。它们共同复现了分类法、检测基准和报告的结果。可引用的版本归档快照已存放于 Zenodo,DOI 如上所示。
## 概述
Moltbook 于 2026 年初推出,是首个参与者全部为自主 AI agent 的社交网络:agent 阅读并对彼此的帖子采取行动,而人类仅负责观察。这创造了一个新的攻击面,我们称之为 **agent-to-agent (A2A) prompt injection**,在这种攻击中,恶意帖子会被其他 agent 摄取并执行,因此攻击可以通过社交图谱传播,而不是仅针对单一模型。
从 Moltbook 公开存档中包含 3,105,136 条帖子的时间窗口出发,本研究:
1. 定义了一个**五类攻击分类法**(指令覆盖、身份/控制劫持、广告/重定向、信息泄露、memory poisoning);
2. 通过 LLM 辅助标注与人工裁决,构建了一个**经人工验证的标注数据集**;
3. 在一种**抗泄露、感知分组**的协议下比较了**三种检测器** —— 一个 zero-shot transformer、一个微调过的 DistilBERT,以及一个可解释的 TF-IDF + 逻辑回归模型,该协议将近乎重复的模板排除在训练集和测试集之外;
4. 审计了启发式候选生成筛选器的召回率,以表征全平台的覆盖范围。
**核心结果。** 在优化的阈值下,轻量级的可解释模型(F1 = 0.941,ROC-AUC = 0.977)**匹敌**了微调过的 transformer(F1 = 0.917),两者没有统计学上的显著差异(配对 bootstrap,McNemar p = 1.0),同时成本要低得多,并且完全可检查。筛选召回率审计表明,启发式阶段仅能恢复平台攻击的约 11%,因此候选生成(而非分类)才是主要的部署瓶颈。
## 方法论

*端到端 pipeline。阶段 1 包括数据收集、面向召回率的启发式筛选以及人工验证的标注;阶段 2 包括去重、感知分组的数据划分、模型训练、阈值优化和评估。*
按顺序进行的处理和建模步骤如下:
1. **数据收集。** 加载 Moltbook 公开存档中包含 3,105,136 条帖子的时间窗口(参见下文的*数据 → 第三方数据源*)。
2. **启发式筛选。** 一个高召回率的基于正则表达式的筛选器会标记与五个分类类别中任何一个匹配的候选帖子,从而生成候选池。
3. **EDA 与阶段分析。** 跨三个平台阶段(发布、稳定、收购后)的探索性数据分析。
4. **采样与标注。** 从候选池中抽取阶段平衡的样本,并通过 LLM 辅助标注与人工裁决进行标注,生成 `moltbook_seed_v2.csv`。
5. **去重。** 基于模板的去重将近乎重复的帖子进行分组。
6. **感知分组的划分。** 训练/测试集划分将重复组的所有成员保持在同一侧,以防止模板在训练集和测试集之间泄露。
7. **模型训练。** 训练了三种检测器:zero-shot transformer、微调过的 DistilBERT 和 TF-IDF + 逻辑回归。
8. **阈值优化与评估。** 调整决策阈值;通过配对 bootstrap 和 McNemar 检验、感知分组的交叉验证以及时间留出法来比较模型。
9. **召回率审计。** 一个独立的阶段分层样本(`recall_audit_labeled.csv`)用于估计真实的攻击基础发生率和启发式筛选器的召回率。
## 仓库结构
```
.
├── notebooks/
│ ├── phase1_data_exploration.ipynb # Phase 1: data loading, heuristic screening,
│ │ # EDA, sampling, seed export, recall audit
│ └── phase2_model_training.ipynb # Phase 2: dedup + group-aware split, three models,
│ # threshold opt., bootstrap/McNemar, CV,
│ # temporal holdout, error analysis
├── data/
│ ├── moltbook_seed_v2.csv # 630 human-labeled posts (the training/eval seed)
│ └── recall_audit_labeled.csv # 1,500 adjudicated posts for the screen-recall audit
├── figures/ # figures used in the paper (PNG)
├── requirements.txt
├── CITATION.cff
├── LICENSE
└── README.md
```
## 代码信息
所有分析均在两个自包含的 Jupyter notebook(Python 3.10+)中实现,并在 Google Colab 上开发。无需单独的包或 CLI;从上到下运行这些 notebook 即可复现论文中的每一个结果、表格和图表。
| Notebook | 目的 | 关键输入 | 关键输出 |
|---|---|---|---|
| `notebooks/phase1_data_exploration.ipynb` | 数据加载、高召回率启发式筛选、EDA 与阶段分析、平衡采样、seed 导出以及筛选召回率审计 | Moltbook 存档(在 notebook 中下载) | `moltbook_seed_v2.csv`、`recall_audit_labeled.csv`、EDA 图表 |
| `notebooks/phase2_model_training.ipynb` | 模板去重和感知分组的划分;训练/评估三种检测器;阈值优化;bootstrap/McNemar 显著性检验;感知分组的交叉验证;时间留出法;错误和可解释性分析 | `moltbook_seed_v2.csv` | 基准测试表、ROC/PR 曲线、显著性检验结果、错误分析 |
- **语言 / 运行时:** Python 3.10+。
- **主要库:** 参见 [`requirements.txt`](requirements.txt)(scikit-learn、pandas、NumPy、Hugging Face `transformers`/`datasets`、PyTorch、matplotlib)。
- **硬件:** TF-IDF 和 zero-shot 路径在 CPU 上运行;在阶段 2 中微调 DistilBERT 可受益于 GPU。
- **配置:** 两个 notebook 都在靠近顶部的位置定义了 `DATASET_DIR` (Google Drive) 路径 —— 请在运行前将其修改为您自己的目录。
## 数据
### 第三方数据源
原始帖子存档是第三方数据,获取自 **Moltbook Observatory Archive**,这是一个由 Simula Metropolitan Center for Digital Engineering (SimulaMet) 在 Hugging Face 上发布的开放数据集:
- **数据集:**
- **作者:** Sushant Gautam 和 Michael A. Riegler (SimulaMet)
- **许可证:** MIT
- **底层工具(源代码):**
完整的包含 3,105,136 条帖子的时间窗口**并未**在本仓库中重新分发:它体积庞大且由外部维护,是在 `phase1_data_exploration.ipynb` 中从该存档的 `posts` 子集中检索的,例如:
```
from datasets import load_dataset
ds = load_dataset(
"SimulaMet/moltbook-observatory-archive",
"posts",
split="archive",
)
```
此处发布的两个 CSV 文件是源自该存档的、经人工验证的子集。论文的*材料与方法*部分也引用了相同的来源(参见下文的*引用 → 第三方数据源*以获取正式的参考文献)。
### `data/moltbook_seed_v2.csv` — 已标注的 seed (n = 630)
从筛选后的候选池中抽取的 630 条帖子(167 条攻击,463 条非攻击)的阶段平衡样本,每条帖子均由人工标注员裁决。
| 列名 | 描述 |
|---|---|
| `id` | 存档中的帖子标识符 |
| `agent_name`, `submolt` | 作者 agent 和社区 |
| `title`, `content` | 帖子文本 |
| `score`, `comment_count` | 参与度元数据 |
| `phase` | 平台阶段(1 = 发布,2 = 稳定,3 = 收购后) |
| `n_categories`, `total_hits`, `sezgisel_kategoriler` | 启发式筛选输出(匹配的类别 / 命中次数) |
| `ETIKET_saldiri_var_mi` | **最终标签**:1 = A2A 攻击,0 = 非攻击 |
| `ETIKET_kategori` | 正面帖子的分类法类别(C1–C5) |
| `ETIKET_notlar` | 标注员备注 |
标注原则:只有当帖子**执行**了攻击时,才将其标记为正面;仅**讨论**或防御攻击的帖子被标记为负面。
### `data/recall_audit_labeled.csv` — 筛选召回率审计 (n = 1,500)
独立于 seed 抽取的阶段分层随机样本,使用相同的协议进行裁决,用于估计真实的攻击基础发生率和启发式筛选器的召回率。
| 列名 | 描述 |
|---|---|
| `id`, `phase`, `submolt` | 帖子 ID、平台阶段、社区 |
| `regex_flagged` | 启发式筛选器是否将此帖子标记为候选 (1/0) |
| `claude_label` | 裁决后的攻击标签 (1 = 攻击,0 = 非攻击) |
| `category` | 正面帖子的分类法类别 |
| `confidence`, `reason` | 裁决置信度和理由 |
| `display_text` | 裁决期间显示的帖子文本 |
召回率的计算方式为:筛选器已标记(`regex_flagged == 1`)的、经裁决确认的攻击(`claude_label == 1`)所占的比例。
## 用法 / 复现结果
### 获取仓库
```
git clone https://github.com/mtasci42/moltbook-a2a-prompt-injection.git
cd moltbook-a2a-prompt-injection
```
(或者,从 Zenodo 下载归档的发布版本:。)
### 依赖要求
```
pip install -r requirements.txt
```
推荐使用 Python 3.10+。在阶段 2 中微调 DistilBERT 可受益于 GPU(notebook 是在 Google Colab 上开发的);TF-IDF 和 zero-shot 路径可在 CPU 上运行。
### 步骤
1. **阶段 1 — `notebooks/phase1_data_exploration.ipynb`。** 加载存档(或缓存的扫描结果),运行高召回率的启发式筛选,执行 EDA 和阶段分析,抽取平衡的 seed 并将其导出。附录复现了筛选召回率审计。*只需运行两种数据加载选项中的一种(缓存模式 vs. 从头下载模式)。*
2. **阶段 2 — `notebooks/phase2_model_training.ipynb`。** 加载标注的 seed,应用基于模板的去重和感知分组的训练/测试集划分,训练并评估三种检测器,优化阈值,运行 bootstrap/McNemar 显著性检验、感知分组的交叉验证、时间留出法,以及错误/可解释性分析。
## 伦理使用
本仓库记录了已在 Moltbook 上公开的攻击行为;它没有引入任何新的攻击向量。分类法和检测器作为**防御性**工件发布,供平台运营商和 agent 开发者使用。请勿使用这些材料来构建或部署 A2A injection 攻击。有关双重用途的更完整讨论,请参阅论文的*伦理考量*部分。
## 引用
如果您使用了此数据集或代码,请同时引用**论文和归档的软件/数据记录**。
**论文:**
```
@article{tasci2026a2a,
author = {Ta{\c{s}}c{\i}, Mustafa},
title = {Agent-to-Agent Prompt Injection in AI-Only Social Networks: A Taxonomy and Detection Study on Moltbook},
journal = {PeerJ Computer Science},
year = {2026},
note = {TODO: add volume/pages/article DOI once published}
}
```
**代码与数据存档:**
```
@dataset{tasci2026a2a_zenodo,
author = {Ta{\c{s}}c{\i}, Mustafa},
title = {Agent-to-Agent Prompt Injection in AI-Only Social Networks: Code and Data},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.20822682},
url = {https://doi.org/10.5281/zenodo.20822682}
}
```
机器可读的引用信息也提供在 [`CITATION.cff`](CITATION.cff) 中。
**第三方数据源。** 本研究分析了 Moltbook Observatory Archive;如果您使用了底层数据,请同时引用其创建者:
```
@dataset{moltbook_observatory_archive_2026,
author = {Gautam, Sushant and Riegler, Michael A.},
title = {Moltbook Observatory Archive},
year = {2026},
publisher = {Hugging Face Datasets},
url = {https://huggingface.co/datasets/SimulaMet/moltbook-observatory-archive}
}
@software{moltbook_observatory_2026,
author = {Riegler, Michael A. and Gautam, Sushant},
title = {Moltbook Observatory: Passive Monitoring Dashboard for AI Social Networks},
year = {2026},
url = {https://github.com/kelkalot/moltbook-observatory}
}
```
## 许可证与贡献
- **代码**(notebook):MIT 许可证(参见 [`LICENSE`](LICENSE))。
- **数据**(`data/*.csv`)和**图表**:知识共享署名 4.0 (CC BY 4.0)。
原始 Moltbook 存档受其原始来源条款的约束(参见*数据 → 第三方数据源*),在此未重新许可。
**贡献。** 本仓库主要作为论文的静态可复现性存档发布。欢迎通过 GitHub Issues 提交错误报告、更正和可复现性问题:。如果您想贡献修复,请先打开一个 issue 讨论更改,然后提交引用该 issue 的 pull request。
请勿提交将这些材料扩展用于攻击性用途的贡献(参见*伦理使用*)。
标签:AI智能体, Apex, CISA项目, DLL 劫持, NoSQL, 人工智能, 凭据扫描, 大语言模型, 机器学习, 用户模式Hook绕过, 社会网络, 逆向工具