Back to skill

Security audit

Youxinpai Reconciliation

Security checks for vulnerabilities and agentic risk

Overview

The skill is for a real reconciliation workflow, but it can modify local project files and automatically run internal tasks and SQL with weak safeguards.

Install only if you understand that this skill may edit files under /Users/a58/Desktop/code/yxp_oms_web, run local test code, use an existing internal login session, trigger internal data tasks, and run SQL. Before use, require a manual preview/confirmation of every file diff, matched task row, confirmation dialog, and SQL change, and ensure cleanup runs even on failure or cancellation.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/run_tasks.js:300
Finding

Fail-open operation selection may invoke an unrelated or destructive action

Content
View full analysis
({ node, score: scoreRunCandidate(node) })) .sort((a, b) => b.score - a.score); if (candidates[0] && candidates[0].score > 0) { return candidates[0].node; } return getOperationCandidates(row)[0] || null; } ``` ### Technical Analysis The function first attempts to locate the expected run icon and then scores possible operation controls. However, when no candidate receives a positive score, it returns the first enabled operation control in the row. The candidate selector includes arbitrary buttons, links, and icon-like elements from the operation cell. Consequently, the fallback can return controls that were not identified as run actions. Even a candidate assigned a negative score because it appears to be a delete or pause action can become the fallback result. The returned element is subsequently clicked by `clickRunAndConfirm()`, which may also confirm the resulting dialog. This is a fail-open design: uncertainty about the intended control results in an action rather than a safe failure. ### Attack Path 1. A task row contains multiple operation controls, such as edit, delete, pause, and run. 2. The page layout or CSS classes change so the expected `iconzanting2` selector no longer identifies the run control. 3. None of the available controls receives a positive run score. 4. `getRunIcon()` returns the first enabled operation candidate regardless of its purpose. 5. `clickRunAndConfirm()` clicks that unrelated control. 6. If the action opens a confirmation dialo ...[truncated 700 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/run_tasks.js:164
Finding

Broad task-row and global confirmation matching can execute the wrong operation

Content
View full analysis
normalizeText(button.textContent).includes("确定") ); } ``` ```javascript function getCandidateRows(taskName) { return getVisibleTableRows() .filter((row) => rowContainsTaskName(row, taskName)) .map((row) => extractRowInfo(row, taskName)); } ``` ### Technical Analysis Task rows are accepted when the requested task name appears anywhere in the complete row text. The implementation does not require an exact match in the dedicated task-name field and does not bind subsequent actions to an immutable task identifier. A similarly named task, an ancillary description, or another column containing the searched text can therefore satisfy the match. Confirmation lookup is global across the entire document. It selects the first visible primary button whose text contains the confirmation label, without restricting the lookup to the dialog opened by the current run action. If another dialog is present, the automation can confirm that unrelated dialog. Together, these behaviors weaken the binding between the requested task, the clicked operation, and the confirmed action. ### Attack Path 1. The page contains a row whose description or another field includes the requested task name, or it contains a similarly named task. 2. `rowContainsTaskName()` accepts that row because it performs a substring search over all row text. 3. The automation clicks an operation in the incorrectly matched row. 4. Alternatively, or additionally, another primary confirmation dialog is already open or appea ...[truncated 810 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:74
Finding

Temporary service configuration changes are not guaranteed to be restored on failure

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (7)

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

Instructing the agent to modify local source and configuration files is not justified by the stated goal of triggering reconciliation tasks in a web task page. Unnecessary write access to local code/config increases the chance of persistence, accidental breakage, credential rerouting, or manipulation of internal service endpoints, especially because the skill changes a host value and test code parameters.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is presented as a task-triggering workflow, but it additionally instructs editing a local config file, changing test source code, and executing a local unit test. That expands the trust boundary from web UI automation into local code and environment mutation, creating risk of unintended code execution, environment tampering, or use of internal services unrelated to the stated purpose.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill directs modification of local config and source/test files without a clear up-front warning that it will alter files on disk. Users may expect browser automation only; silent local file mutation can introduce lasting environmental changes, break builds, or redirect traffic to different internal services.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill instructs executing a local unit test without an explicit warning that local code will be run. Even a seemingly narrow test can execute arbitrary project code, make network calls, mutate local or remote state, or depend on the modified host configuration, making this materially more dangerous than passive analysis or UI interaction.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill description says it handles pre-task triggering, but the workflow also performs SQL modification and execution in a data-query system afterward. This hidden expansion of capability can cause the operator to approve one class of action while the skill performs another, potentially impacting data systems or producing side effects beyond simple job triggering.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill instructs modifying SQL and clicking run in an internal data-query page without an explicit warning about data-system operations. Even if the query is intended to be read-only, editing and executing SQL against internal systems can consume resources, expose sensitive data, or have side effects if the query context or platform permits more than SELECT behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code programmatically clicks a run control and then automatically confirms the execution dialog, causing real backend task launches without any additional user acknowledgement at execution time. In an automation skill for data warehouse/reconciliation jobs, this creates a meaningful safety risk: a mistaken selector match, stale search result, or unintended invocation can trigger production jobs, consume resources, or alter operational state without a human verification step.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.