T09 · Insecure Skill Coding Practices
- Location
keynote-mcp-server/keynote_tools/applescript.py:1361- Finding
Arbitrary command execution through AppleScript injection
- Content
View full analysis
str: """ 设置元素的字体。 """ try: result = keynote_controller.set_font(slide_number, element_index, font_name) return f"✓ {result['message']}" except Exception as e: return f"设置字体失败: {e}" ``` The controller passes the value to the AppleScript layer without validation: ```python def set_font(slide_number: int, element_index: int, font_name: str) -> Dict[str, Any]: ensure_keynote_ready() try: applescript.set_font(slide_number, element_index, font_name) return { "status": "success", "action": "set_font", "slide_number": slide_number, "element_index": element_index, "font_name": font_name, "message": f"字体 '{font_name}' 已应用到元素 {element_index}" } except Exception as e: raise KeynoteError(f"设置字体失败: {e}") ``` The value is then interpolated directly into executable AppleScript source: ```python def set_font(slide_number: int, element_index: int, font_name: str) -> str: font = FONT_MAP.get(font_name.lower(), font_name) script = ''' tell application "Keynote" tell front document tell slide %d tell text box %d set font of text to "%s" end tell return "Font set to %s on element %d of slide %d" end tell end tell end tell ''' % (slide_number, element_index, font, font_name, element_index, slide_number) return run_applescrip ...[truncated 2529 chars]- Remediation
View remediation
