T01 · Skill Instruction Hijacking
- Location
quick-start.py:239- Finding
Indirect Prompt Injection Can Trigger Authenticated Game Actions
- Content
View full analysis
tuple[dict, str]: log_match = _LOG_RE.search(text) log_entry = log_match.group(1).strip()[:200] if log_match else "" match = _EXUVIAE_RE.search(text) or _FALLBACK_RE.search(text) if match: try: data = json.loads(match.group(1)) if "action" in data and "type" not in data: data["type"] = data.pop("action") if "params" in data and isinstance(data["params"], dict): data.update(data.pop("params")) if "type" in data: return data, log_entry except json.JSONDecodeError: pass return {"type": "idle"}, log_entry or "Could not parse intention." ``` ```python _INJECTION_RE = re.compile(r'EXUVIAE:\s*\{') def _sanitize_context(text: str) -> str: """Strip potential intention-injection patterns from game world text.""" return _INJECTION_RE.sub('EXUVIAE_BLOCKED: {', text) ``` ```python ctx_str = _sanitize_context(json.dumps(context)) user_msg = f"Check-in reason: {reason}\n\nState: {ctx_str}\n" if events: _truncate_names(events) user_msg += f"Events: {_sanitize_context(json.dumps(events[:5]))}\n" user_msg += "\nWhat is your intention?" intention, log = self._decide(user_msg) ``` ```python def _decide(self, user_msg: str) -> tuple[dict, str]: try: llm_text = self.llm.chat(SYSTEM_PROMPT, user_msg) return parse_response(llm_text) ``` ```python def _ ...[truncated 2596 chars]- Remediation
View remediation
