T09 · Insecure Skill Coding Practices
- Location
pipeline/03_extract_simple.py:16- Finding
Hard-Coded Kimi API Credential in Executable Pipeline Scripts
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill has a coherent persona-generation purpose, but it mishandles private chat data, embedded credentials, and generated agent prompts enough that users should review it carefully before installing.
Treat this as requiring careful review before installation. Do not run it on real chat exports unless bundled private data and hardcoded credentials are removed, input processing is limited to the chosen file, and explicit consent, redaction, provider disclosure, and review-before-install controls are added for generated agent prompts.
pipeline/03_extract_simple.py:16Hard-Coded Kimi API Credential in Executable Pipeline Scripts
pipeline/01_parse.py:184Requested Input File Is Ignored and Bundled Private Chat Data Is Processed
pipeline/03_extract.py:36Unredacted Private Chat Content Is Transmitted to External LLM Providers
prompts/extract_patterns.md:5Untrusted Chat Instructions Can Propagate into Installable Agent System Prompts
prompts/synthesize_persona.md:3Persona Template Encourages Undisclosed Impersonation of Real People
pipeline/04_synthesize.py:34Output Configuration Is Ignored and Stage 4 Imports an Undefined Setting
requirements.txt:1Unpinned and Incomplete Runtime Dependency Declaration
Requiring an ANTHROPIC_API_KEY strongly indicates that chat contents may be sent to a third-party AI provider, yet the README does not clearly disclose that family chat exports could leave the local environment. This omission is dangerous because users may submit private conversations involving multiple people without informed consent or understanding of external processing, retention, and compliance implications.
Even within SKILL.md alone, the privacy-critical behavior of uploading family group-chat contents to an external LLM provider is not surfaced in the top-level description or trigger/consent language. This is especially dangerous because the data category is highly sensitive interpersonal communication, and users may not expect third-party processing from a skill advertised primarily as persona extraction.
Even within SKILL.md alone, the privacy-critical behavior of uploading family group-chat contents to an external LLM provider is not surfaced in the top-level description or trigger/consent language. This is especially dangerous because the data category is highly sensitive interpersonal communication, and users may not expect third-party processing from a skill advertised primarily as persona extraction.
Even within SKILL.md alone, the privacy-critical behavior of uploading family group-chat contents to an external LLM provider is not surfaced in the top-level description or trigger/consent language. This is especially dangerous because the data category is highly sensitive interpersonal communication, and users may not expect third-party processing from a skill advertised primarily as persona extraction.
Even within SKILL.md alone, the privacy-critical behavior of uploading family group-chat contents to an external LLM provider is not surfaced in the top-level description or trigger/consent language. This is especially dangerous because the data category is highly sensitive interpersonal communication, and users may not expect third-party processing from a skill advertised primarily as persona extraction.
The skill processes highly sensitive family chat logs and describes use of external LLM APIs, yet it does not present a clear warning or consent notice about privacy, third-party transfer, retention, or the risks of analyzing intimate communications. Lack of explicit warning undermines informed consent and can expose users and non-consenting family members to serious privacy harm.
The file stores directly identifying group metadata including chatroom ID, group name, message volume, timestamps, and remote avatar URLs, while the skill's purpose is to derive persistent personas from family chat logs. This creates a strong re-identification risk and enables profiling of real individuals and their social graph without any visible consent, minimization, or privacy boundary in the artifact.
The dataset contains identifiable individuals' whereabouts, travel plans, city-level locations, routes, and timing details embedded in natural-language chat. In a skill designed to synthesize 'digital personas,' this materially increases stalking, doxxing, and behavioral profiling risk because location traces can be linked to named family members over time.
A hard-coded fallback API key is embedded directly in source code, allowing anyone with code access to use the credential and enabling outbound processing of sensitive chat data without meaningful user control. This is especially dangerous here because it combines credential exposure with automated transmission of private family conversations to an external service.
The fallback API key makes it possible for the skill to perform external API calls even when the user has not intentionally configured remote access, undermining informed consent and security expectations. In the context of persona extraction from family chats, this materially increases the chance of undisclosed transfer of highly sensitive personal data.
This skill processes highly sensitive family chat logs, then configures a remote third-party API client and sends prompt content derived from those chats off-device. That exceeds a reasonable expectation for a persona-extraction tool unless it is explicitly disclosed and consented to, because intimate conversations may contain personal, financial, health, or relationship data.
A hardcoded API key is embedded directly in the source code, which exposes the credential to anyone with repository or package access and enables unauthorized use of the vendor account. In a skill handling family chat data, this is especially dangerous because it combines sensitive data export capability with a reusable secret that cannot be scoped safely once leaked.
The code includes and uses a hardcoded external API credential without any visible user-facing disclosure, which hides a meaningful remote capability from users. This undermines informed consent and creates supply-chain risk, since the bundled key could route usage and sensitive chat processing through an account controlled by the skill author or another party.
A hardcoded API key is embedded directly in source code, which exposes the credential to anyone with repository or package access and enables unauthorized use of the external service. In a skill handling private family chat data, leaked credentials can also facilitate uncontrolled data submission and billing abuse.
The sensitive credential is stored in plaintext in code without safer handling or user disclosure, making accidental disclosure extremely likely through source sharing, logs, backups, or package publication. This is a straightforward secret-management failure with direct abuse potential.
The code transmits family group chat content to a third-party LLM service via client.messages.create, including up to 3000 characters of each chat chunk. Because the skill processes highly sensitive interpersonal conversations and the external transfer is not transparently disclosed in the described skill behavior, this creates a serious privacy and data-handling risk.
The file contains a hard-coded API key and fixed remote endpoint, which exposes a secret directly in source code and enables unauthorized reuse if the repository, package, or logs are shared. In a tool handling intimate family-chat analysis, embedding external access credentials also increases the likelihood of silent data exfiltration through a preconfigured remote service.
The script transmits sensitive chat-derived observations to an external API without any user-facing warning in this file. Because the content concerns family group chats and personality synthesis, the data can include deeply personal behavioral inferences, making undisclosed transmission especially privacy-invasive.
This prompt explicitly processes real family chat logs to derive a digital family profile, which is highly privacy-sensitive data involving multiple people, likely including third parties who did not consent. The absence of any minimization, consent, redaction, retention, or warning language increases the risk of unauthorized profiling, overcollection, and downstream misuse of intimate household information.
The prompt directs the model to infer emotional patterns, values, relationship dynamics, and collective identity from real family conversations, creating a sensitive personality dossier. In the context of an AI-agent persona substrate, this can enable invasive profiling, manipulation, deanonymization, or persistent storage of deeply personal inferences that go beyond the original conversational purpose.
The runner copies the full parent environment into child pipeline stages, which can expose unrelated secrets such as API keys, tokens, proxy credentials, or cloud auth material to every invoked stage. In this skill context, the pipeline processes sensitive family chat data and may include LLM-facing extraction stages, so broad environment propagation increases the blast radius if any downstream stage logs, transmits, or mishandles inherited secrets.
emit(f"STAGE:{stage_num}:START", label)
env = os.environ.copy()
env["SOUL_FORGE_SOURCE"] = str(source_file)
env["SOUL_FORGE_OUTPUT"] = str(OUTPUT_DIR)
env["PYTHONPATH"] = str(PIPELINE_DIR)
The README promotes converting family group chat exports into durable persona artifacts without any visible privacy warning, consent guidance, retention policy, or handling precautions. Because the input is highly sensitive family communications and the outputs are structured personality profiles, users may unknowingly expose intimate data and create secondary sensitive data that can be misused or retained indefinitely.
The skill requests and describes capabilities equivalent to shell execution, filesystem access, environment-variable access, and outbound API use, but does not declare any explicit tool scope or permission boundaries. In a skill that processes private family chat logs, missing scope declarations increases the chance of over-privileged execution and makes user review of data access and exfiltration risk much harder.
The trigger phrases are broad enough to overlap with ordinary requests such as 'analyze chat records' or 'generate persona,' which can cause accidental invocation of a skill that runs shell commands and uploads sensitive chat data. In this context, mis-triggering is more dangerous than usual because the underlying workflow handles private family conversations and external API calls.
The chat includes sensitive health-adjacent and body-related information such as weight, body fat, sleep, pain, and medical concerns tied to identifiable participants. Because the skill's stated goal is to distill stable personal traits, these details can be overfit into long-lived profiles and misused for discrimination, embarrassment, or intrusive inference about health status.
No suspicious patterns detected.