The audit confirmed remote pipe-to-shell execution, unsafe filename insertion into HTML, transcript exposure of guest keys, and authenticated requests to caller-selected origins. Most scanner matches are false positives from documentation, JavaScript template literals, loopback tests, and expected CLI file or network operations. No prompt injection or obfuscated payload evidence was found. Static review was capped at 400/531 representative findings; omitted static matches are unconfirmed, so automatic publishing stays disabled until manual review.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This outputs or requires relaying a newly issued API key through the agent transcript, exposing a bearer credential to logs and conversation retention.
This outputs or requires relaying a newly issued API key through the agent transcript, exposing a bearer credential to logs and conversation retention.
This outputs or requires relaying a newly issued API key through the agent transcript, exposing a bearer credential to logs and conversation retention.
- `GUEST_KEY_CREATED:<api_key>`:**阻塞性用户通知**。分隔线之后是需要原样转发给用户的完整通知文本(含临时 API Key、绑定账号链接和保存提醒)。必须先把该通知发
This outputs or requires relaying a newly issued API key through the agent transcript, exposing a bearer credential to logs and conversation retention.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
This accepts or propagates a caller-controlled API origin that later receives authenticated ShareOne requests, enabling credential disclosure to an untrusted host.
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
The generated page imports a floating major-version script from a CDN without integrity verification, exposing published pages to dependency compromise.
Most external command, system reconnaissance, and obfuscation alerts are false positives from JavaScript template literals, Markdown examples, and multilingual prose. Real security concerns remain around external ShareOne network egress, local file reads for upload, plaintext credential storage, full API key output, and a user-controlled API base URL that can receive authenticated requests.
update_share_settings.js derives SHAREONE_BASE_URL from a full user-provided URL, then shareone_client.js attaches ShareOne credentials to requests built from that base URL. A malicious non-ShareOne origin could receive API keys or proxy-injected credentials during an update request.
The code directly assigns the API base URL from the parsed input URL origin and later sends authenticated requests to getBaseUrl(). This is a concrete credential exfiltration path if the input origin is attacker controlled.
check_api_key.js prints KEY_FOUND with the full API key, and create_guest_key.js prints generated keys. The workflow also instructs the agent to display generated keys and key-bearing account binding links to the user, which can expose credentials in transcripts and logs.
The cited code and workflow explicitly output full API key values. This is not just secret access; it is intentional disclosure through process output and chat instructions.
shareone_client.js writes the ShareOne API key as plaintext JSON in the user home directory without setting restrictive file permissions. Other local users or backup tools could read the credential depending on the environment.
The credential path and write call are explicit, and there is no chmod or atomic permission handling nearby. The impact depends on host file permissions, so confidence is high but not absolute.
Capability review items (74)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
let apiKey = process.env.SHAREONE_API_KEY || readLocalApiKey();
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
return data && data.api_key ? data.api_key : null;
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- `KEY_FOUND:<api_key>`:当前是普通 AI Agent 环境,且已找到 API Key。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- 普通 AI Agent:可以使用 `--api-key`、环境变量 `SHAREONE_API_KEY` 或本地凭证文件。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- `KEY_FOUND:<api_key>`:当前是普通 AI Agent 环境。将该 API Key 用于后续 direct 模式发布请求。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
普通 AI Agent 环境会把临时 API Key 保存到本地凭证文件。即使保存成功,也不能省略上面的用户通知。后续也可以使用环境变量 `SHAREONE_API_KEY` 或命令参数 `--api
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- 普通 AI Agent:可以传 `--api-key`,也可以依赖 `SHAREONE_API_KEY` 或本地凭证。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- 普通 AI Agent 环境可传 `--api-key`,也可以依赖 `SHAREONE_API_KEY` 或本地凭证。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, 'utf8'));
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, 'utf8'));
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
if (!fs.existsSync(CREDENTIALS_PATH)) return null;
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
if (!fs.existsSync(CREDENTIALS_PATH)) return false;
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
The workflow recommends loading Mermaid from a public CDN in generated HTML. That is expected but creates third-party network dependency for published pages.
Most external command, system reconnaissance, and obfuscation alerts are false positives from JavaScript template literals, Markdown examples, and multilingual prose. Real security concerns remain around external ShareOne network egress, local file reads for upload, plaintext credential storage, full API key output, and a user-controlled API base URL that can receive authenticated requests.
update_share_settings.js derives SHAREONE_BASE_URL from a full user-provided URL, then shareone_client.js attaches ShareOne credentials to requests built from that base URL. A malicious non-ShareOne origin could receive API keys or proxy-injected credentials during an update request.
The code directly assigns the API base URL from the parsed input URL origin and later sends authenticated requests to getBaseUrl(). This is a concrete credential exfiltration path if the input origin is attacker controlled.
check_api_key.js prints KEY_FOUND with the full API key, and create_guest_key.js prints generated keys. The workflow also instructs the agent to display generated keys and key-bearing account binding links to the user, which can expose credentials in transcripts and logs.
The cited code and workflow explicitly output full API key values. This is not just secret access; it is intentional disclosure through process output and chat instructions.
shareone_client.js writes the ShareOne API key as plaintext JSON in the user home directory without setting restrictive file permissions. Other local users or backup tools could read the credential depending on the environment.
The credential path and write call are explicit, and there is no chmod or atomic permission handling nearby. The impact depends on host file permissions, so confidence is high but not absolute.
Capability review items (74)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
let apiKey = process.env.SHAREONE_API_KEY || readLocalApiKey();
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
return data && data.api_key ? data.api_key : null;
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- `KEY_FOUND:<api_key>`:当前是普通 AI Agent 环境,且已找到 API Key。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- 普通 AI Agent:可以使用 `--api-key`、环境变量 `SHAREONE_API_KEY` 或本地凭证文件。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- `KEY_FOUND:<api_key>`:当前是普通 AI Agent 环境。将该 API Key 用于后续 direct 模式发布请求。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
普通 AI Agent 环境会把临时 API Key 保存到本地凭证文件。即使保存成功,也不能省略上面的用户通知。后续也可以使用环境变量 `SHAREONE_API_KEY` 或命令参数 `--api
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- 普通 AI Agent:可以传 `--api-key`,也可以依赖 `SHAREONE_API_KEY` 或本地凭证。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
- 普通 AI Agent 环境可传 `--api-key`,也可以依赖 `SHAREONE_API_KEY` 或本地凭证。
The cited line reads, stores, passes, or displays ShareOne API key material. This is intentional credential handling and should be treated as sensitive.
const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, 'utf8'));
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
const data = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, 'utf8'));
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
if (!fs.existsSync(CREDENTIALS_PATH)) return null;
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
if (!fs.existsSync(CREDENTIALS_PATH)) return false;
The code reads, writes, or deletes a local credentials file containing the ShareOne API key. That is intentional but security-sensitive filesystem access.
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
The workflow recommends loading Mermaid from a public CDN in generated HTML. That is expected but creates third-party network dependency for published pages.
Static external-command and weak-crypto alerts are mostly false positives: reviewed lines are Markdown command examples, JavaScript template strings, URL parsing, timeout handling, and crypto.randomBytes for multipart boundaries. The skill still has confirmed high-risk behavior because it reads local files, sends content and API keys over the network, stores credentials locally, prints API keys, and can derive an authenticated request host from a user-supplied URL.
The credential check and guest-key scripts print API keys in machine-readable output. The workflows then instruct the assistant to display newly created keys and binding links to the user, which can persist secrets in transcripts and logs.
Direct code evidence shows API key values are written to stdout. The workflow also explicitly requires user-facing display of generated key material.
Owner Downloads Can Bypass Public Download Restrictions
The download workflow first attempts owner download when credentials are present, which bypasses public password and allow-download restrictions for owned links. This is documented behavior but should be clear to users because it changes privacy expectations.
The behavior is explicit in code and documentation. It appears intended for owner workflows, so the concern is user expectation and access control clarity rather than malicious intent.
I searched the skill instructions, workflows, and scripts for explicit override, ignore, pre-approved, and skip-security language from the audit warning list. No evidence found in the searched files.
The search covered the listed suspicious phrases across the provided skill files. This does not prove absence of every possible injection, but no direct warning-pattern evidence was found.
Capability review items (3)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
update_share_settings.js derives SHAREONE_BASE_URL from a full URL supplied as the target link, then sends authenticated PUT requests through shareone_client.js. A non-ShareOne URL could receive the X-API-Key header or Sudowork proxy authorization flow, creating a credential disclosure risk.
The host is taken from user-controlled URL input and later used by the authenticated request builder. The reviewed code shows no allowlist that restricts this flow to shareone.app.
The skill reads user-selected local files and uploads them to ShareOne, Azure, or S3 upload URLs returned by ShareOne. This is core functionality, but it creates data exposure risk if sensitive files are selected or consent is mishandled.
The file reads and outbound upload requests are explicit. The workflow includes a publish consent step, so this is high-impact legitimate functionality rather than confirmed malicious behavior.
API Keys Are Stored Locally Without Permission Hardening
Local ShareOne API keys are written to a home-directory credentials file as JSON. The code does not set restrictive file permissions or encrypt the credential before writing it.
The code writes the raw API key value directly to disk and no chmod or encryption step appears near the write. Local config storage can be legitimate, but this implementation has weak protection.
Static false positives ignored (2)
These static matches were dismissed by semantic review or matched schema-only tokens, so they are shown for transparency but do not drive the quality score.
External Command Alerts Are Mostly False Positives
Most static external-command matches are Markdown code examples or JavaScript template literals. I found no evidence in the reviewed files of child_process, eval, shell execution, or backticks executing OS commands.
Reviewed representative locations contain command documentation or string interpolation. No shell execution API was found in the inspected implementation files.
Weak Crypto Alerts Are False Positives in Reviewed Code
The reviewed weak-crypto locations do not show MD5, SHA-1, DES, RC4, or custom encryption. The only crypto use found is crypto.randomBytes for a multipart boundary, which is appropriate for that purpose.
Targeted review found URL parsing, timeout handling, and multipart boundary generation rather than weak cryptographic algorithms. No evidence found for insecure hashing or encryption in the reviewed code.
Static analysis flagged 163 patterns across 6 files, but most are false positives. External command detections in SKILL.md are documentation examples, not executable code. Network calls target only shareone.app (legitimate API integration). Filesystem and environment access patterns are expected for credential storage and file upload functionality. No malicious intent detected.
API keys are stored in ~/.shareone_credentials file without encryption. This is standard practice but represents a low-risk exposure if the local system is compromised.
Skill makes HTTP requests to shareone.app API endpoints. All network calls target the legitimate ShareOne service domain, which is expected functionality.
Security audit reveals high-severity credential handling concerns. The skill accesses API keys via environment variables and stores them in plaintext files at ~/.shareone_credentials without encryption. API keys are passed as command-line arguments, exposing them in process lists. The skill connects exclusively to shareone.sudoprivacy.com for file hosting. While no malicious intent was found, the credential storage patterns present elevated risk that requires user awareness.