T01 · Skill Instruction Hijacking
- Location
scripts/follow_scoutx.py:1640- Finding
Indirect Prompt Injection Through Untrusted Feed Content
- Content
View full analysis
dict[str, Any]: source_values = raw.get("sources") or [] sources = [str(value).strip() for value in source_values if str(value).strip()] return { "content_id": str(raw.get("content_id") or raw.get("id") or raw.get("url") or "").strip(), "source_type": "scoutx", "source_label": SOURCE_TYPE_LABELS["scoutx"], "title": html.unescape(str(raw.get("title") or "").strip()), "summary": str(raw.get("summary") or raw.get("summary_text") or raw.get("description") or raw.get("content") or "").strip(), "url": str(raw.get("url") or raw.get("canonical_url") or "").strip(), "published_at": str(raw.get("published_at") or raw.get("publishedAt") or "").strip(), "sources": sources or [SOURCE_TYPE_LABELS["scoutx"]], "tags": [str(value).strip() for value in raw.get("tags") or [] if str(value).strip()], "metadata": {}, } ``` The externally supplied title and summary are then copied into the LLM payload: ```python def payload_item(item: dict[str, Any]) -> dict[str, Any]: return { "content_id": item["content_id"], "source_type": item.get("source_type", "scoutx"), "source_label": item.get("source_label", SOURCE_TYPE_LABELS["scoutx"]), "title": item["title"], "summary_text": compress_item_summary(item, char_budget=per_item_budget), "canonical_url": item["url"], "published_at": item["published_at"], "sources": item["sources"], "tags": item["tags"], "metadata": item.ge ...[truncated 5473 chars]- Remediation
View remediation
