fhryzal/sibyl-b005-fence-bypass
GitHub: fhryzal/sibyl-b005-fence-bypass
针对 Sibyl Memory v0.4.15 的 prompt injection 围栏隔离机制提供三种绕过方式的漏洞复现代码与修复方案。
Stars: 0 | Forks: 0
# Sibyl Memory 注入围栏绕过
sibyl-memory 围栏实现(v0.4.15)中 prompt injection 漏洞的复现代码。
## 发现
围栏清理器存在三种绕过方式:
**Unicode 空白字符**
正则表达式在 `[UNTRUSTED MEMORY CONTEXT ...]` 中寻找的是字面上的 ASCII 空格。零宽空格(U+200B)、制表符和不间断空格会破坏匹配模式,但在渲染时看起来完全相同。伪造的标记可以顺利通过。
**字典键漏洞**
清理器会递归处理字典的值,但键却保持不变。将标记放在键中,它就能保留下来。
**嵌套结构**
存储一个带有 `_untrusted_context` 字段的 body。输出中会出现两个控制块——一个真实的位于根节点,一个伪造的嵌套在 body 中。模型会看到相互冲突的围栏标记。
## 运行
```
pip install sibyl-memory-client==0.4.15 mcp
git clone https://github.com/Sibyl-Labs/Sibyl-Memory
python3 sibyl_fence_bypass_poc.py
```
## 修复
在写入前剥离保留键:
```
_RESERVED = {"_untrusted_context", "ok", "error"}
def strip_reserved(v):
if isinstance(v, dict):
return {k: strip_reserved(val) for k, val in v.items() if k not in _RESERVED}
if isinstance(v, list):
return [strip_reserved(x) for x in v]
return v
```
在 insert 之前将其应用于 `set_entity`。仅靠读取端的清理是不够的。
标签:AI安全, Chat Copilot, DLL 劫持, Web报告查看器, 大语言模型, 漏洞验证程序, 逆向工具