T01 · Skill Instruction Hijacking
- Location
scripts/run_matching_benchmark_llm.py:247- Finding
Untrusted Skill Metadata Is Embedded in LLM Prompts Without Prompt-Injection Isolation
- Content
View full analysis
dict[str, Any]: jd = case.get("gold_jd") if not isinstance(jd, dict): raise ValueError("case missing gold_jd object") catalog = case.get("skill_catalog") if not isinstance(catalog, list): raise ValueError("case missing skill_catalog array") matching = case.get("matching") if not isinstance(matching, dict): matching = {} delegate_min = matching.get("delegate_min_score", 75) confirm_min = matching.get("confirm_band_min", 60) return { "case_id": case.get("case_id"), "user_task": case.get("user_task", ""), "jd": jd, "candidates": catalog_to_candidates(catalog), "matching_config": { "delegate_min_score": delegate_min, "confirm_band_min": confirm_min, }, } ``` It then embeds the payload directly in a model message: ```python user_content = ( "Produce on ...[truncated 2649 chars]- Remediation
View remediation
