{"data":{"skill":{"slug":"agentspace-so-seedance-v2","name":"seedance-v2","icon":"📦","repo":"https://github.com/agentspace-so/runcomfy-agent-skills/tree/main/seedance-v2/","status":"approved","author":"agentspace-so","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"e04bdb2e-a873-433d-ac1b-4e022371a32b","skill_id":"886310c3-3b7e-425d-8f1c-170949d8017d","version":7,"content_hash":"v2:3e4b6c31a74a3bd1a291c98cf585d720cb9fbc88:7b7d4b2eb7400154ce06a6a271f11f3b27c39cbd03d453939a869f674427a86f:8a35b9e73ece01ba7dd9ead9ced68c7e669e5a95c9fa73c429912809edfb25d4:acc2919fd51a91099e1b9fab4026a142","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most static command findings are Markdown formatting or schema terms, but the skill intentionally runs RunComfy CLI commands and uses RunComfy network services. Placeholder media URLs are false positives for path traversal. The main residual risks are third-party prompt and media submission, local CLI execution, and token storage.","remediation":[{"issue":"External CLI execution","severity":"medium","suggestion":"Require user confirmation before running RunComfy commands, and document the expected command, input file, and output directory."},{"issue":"Third-party data transfer","severity":"medium","suggestion":"Warn users that prompts and media URLs are sent to RunComfy services, and advise against sensitive or unapproved media."},{"issue":"RunComfy token storage","severity":"high","suggestion":"Recommend scoped tokens, token rotation, and RUNCOMFY_TOKEN for CI. Document how users can remove the local token file."},{"issue":"Ambiguous placeholder URLs","severity":"low","suggestion":"Use example.com placeholder media URLs to avoid path traversal false positives from https://... examples."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":10,"line_start":10},{"file":"SKILL.md","line_end":26,"line_start":24},{"file":"SKILL.md","line_end":38,"line_start":26},{"file":"SKILL.md","line_end":46,"line_start":38},{"file":"SKILL.md","line_end":47,"line_start":46},{"file":"SKILL.md","line_end":48,"line_start":47},{"file":"SKILL.md","line_end":48,"line_start":48},{"file":"SKILL.md","line_end":56,"line_start":52},{"file":"SKILL.md","line_end":57,"line_start":56},{"file":"SKILL.md","line_end":57,"line_start":57},{"file":"SKILL.md","line_end":58,"line_start":58},{"file":"SKILL.md","line_end":59,"line_start":59},{"file":"SKILL.md","line_end":60,"line_start":60},{"file":"SKILL.md","line_end":62,"line_start":61},{"file":"SKILL.md","line_end":62,"line_start":62},{"file":"SKILL.md","line_end":64,"line_start":63},{"file":"SKILL.md","line_end":70,"line_start":64},{"file":"SKILL.md","line_end":74,"line_start":70},{"file":"SKILL.md","line_end":78,"line_start":74},{"file":"SKILL.md","line_end":87,"line_start":78},{"file":"SKILL.md","line_end":91,"line_start":87},{"file":"SKILL.md","line_end":100,"line_start":91},{"file":"SKILL.md","line_end":102,"line_start":100},{"file":"SKILL.md","line_end":102,"line_start":102},{"file":"SKILL.md","line_end":106,"line_start":106},{"file":"SKILL.md","line_end":110,"line_start":108},{"file":"SKILL.md","line_end":110,"line_start":110},{"file":"SKILL.md","line_end":134,"line_start":117},{"file":"SKILL.md","line_end":139,"line_start":134},{"file":"SKILL.md","line_end":143,"line_start":139},{"file":"SKILL.md","line_end":148,"line_start":143},{"file":"SKILL.md","line_end":156,"line_start":148},{"file":"SKILL.md","line_end":173,"line_start":156},{"file":"SKILL.md","line_end":173,"line_start":173},{"file":"SKILL.md","line_end":177,"line_start":177},{"file":"SKILL.md","line_end":180,"line_start":178},{"file":"SKILL.md","line_end":180,"line_start":180}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":20,"line_start":20},{"file":"SKILL.md","line_end":82,"line_start":82},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"SKILL.md","line_end":96,"line_start":96},{"file":"SKILL.md","line_end":97,"line_start":97},{"file":"SKILL.md","line_end":169,"line_start":169},{"file":"SKILL.md","line_end":173,"line_start":173}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":82,"line_start":82},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"SKILL.md","line_end":96,"line_start":96},{"file":"SKILL.md","line_end":97,"line_start":97},{"file":"SKILL.md","line_end":177,"line_start":177},{"file":"SKILL.md","line_end":177,"line_start":177}]}],"critical_findings":[],"high_findings":[{"title":"Hidden file in home directory","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.78,"description":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","review_kind":"capability","source_category":"filesystem","source_severity":"high","confidence_reasoning":"The skill documents API token storage at ~/.config/runcomfy/token.json. This places a service credential on disk in the user home directory, even with owner-only permissions."}],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":10,"line_start":10}],"confidence":0.78,"description":"Calls `runcomfy run bytedance/seedance-v2/pro` through the local","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The description says the skill calls the RunComfy CLI locally. That is intended external command execution against a third-party video service."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":26,"line_start":24}],"confidence":0.74,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The fenced bash block includes an npx skills add command. It is documentation, but it still instructs execution of an external installer command."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":47,"line_start":46}],"confidence":0.8,"description":"1. **RunComfy CLI** — `npm i -g @runcomfy/cli`","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The prerequisite tells users to run npm i -g @runcomfy/cli. Installing and running a global npm CLI is a real external command risk."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":48,"line_start":47}],"confidence":0.72,"description":"2. **RunComfy account** — `runcomfy login` opens a browser device-code flow.","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The skill instructs runcomfy login, which invokes a local CLI and opens an authentication flow. This is benign but still external command execution."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":74,"line_start":70}],"confidence":0.84,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash example runs runcomfy run with user prompt data and an output directory. This is a clear local external command invocation."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":87,"line_start":78}],"confidence":0.84,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash example runs runcomfy run with prompt and image reference input. This invokes a local CLI and sends data outside the workspace."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":100,"line_start":91}],"confidence":0.84,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The bash example runs runcomfy run with image, video, and audio references. This is intended external command execution with user-provided media URLs."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":173,"line_start":173}],"confidence":0.88,"description":"The skill invokes `runcomfy run bytedance/seedance-v2/pro` with a JSON body matching the schema. The","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The How it works section states the skill invokes runcomfy run and posts to the model API. The command and network behavior are intentional."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.76,"description":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The security section references runcomfy login as the token setup command. It is legitimate, but it is still a local CLI action tied to credential handling."},{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":173,"line_start":173}],"confidence":0.9,"description":"The skill invokes `runcomfy run bytedance/seedance-v2/pro` with a JSON body matching the schema. The","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"The skill explicitly sends requests to model-api.runcomfy.net and downloads outputs from RunComfy domains. This is intended outbound network access to a third-party service."},{"title":"Hidden file access","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.78,"description":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The documented RunComfy login flow writes a token into a hidden config path. This is legitimate CLI behavior, but it remains sensitive local filesystem access."},{"title":"Third-Party Prompt and Media Disclosure","locations":[{"file":"SKILL.md","line_end":173,"line_start":173},{"file":"SKILL.md","line_end":179,"line_start":179}],"confidence":0.9,"description":"The skill sends prompts and reference media URLs to RunComfy model infrastructure. Sensitive prompts or private media could leave the local environment.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"Line 173 describes posting to the model API, and line 179 states third-party media URLs are fetched by the model server."},{"title":"Untrusted Reference Media Prompt Injection Risk","locations":[{"file":"SKILL.md","line_end":179,"line_start":179}],"confidence":0.86,"description":"The skill warns that image-based prompt injection is a known risk for image and video models. User-provided media could influence generation behavior.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The source explicitly names image-based prompt injection risk for external reference media, so the semantic risk is directly supported."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":182,"audit_model":"codex","audited_at":"2026-07-09T08:08:06.103+00:00","created_at":"2026-07-09T10:47:07.66496+00:00","static_findings":[{"id":"external_commands:SKILL.md:10:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Calls `runcomfy run bytedance/seedance-v2/pro` through the local","category":"external_commands","line_end":10,"severity":"medium","line_start":10},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":26,"severity":"medium","line_start":24},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":38,"severity":"medium","line_start":26},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Audio-driven lip-sync from your own track | Wan 2.7 (`audio_url`) |","category":"external_commands","line_end":46,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:46:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. **RunComfy CLI** — `npm i -g @runcomfy/cli`","category":"external_commands","line_end":47,"severity":"medium","line_start":46},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. **RunComfy account** — `runcomfy login` opens a browser device-code flow.","category":"external_commands","line_end":48,"severity":"medium","line_start":47},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. **CI / containers** — set `RUNCOMFY_TOKEN=<token>` instead of `runcomfy login`.","category":"external_commands","line_end":48,"severity":"medium","line_start":48},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### `bytedance/seedance-v2/pro`","category":"external_commands","line_end":56,"severity":"medium","line_start":52},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `prompt` | string | yes | — | CN ≤ 500 chars OR EN ≤ 1000 words. |","category":"external_commands","line_end":57,"severity":"medium","line_start":56},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `image_url` | array | no | `[]` | 0–9 references (JPEG/PNG/WebP/BMP/TIFF/GIF). |","category":"external_commands","line_end":57,"severity":"medium","line_start":57},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `video_url` | array | no | `[]` | 0–3 clips (MP4/MOV), 2–15s each. |","category":"external_commands","line_end":58,"severity":"medium","line_start":58},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `audio_url` | array | no | `[]` | 0–3 audio refs (WAV/MP3), 2–15s, < 15MB each. |","category":"external_commands","line_end":59,"severity":"medium","line_start":59},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `aspect_ratio` | enum | no | `adaptive` | `adaptive`, `16:9`, `9:16`, `4:3`, `3:4`, `1:1`, `21:9`.","category":"external_commands","line_end":60,"severity":"medium","line_start":60},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `duration` | int | no | 5 | 4–15 (whole seconds). |","category":"external_commands","line_end":62,"severity":"medium","line_start":61},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `resolution` | enum | no | `720p` | `480p` or `720p`. |","category":"external_commands","line_end":62,"severity":"medium","line_start":62},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `generate_audio` | bool | no | true | In-pass synchronized speech / SFX / music. |","category":"external_commands","line_end":64,"severity":"medium","line_start":63},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| `seed` | int | no | — | Reproducibility. |","category":"external_commands","line_end":70,"severity":"medium","line_start":64},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":74,"severity":"medium","line_start":70},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":78,"severity":"medium","line_start":74},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":87,"severity":"medium","line_start":78},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":91,"severity":"medium","line_start":87},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":100,"severity":"medium","line_start":91},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":102,"severity":"medium","line_start":100},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The CLI submits, polls, fetches the result, downloads `*.runcomfy.net`/`*.runcomfy.com` URLs into `-","category":"external_commands","line_end":102,"severity":"medium","line_start":102},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Image vs text division.** This is the single most important rule. Stable identity (face, costume, ","category":"external_commands","line_end":106,"severity":"medium","line_start":106},{"id":"external_commands:SKILL.md:108:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Camera + motion in plain language.** \"Medium close-up\", \"slow push-in\", \"handheld follow\", \"locked","category":"external_commands","line_end":110,"severity":"medium","line_start":108},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Audio direction with `generate_audio: true`** — say the tone: `\"warm friendly conversational\"`, `\"","category":"external_commands","line_end":110,"severity":"medium","line_start":110},{"id":"external_commands:SKILL.md:117:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Trying to describe stable identity verbally → use `image_url` instead.","category":"external_commands","line_end":134,"severity":"medium","line_start":117},{"id":"external_commands:SKILL.md:134:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":139,"severity":"medium","line_start":134},{"id":"external_commands:SKILL.md:139:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":143,"severity":"medium","line_start":139},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":148,"severity":"medium","line_start":143},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":156,"severity":"medium","line_start":148},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **No `@`-syntax for character binding** — relies on image refs + prompt alignment.","category":"external_commands","line_end":173,"severity":"medium","line_start":156},{"id":"external_commands:SKILL.md:173:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The skill invokes `runcomfy run bytedance/seedance-v2/pro` with a JSON body matching the schema. The","category":"external_commands","line_end":173,"severity":"medium","line_start":173},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","category":"external_commands","line_end":177,"severity":"medium","line_start":177},{"id":"external_commands:SKILL.md:178:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Input boundary**: the user prompt is passed as a JSON string to the CLI via `--input`. The CLI d","category":"external_commands","line_end":180,"severity":"medium","line_start":178},{"id":"external_commands:SKILL.md:180:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Outbound endpoints**: only `model-api.runcomfy.net` (request submission) and `*.runcomfy.net` / ","category":"external_commands","line_end":180,"severity":"medium","line_start":180},{"id":"network:SKILL.md:14:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"homepage: https://www.runcomfy.com","category":"network","line_end":14,"severity":"low","line_start":14},{"id":"network:SKILL.md:20:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"[runcomfy.com](https://www.runcomfy.com/?utm_source=skills.sh&utm_medium=skill&utm_campaign=seedance","category":"network","line_end":20,"severity":"low","line_start":20},{"id":"network:SKILL.md:82:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"image_url\": [\"https://.../barista-headshot.jpg\"],","category":"network","line_end":82,"severity":"low","line_start":82},{"id":"network:SKILL.md:95:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"image_url\": [\"https://.../subject.jpg\"],","category":"network","line_end":95,"severity":"low","line_start":95},{"id":"network:SKILL.md:96:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"video_url\": [\"https://.../cafe-locked-shot.mp4\"],","category":"network","line_end":96,"severity":"low","line_start":96},{"id":"network:SKILL.md:97:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"\"audio_url\": [\"https://.../voice-ref.mp3\"]","category":"network","line_end":97,"severity":"low","line_start":97},{"id":"network:SKILL.md:169:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Full reference: [docs.runcomfy.com/cli/troubleshooting](https://docs.runcomfy.com/cli/troubleshootin","category":"network","line_end":169,"severity":"low","line_start":169},{"id":"network:SKILL.md:173:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"The skill invokes `runcomfy run bytedance/seedance-v2/pro` with a JSON body matching the schema. The","category":"network","line_end":173,"severity":"low","line_start":173},{"id":"filesystem:SKILL.md:82:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"image_url\": [\"https://.../barista-headshot.jpg\"],","category":"filesystem","line_end":82,"severity":"high","line_start":82},{"id":"filesystem:SKILL.md:95:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"image_url\": [\"https://.../subject.jpg\"],","category":"filesystem","line_end":95,"severity":"high","line_start":95},{"id":"filesystem:SKILL.md:96:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"video_url\": [\"https://.../cafe-locked-shot.mp4\"],","category":"filesystem","line_end":96,"severity":"high","line_start":96},{"id":"filesystem:SKILL.md:97:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"\"audio_url\": [\"https://.../voice-ref.mp3\"]","category":"filesystem","line_end":97,"severity":"high","line_start":97},{"id":"filesystem:SKILL.md:177:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","category":"filesystem","line_end":177,"severity":"high","line_start":177},{"id":"filesystem:SKILL.md:177:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- **Token storage**: `runcomfy login` writes the API token to `~/.config/runcomfy/token.json` with m","category":"filesystem","line_end":177,"severity":"medium","line_start":177},{"id":"blocker:SKILL.md:42:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"If the user said \"Seedance\" / \"Seedance 2\" / \"ByteDance video\" explicitly, route here regardless.","category":"blocker","line_end":42,"severity":"low","line_start":42},{"id":"blocker:SKILL.md:112:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"**Reference media specs** — videos must be 2–15s; audio must be ≤15MB and 2–15s. Out-of-range files ","category":"blocker","line_end":112,"severity":"low","line_start":112}],"finding_verdicts":[{"id":"external_commands:SKILL.md:10:ruby-shell-backtick-execution","reason":"The description says the skill calls the RunComfy CLI locally. That is intended external command execution against a third-party video service.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","reason":"The fenced bash block includes an npx skills add command. It is documentation, but it still instructs execution of an external installer command.","verdict":"confirmed","severity":"medium","confidence":0.74},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:46:ruby-shell-backtick-execution","reason":"The prerequisite tells users to run npm i -g @runcomfy/cli. Installing and running a global npm CLI is a real external command risk.","verdict":"confirmed","severity":"medium","confidence":0.8},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","reason":"The skill instructs runcomfy login, which invokes a local CLI and opens an authentication flow. This is benign but still external command execution.","verdict":"confirmed","severity":"medium","confidence":0.72},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:52:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:70:ruby-shell-backtick-execution","reason":"The bash example runs runcomfy run with user prompt data and an output directory. This is a clear local external command invocation.","verdict":"confirmed","severity":"medium","confidence":0.84},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","reason":"The bash example runs runcomfy run with prompt and image reference input. This invokes a local CLI and sends data outside the workspace.","verdict":"confirmed","severity":"medium","confidence":0.84},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","reason":"The bash example runs runcomfy run with image, video, and audio references. This is intended external command execution with user-provided media URLs.","verdict":"confirmed","severity":"medium","confidence":0.84},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:108:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:117:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:134:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:139:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:143:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:173:ruby-shell-backtick-execution","reason":"The How it works section states the skill invokes runcomfy run and posts to the model API. The command and network behavior are intentional.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","reason":"The security section references runcomfy login as the token setup command. It is legitimate, but it is still a local CLI action tied to credential handling.","verdict":"confirmed","severity":"medium","confidence":0.76},{"id":"external_commands:SKILL.md:178:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:180:ruby-shell-backtick-execution","reason":"This occurrence is Markdown inline code, a schema field, a prompt example, or a code fence marker. It is not Ruby backtick execution and does not execute a shell command by itself.","verdict":"false_positive","confidence":0.94},{"id":"network:SKILL.md:14:hardcoded-url","reason":"The URL is a homepage, documentation link, or source link in Markdown. It is not a hidden runtime exfiltration endpoint.","verdict":"false_positive","confidence":0.93},{"id":"network:SKILL.md:20:hardcoded-url","reason":"The URL is a homepage, documentation link, or source link in Markdown. It is not a hidden runtime exfiltration endpoint.","verdict":"false_positive","confidence":0.93},{"id":"network:SKILL.md:82:hardcoded-url","reason":"The https://... value is a placeholder example for user-supplied media, not a fixed callback endpoint. Runtime third-party submission is covered separately.","verdict":"false_positive","confidence":0.95},{"id":"network:SKILL.md:95:hardcoded-url","reason":"The https://... value is a placeholder example for user-supplied media, not a fixed callback endpoint. Runtime third-party submission is covered separately.","verdict":"false_positive","confidence":0.95},{"id":"network:SKILL.md:96:hardcoded-url","reason":"The https://... value is a placeholder example for user-supplied media, not a fixed callback endpoint. Runtime third-party submission is covered separately.","verdict":"false_positive","confidence":0.95},{"id":"network:SKILL.md:97:hardcoded-url","reason":"The https://... value is a placeholder example for user-supplied media, not a fixed callback endpoint. Runtime third-party submission is covered separately.","verdict":"false_positive","confidence":0.95},{"id":"network:SKILL.md:169:hardcoded-url","reason":"The URL is a homepage, documentation link, or source link in Markdown. It is not a hidden runtime exfiltration endpoint.","verdict":"false_positive","confidence":0.93},{"id":"network:SKILL.md:173:hardcoded-url","reason":"The skill explicitly sends requests to model-api.runcomfy.net and downloads outputs from RunComfy domains. This is intended outbound network access to a third-party service.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"filesystem:SKILL.md:82:path-traversal-sequence","reason":"The ellipsis in the example HTTPS URL triggered a path traversal pattern. It is not a local filesystem path and does not access parent directories.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:95:path-traversal-sequence","reason":"The ellipsis in the example HTTPS URL triggered a path traversal pattern. It is not a local filesystem path and does not access parent directories.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:96:path-traversal-sequence","reason":"The ellipsis in the example HTTPS URL triggered a path traversal pattern. It is not a local filesystem path and does not access parent directories.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:97:path-traversal-sequence","reason":"The ellipsis in the example HTTPS URL triggered a path traversal pattern. It is not a local filesystem path and does not access parent directories.","verdict":"false_positive","confidence":0.96},{"id":"filesystem:SKILL.md:177:hidden-file-in-home-directory","reason":"The skill documents API token storage at ~/.config/runcomfy/token.json. This places a service credential on disk in the user home directory, even with owner-only permissions.","verdict":"confirmed","severity":"high","confidence":0.78},{"id":"filesystem:SKILL.md:177:hidden-file-access","reason":"The documented RunComfy login flow writes a token into a hidden config path. This is legitimate CLI behavior, but it remains sensitive local filesystem access.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"blocker:SKILL.md:42:system-reconnaissance","reason":"This is model-routing or media-spec guidance, not system reconnaissance. It does not inspect host state, files, identity, or environment details.","verdict":"false_positive","confidence":0.96},{"id":"blocker:SKILL.md:112:system-reconnaissance","reason":"This is model-routing or media-spec guidance, not system reconnaissance. It does not inspect host state, files, identity, or environment details.","verdict":"false_positive","confidence":0.96}],"semantic_findings":[{"title":"Third-Party Prompt and Media Disclosure","severity":"medium","locations":[{"file":"SKILL.md","line_end":173,"line_start":173},{"file":"SKILL.md","line_end":179,"line_start":179}],"confidence":0.9,"description":"The skill sends prompts and reference media URLs to RunComfy model infrastructure. Sensitive prompts or private media could leave the local environment.","confidence_reasoning":"Line 173 describes posting to the model API, and line 179 states third-party media URLs are fetched by the model server."},{"title":"Untrusted Reference Media Prompt Injection Risk","severity":"medium","locations":[{"file":"SKILL.md","line_end":179,"line_start":179}],"confidence":0.86,"description":"The skill warns that image-based prompt injection is a known risk for image and video models. User-provided media could influence generation behavior.","confidence_reasoning":"The source explicitly names image-based prompt injection risk for external reference media, so the semantic risk is directly supported."}],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"medium","confirmedFindingCount":2,"capabilityReviewCount":12,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}