T02 · Agent Memory Poisoning
- Location
hooks/openclaw/handler.js:18- Finding
Role-confused transcript processing enables persistent identity and memory poisoning
- Content
View full analysis
{ if (!context || typeof context !== 'object') { return ''; } if (typeof context.transcript === 'string') { return context.transcript; } if (typeof context.messages === 'string') { return context.messages; } if (Array.isArray(context.messages)) { return JSON.stringify(context.messages); } return ''; }; ``` `hooks/auto_capture.py:204-211` ```python def filter_transcript(transcript: str) -> str: """Keep only likely user-signal lines from a transcript.""" filtered_lines = [ line.strip() for line in transcript.splitlines() if line.strip() and (not is_noisy_line(line) or any(pattern.search(line) for pattern in FIRST_PERSON_PATTERNS)) ] return ' '.join(filtered_lines) ``` `hooks/auto_capture.py:252-278` ```python observation_candidates, transcript = parse_input(input_data) if not observation_candidates and transcript: transcript = filter_transcript(transcript) if transcript: observation_candidates = extract_patterns(transcript) normalized_observations = [ normalized for candidate in observation_candidates[:5] for normalized in [normalize_observation(candidate)] if normalized is not None ] if not normalized_observations: print(json.dumps({'status': 'success', 'captured': 0, 'reason': 'no observations found'})) return 0 for observation in normalized_observations: capture( text=observation['text'], obs_type=observation['type'], tags=observation['tags'], confidence=observation['confidence'], ) try: r ...[truncated 3088 chars]- Remediation
View remediation
