T01 · Skill Instruction Hijacking
Note
- Location
- scripts/svg_bar_chart.py:238
- Finding
- Unconditional Third-Party Branding in Generated Reports<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:163-165`, `scripts/svg_bar_chart.py:238-247`, and `scripts/png_longform.py:379-388` **Vulnerability Type**: Output manipulation through mandatory branding **Risk Level**: Low ### Vulnerable Code ```markdown - **Top**: 3px teal divider + dark Header - **Bottom**: report time + WorkBuddy watermark ``` ```python <!-- Footer --> <rect y="{chart_bottom+24}" width="{W}" height="{FOOTER_H}" fill="{theme['bg_alt']}"/> <text x="{W//2}" y="{chart_bottom+24+28}" font-size="11" fill="{theme['text_muted']}" font-family="Microsoft YaHei,sans-serif" text-anchor="middle">{footer}</text> <text x="{W//2}" y="{chart_bottom+24+46}" font-size="10" fill="#2A3A50" font-family="Microsoft YaHei,sans-serif" text-anchor="middle">Powered by WorkBuddy</text> ``` ```python main_text = f"Report time: {now} | {text}" tw = draw_obj.textbbox((0, 0), main_text, font=F_SMALL)[2] draw_obj.text(((self.W - tw) // 2, y0 + 12), main_text, font=F_SMALL, fill=GRAY) if next_update: nt_w = draw_obj.textbbox((0, 0), next_update, font=F_SMALL)[2] draw_obj.text(((self.W - nt_w) // 2, y0 + 34), next_update, font=F_SMALL, fill=DIVIDER) # WorkBuddy watermark wm = "Powered by WorkBuddy" wm_w = draw_obj.textbbox((0, 0), wm, font=F_SMALL)[2] draw_obj.text((self.W - wm_w - PAD, y0 + 22), wm, font=F_SMALL, fill=(38, 58, 82)) ``` ### Technical Analysis Both output generators insert the phrase `Powered by WorkBuddy` without consulting user configuration. The SVG renderer places it directly in every generated document, while the PNG renderer draws it into the final image. The Skill documentation also defines the watermark as part of the expected design. Because the attribution cannot be disabled, generated artifacts are systematically modified with third-party promotional content unrelated to the supplied visualization data. This may misrepresent the author, producer, or sponsor of a report. It is classified as instruction hij ...[truncated 798 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Remove unconditional references to WorkBuddy from both renderers. 2. If attribution is legitimately required, expose an explicit configuration field such as `watermark_text`. 3. Disable watermarking by default and require affirmative user consent before adding third-party branding. 4. Document attribution behavior clearly and allow an empty value to suppress it. 5. Add tests confirming that default output contains only user-requested content. ]]>
