Back to skill

Security audit

Fanqie Novel AI Video Drama Batch Generator

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to perform its stated AI video-generation job, but it sends novel-derived text to outside AI and TTS services and writes generated media locally.

Install only if you are comfortable sending novel text, prompts, and narration to third-party AI/TTS services. Avoid confidential, unpublished, or regulated content unless the provider terms are acceptable, and confirm ffmpeg/node-fetch are available before use.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (8)

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill sends user-supplied chapter content to external AI services to generate prompts, video, images, and TTS-derived output, but there is no disclosure, consent flow, or data-minimization control. If users provide unpublished manuscripts, private stories, or regulated data, that content can be exposed to third-party processors without their awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
// 漫画视频
async function genManhua(prompt, style) {
  const r = await fetch("https://api.kelingai.com/v1/video/generate", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ prompt: `${style}动漫分镜,9:16,流畅,${prompt}`, duration: 3 })
Confidence
92% confidence
Finding
This function transmits generated prompts to an external video-generation API. Even though it does not send the raw chapter text directly, the prompts are derived from user content and may still reveal sensitive plot, personal, or proprietary information to a third party.

External Transmission

Medium
Category
Data Exfiltration
Content
// 真人视频
async function genReal(prompt, style) {
  const r = await fetch("https://api.kelingai.com/v1/video/generate", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ prompt: `${style}真人,电影质感,9:16,${prompt}`, model: "realistic", duration: 3 })
Confidence
92% confidence
Finding
This performs the same kind of external transmission as the prior finding, but for the realistic video path. User-derived prompt data is sent to a third-party service without any evident consent, policy notice, or filtering of sensitive content.

External Transmission

Medium
Category
Data Exfiltration
Content
// 封面
async function genCover(prompt) {
  const r = await fetch("https://api.kelingai.com/v1/image/generate", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ prompt: `${prompt},竖屏封面,9:16,高清` })
Confidence
89% confidence
Finding
The cover-generation request sends prompt data derived from the user's content to an external image API. This is a real data-exposure risk because generated metadata can still leak confidential story details, names, or themes.

External Transmission

Medium
Category
Data Exfiltration
Content
// 配音
async function genVoice(text, out) {
  const r = await fetch("https://openspeech.bytedance.com/api/v1/tts", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ text, voice: "cute_female", format: "mp3" })
Confidence
95% confidence
Finding
The TTS request sends the assembled voice text to an external provider, which can include substantial user-derived narrative content. This materially increases privacy risk because it transmits near-verbatim textual output based on the original input to another third party without notice or consent.

External Transmission

Medium
Category
Data Exfiltration
Content
// 漫画视频
async function genManhua(prompt, style) {
  const r = await fetch("https://api.kelingai.com/v1/video/generate", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ prompt: `${style}动漫分镜,9:16,流畅,${prompt}`, duration: 3 })
Confidence
92% confidence
Finding
This function transmits generated prompts to an external video-generation API. Even though it does not send the raw chapter text directly, the prompts are derived from user content and may still reveal sensitive plot, personal, or proprietary information to a third party.

External Transmission

Medium
Category
Data Exfiltration
Content
// 真人视频
async function genReal(prompt, style) {
  const r = await fetch("https://api.kelingai.com/v1/video/generate", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ prompt: `${style}真人,电影质感,9:16,${prompt}`, model: "realistic", duration: 3 })
Confidence
92% confidence
Finding
This performs the same kind of external transmission as the prior finding, but for the realistic video path. User-derived prompt data is sent to a third-party service without any evident consent, policy notice, or filtering of sensitive content.

External Transmission

Medium
Category
Data Exfiltration
Content
// 封面
async function genCover(prompt) {
  const r = await fetch("https://api.kelingai.com/v1/image/generate", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ prompt: `${prompt},竖屏封面,9:16,高清` })
Confidence
89% confidence
Finding
The cover-generation request sends prompt data derived from the user's content to an external image API. This is a real data-exposure risk because generated metadata can still leak confidential story details, names, or themes.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
skill.js:75