T09 · Insecure Skill Coding Practices
- Location
scripts/tencent_meeting_export.py:428- Finding
Destination Validation Does Not Prevent Navigation to Arbitrary URLs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears intended to export Tencent Meeting transcripts, but it needs review because it can launch a browser against arbitrary URLs while saving potentially sensitive meeting content locally.
Install only if you are comfortable running a local Chromium browser and saving meeting transcripts on disk. Use only Tencent Meeting share links you are authorized to access, avoid passing arbitrary URLs, and treat exported Markdown or JSON as sensitive meeting records. Prefer running it in an isolated environment and pinning reviewed Playwright dependencies.
scripts/tencent_meeting_export.py:428Destination Validation Does Not Prevent Navigation to Arbitrary URLs
SKILL.md:20Playwright and Chromium Are Installed Without Version or Integrity Pinning
The skill documents and encourages writing exported transcript data to local files, but it does not declare any explicit tool scope or permissions boundary for file-writing behavior. This matters because meeting transcripts, summaries, speaker names, and event timelines can contain sensitive personal or business information, so undeclared write capability weakens user awareness and sandboxing expectations.
The skill promotes exporting full meeting transcripts from public share links but omits a warning that the resulting data may include sensitive personal, corporate, or regulated information even when the link is public. Users may incorrectly assume that 'public share' means low-risk data handling, leading to unintended disclosure, redistribution, or insecure storage of names, speech content, summaries, and participation events.
The script captures and writes potentially sensitive meeting artifacts—full transcripts, speaker identities, summaries, chapters, and event nodes—to local Markdown/JSON files without any privacy warning, consent check, or safer default handling. In the context of meeting recordings, this increases the risk of unauthorized retention, accidental sharing, and exposure of confidential business or personal information.
Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.
# 分发到对应的处理器
for pattern, handler_name in self.API_PATTERNS.items():
if pattern in url:
getattr(self, handler_name)(data)
break
except Exception:
pass
The Playwright browser context is configured with locale="zh-CN", which imposes a specific locale behavior. Under the policy, locale constraints should be optional or clearly justified; this file does not provide a user opt-in or explanation that the tool is limited to Chinese locale operation.