T09 · Insecure Skill Coding Practices
- Location
scripts/meeting_recorder.py:108- Finding
Meeting audio is transmitted to an external transcription service without explicit disclosure or consent
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This meeting-recording skill is mostly purpose-aligned, but it needs review because it can send sensitive meeting audio to Google's transcription service without clear user disclosure or consent guidance.
Review this skill before installing if meetings may contain confidential, regulated, or personal information. Use it only where recording is allowed, participants have given required consent, and you are comfortable sending audio to Google's speech-recognition service; prefer a pinned dependency set and a local transcription option for sensitive meetings.
scripts/meeting_recorder.py:108Meeting audio is transmitted to an external transcription service without explicit disclosure or consent
requirements.txt:1Unnecessary dependencies and open-ended version constraints expand the software supply-chain attack surface
The code chunk implements only a narrow subset of the declared functionality: action item extraction from an already-existing transcript file, plus simple JSON/Markdown output formatting. There is no code for recording meetings, processing audio, transcribing speech, identifying speakers, generating meeting minutes/summaries, or performing sentiment analysis. This is a material description-versus-behavior mismatch because the declared purpose presents a broad intelligent meeting assistant, while the actual code shown is limited to transcript-based task extraction.
The supplied code only processes pre-existing transcript text files and generates meeting minutes content from them. It does support meeting summarization, action item extraction, decision/topic extraction, and markdown/json output, which partially aligns with the description. However, the declared purpose prominently claims broader capabilities—meeting recording, audio transcription, speaker diarization, and sentiment analysis—that are not implemented anywhere in this code chunk. Because these are central advertised functions rather than incidental details, the description materially overstates the actual behavior shown.
The code only provides basic audio recording and speech-to-text transcription. That partially matches the declared recording/transcription assistant purpose, but the description materially overstates the implemented functionality by claiming several higher-level meeting intelligence capabilities that are absent from the code. There are no obvious undeclared harmful capabilities; the mismatch is that the description promises substantially more than the code delivers.
The documentation encourages recording and transcribing meetings and writing artifacts to local files without any notice about participant consent, legal requirements, sensitive data handling, or file retention. In a meeting-assistant context, this is especially risky because meeting audio and transcripts often contain personal, confidential, or regulated information, making unauthorized capture or storage a significant privacy and compliance issue.
The README promotes recording and transcribing meetings but provides no warning about consent, privacy, retention, or jurisdiction-specific legal requirements. In a meeting-recording skill, this omission materially increases the chance of unauthorized capture or processing of sensitive conversations, which can expose personal data, confidential business information, or create legal/compliance violations.
The natural-language documentation and user-facing examples are presented in Chinese, and the file does not indicate that language selection is optional or user-configurable. This can violate language/locale policy when a skill effectively forces a specific language without explicit opt-in or justification.
The skill examples indicate file read/write behavior using local paths like /tmp/meeting_audio.wav and /tmp/transcript.json, but the manifest does not declare any tool scope or permissions. Undeclared file capabilities reduce reviewability and can lead to unexpected access to local data or creation of sensitive artifacts such as recordings and transcripts.
The description's activation language is broad enough to trigger on many generic meeting, recording, or transcription requests. Over-broad routing can cause the assistant to invoke this skill unexpectedly, increasing the chance of unnecessary file creation, handling of sensitive meeting content, or use in contexts where consent and privacy have not been established.
The regex patterns and comments show the skill is designed specifically around Chinese and English phrasing such as Chinese action verbs and English markers like 'action item' and 'by'. This imposes a language/locale assumption in behavior without any user opt-in or explicit justification, which matches the policy-violation category for forced language handling.
The attendee extraction logic hard-codes Chinese labels such as '出席' and '参会人员' alongside English patterns, indicating an implicit language/locale assumption in the skill behavior. Because the file provides no user opt-in, language selection, or documented regional scope, this creates a natural-language locale policy concern under the stated rules.
The transcription path sends meeting audio to Google's remote speech-recognition service, but the skill description does not disclose that sensitive meeting content leaves the local environment. Because meetings often contain confidential business, personal, or regulated information, undisclosed third-party transmission creates a meaningful privacy and data-governance risk.
The file transcription function uploads audio contents to Google's recognition service without explicitly informing the user that the file will be transmitted over the network. Since uploaded recordings may contain sensitive meeting material, this can violate user expectations, organizational policy, or legal requirements around notice and consent.
This code records microphone input and submits it to an external Google recognition service without an explicit warning at the point of use. In the context of a meeting recorder, users may reasonably assume local handling, so silent network transmission of live speech can expose confidential discussions to a third party without informed consent.
The embedded sample transcript is entirely in Chinese, and the example workflow demonstrates processing that content as the default without any indication that language selection is optional. Under the policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale restriction is clearly documented and justified.
The dependency uses a lower-bound version specifier only, which allows installation of any newer release, including versions with breaking changes or newly introduced malicious or compromised transitive packages. While this is a common packaging practice and not inherently malicious, it weakens build reproducibility and increases supply-chain risk over time.
speechrecognition>=3.10.0
pydub>=0.25.1
openai>=1.0.0
python-dateutil>=2.8.0
The package is not strictly pinned, so future installs may resolve to different versions than originally tested. This creates a supply-chain exposure window where an upstream compromise, dependency confusion event, or unsafe release could be pulled into the environment without code changes in the skill itself.
speechrecognition>=3.10.0
pydub>=0.25.1
openai>=1.0.0
python-dateutil>=2.8.0
Using an unpinned version for the OpenAI client means deployments may automatically consume future releases with API, security, or behavior changes that were not validated for this skill. Because this skill likely processes meeting transcripts and possibly sensitive organizational content, unexpected dependency changes can have broader confidentiality, integrity, or availability consequences than in a less sensitive context.
speechrecognition>=3.10.0
pydub>=0.25.1
openai>=1.0.0
python-dateutil>=2.8.0
A minimum-only version constraint permits uncontrolled upgrades, reducing reproducibility and exposing the project to accidental adoption of vulnerable or malicious upstream releases. This is generally a hygiene and supply-chain hardening issue rather than evidence of intentional abuse.
speechrecognition>=3.10.0
pydub>=0.25.1
openai>=1.0.0
python-dateutil>=2.8.0
The manifest describes automated minutes generation, action item extraction, sentiment analysis, speaker diarization, and meeting summarization. This file only records audio and performs transcription via microphone or audio file, with no code for summarization, diarization, sentiment, minutes, or task extraction.
The code forces the recognition language to zh-CN, which can violate language/locale policy when users are not given an opt-in or selection mechanism. No comments or documentation in this file justify the locale restriction as region-specific behavior.
The microphone transcription path also forces zh-CN for recognition, which imposes a specific language setting without opt-in. This is a natural-language policy concern because users are not presented with a locale choice or explanation.
No suspicious patterns detected.