Back to skill

Security audit

artsonia-api

Security checks for vulnerabilities and agentic risk

Overview

Review is warranted because the examples can leave children’s private information and reusable login cookies accessible to other local users.

Before running the examples, replace fixed /tmp paths with files in a private temporary directory, use umask 077, restrict the cookie file to mode 600, and remove sensitive pages and cookies afterward. Limit the agent to reads unless you explicitly request the exact comment, invitation, feedback-state change, or preference update. Review the separate parser repository before running its npm commands; that code is absent from this package.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared purpose describes retrieving art-related data, with a form POST specifically for login. This chunk instead performs an account-settings mutation: it enables artist-activity notifications and omits news and promotional opt-ins to disable them. Reading and resubmitting profile fields supports that undeclared write capability, not the described art-data retrieval.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description presents data access and retrieval, with form POST mentioned specifically for login. This code instead sends a Comment field to an artwork endpoint, attempting a state-changing comment submission. Posting comments is not a declared capability; cookie handling and local response storage are supporting implementation details.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description presents a data-access workflow, with login as a supporting operation. The supplied command instead submits fan details to /members/fanclub/add.asp, attempting to modify fan-club membership or initiate an invitation. Although it uses the declared service and curl, this write operation is not disclosed by the stated retrieval purpose. Whether it succeeds depends on valid session cookies and form values.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared purpose describes data access and retrieval, with a login POST for authentication. This request instead submits ConfirmAsRead=Mark as Read to the feedback endpoint, requesting a change to account-associated feedback state. That write capability is not disclosed. Cookie handling and saving the response are supporting implementation details, not separate mismatches.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
95% confidence
Finding

Session persistence is legitimate here, but the setup pre-creates the cookie file using shell redirection without setting private permissions. Under a common 022 umask and traversable home/cache directories, the jar can be readable by other local users, exposing a session usable for authenticated reads and writes. HttpOnly does not protect cookies stored on disk.

Content

Scanner excerpt · SKILL.md (reported line 32)May include surrounding context.

export ARTSONIA_USERNAME=you@example.com export ARTSONIA_PASSWORD='your-password' # or: op read "op://Private/Artsonia/password" JAR=~/.cache/artsonia-cookies.txt mkdir -p ~/.cache # ensure the jar's directory exists on a fresh box : > "$JAR" # fresh jar

text

Authenticated student data is saved to a temporary file without a privacy or retention warning.

Medium
Category
Output Handling
Confidence
97% confidence
Finding

Authenticated student information is written to a predictable shared-temporary-directory path without restrictive permissions or cleanup. With a common permissive umask, other local users can read the file; predictable names also create file-precreation risks where operating-system protections permit them. Children's names, schools, and account-linked information make this more sensitive than ordinary cached public HTML.

Content

No source excerpt is available for this finding.

The skill directs account-profile modifications despite describing a data-access workflow.

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

The manifest describes retrieving Artsonia portfolio data through authenticated requests, but these instructions direct a read-modify-write POST to the account profile, including changing profile fields. Modifying account information or opt-ins is a distinct remote mutation, not an implementation requirement for retrieving the advertised data.

Content

No source excerpt is available for this finding.

The recipes modify remote Artsonia data and send invitations despite the manifest describing data retrieval.

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

The manifest describes accessing Artsonia data by fetching server-rendered pages. These recipes instead submit comments, send real fan-invitation emails, and mark all of a student's feedback as read. Those are externally visible or persistent changes, not implementation details required to retrieve portfolios, comments, fans, or feedback.

Content

No source excerpt is available for this finding.

Changing account notification and promotional preferences is unrelated to the stated data-access purpose.

Medium
Category
Excessive Agency
Confidence
98% confidence
Finding

The set_notifications recipe submits the account's whole profile form to change notification preferences, including disabling news and promotional opt-ins. Managing account communication settings is not necessary to access student portfolios or the other Artsonia data named in the manifest.

Content

No source excerpt is available for this finding.