[P1/高] PromptInjectionDefender 未检测 Unicode 同形字符与零宽字符 #16

Open
opened 2026-07-21 21:55:45 +08:00 by thzxx · 0 comments
Owner

问题类型

安全漏洞 / 高 / Agent 引擎

文件位置

electron/harness/security/prompt-injection-defense.ts

问题描述

攻击者可使用 Unicode 同形字符(homoglyph)绕过关键词检测:

  • іgnore (使用西里尔字母 і 替换 i)
  • іgnorе (混用拉丁、西里尔、希腊字母)
  • ignore\u200bprevious (零宽空格分隔)
  • ignore\u00adprevious (软连字符)

这些字符在视觉上与原文无异,但正则匹配会失败。

影响

  • 高级提示注入绕过检测
  • LLM 可能仍能理解这些字符(因为 tokenizer 会归一化)

建议修复

  1. Unicode 归一化:检测前先 NFKC 归一化
const normalized = input.normalize('NFKC');
// 移除零宽字符
const cleaned = normalized.replace(/[\u200b\u200c\u200d\u00ad\ufeff]/g, '');
// 然后检测
  1. 检测可疑 Unicode:如果输入包含混合脚本(拉丁 + 西里尔),提高风险分数
  2. 参考 OWASP Prompt Injection Cheat Sheet
## 问题类型 安全漏洞 / 高 / Agent 引擎 ## 文件位置 `electron/harness/security/prompt-injection-defense.ts` ## 问题描述 攻击者可使用 Unicode 同形字符(homoglyph)绕过关键词检测: - `іgnore` (使用西里尔字母 і 替换 i) - `іgnorе` (混用拉丁、西里尔、希腊字母) - `ignore\u200bprevious` (零宽空格分隔) - `ignore\u00adprevious` (软连字符) 这些字符在视觉上与原文无异,但正则匹配会失败。 ## 影响 - 高级提示注入绕过检测 - LLM 可能仍能理解这些字符(因为 tokenizer 会归一化) ## 建议修复 1. **Unicode 归一化**:检测前先 NFKC 归一化 ```ts const normalized = input.normalize('NFKC'); // 移除零宽字符 const cleaned = normalized.replace(/[\u200b\u200c\u200d\u00ad\ufeff]/g, ''); // 然后检测 ``` 2. **检测可疑 Unicode**:如果输入包含混合脚本(拉丁 + 西里尔),提高风险分数 3. 参考 OWASP Prompt Injection Cheat Sheet
thzxx added the ???Agent?????? labels 2026-07-21 21:55:45 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MetonaTeam/metona-ai-desktop#16