Back to skill

Security audit

AI Photo Cleanup Studio

Security checks for vulnerabilities and agentic risk

Overview

This photo-cleanup skill is not clearly malicious, but it grants broad Beatra account access and silently updates itself beyond what a simple object-removal tool needs.

Install only if you are comfortable giving this Beatra package broad shared account access, sending photos to Beatra for processing, and allowing default silent package updates. Before use, consider disabling automatic updates with the documented command and review the Beatra account permissions and stored ~/.beatra credential lifecycle.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (20)

Lp3

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding
The skill advertises no declared permissions, yet its documented operation requires broad capabilities including environment access, file read/write, network access, and shell execution. This creates a transparency and least-privilege problem: reviewers and users cannot accurately assess the true trust boundary, and the skill can perform sensitive local and remote actions beyond simple image editing.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The documented behavior substantially exceeds the user-facing purpose of object removal, including credential handling, arbitrary remote MCP tool access, package self-update, registration/telemetry, and token revocation flows. That mismatch is dangerous because users may grant trust based on a narrow photo-editing description while the skill actually introduces a much larger attack surface capable of remote communication, local persistence, and code/package lifecycle changes.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The skill includes an automatic self-update mechanism with remote discovery, download, verification, and file replacement despite being presented as a photo cleanup tool. Even if verification is claimed, embedding self-modifying package behavior in a content-editing skill increases supply-chain risk and can change code after review, weakening the security value of any one-time audit.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The document states that one approval covers image, video, music, speech, upload, model, and task tools, which materially exceeds the advertised scope of a photo cleanup skill. This creates overbroad authorization and violates least privilege: if the token or skill is abused, an agent could access unrelated Beatra capabilities under the same grant.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The bundled MCP client documentation explicitly supports generic tool discovery and arbitrary tool invocation (`tools`, `call beatra.tasks.list`) against a remote MCP endpoint, rather than a narrowly constrained photo cleanup interface. In the context of a single-purpose photo editor, exposing a general remote execution surface substantially broadens what the skill can do and increases the blast radius of misuse or compromise.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The OAuth scope string requests many capabilities unrelated to a photo object-removal skill, including image/video/music/speech generation, artifact and task access, and wallet spending. This violates least-privilege and means that if the skill, its backend, or stored token is abused, the attacker gains materially broader access than users would reasonably expect from the advertised functionality.

Context-Inappropriate Capability

Critical
Confidence
99% confidence
Finding
The scope includes unrelated media and voice capabilities such as video, music, speech, and voice read/write permissions, none of which align with removing objects from existing photos. These excess privileges expand the blast radius of token misuse and suggest the skill is over-authorized relative to its declared function.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The scope includes unrelated media and voice capabilities such as video, music, speech, and voice read/write permissions, none of which align with removing objects from existing photos. These excess privileges expand the blast radius of token misuse and suggest the skill is over-authorized relative to its declared function.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The client implements broad remote capabilities far beyond the advertised photo-cleanup function: generic remote tool invocation, upload flows, installation telemetry, and a package self-update mechanism. In a narrowly scoped image-editing skill, this excess capability materially increases attack surface and creates a supply-chain/control channel that could be abused to run unrelated remote operations or alter local code after installation.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The code fingerprints the host environment using environment variables and persisted host metadata, then automatically injects source_package_slug and source_platform into business calls. This collects and transmits context unrelated to object-removal functionality, increasing privacy risk and enabling environment profiling without clear user need or consent.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The client persistently records a local skills inventory and performs installation registration telemetry on normal use, even though these behaviors are unrelated to photo cleanup. Persistent inventory plus outbound registration expands privacy exposure and creates additional hidden state and network activity that a user would not reasonably expect from a simple image-editing skill.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The uninstall script communicates with a remote revocation endpoint and manages shared device authorization state, which is unrelated to the advertised photo-cleanup functionality. Even though this is framed as cleanup during uninstall, it gives the skill access to shared credentials and network-side account effects that exceed least-privilege expectations for an image-editing skill.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
This code inspects the shared skills inventory and reasons about what other skills are installed on the device. That creates unnecessary visibility into cross-skill state, which is not justified by a photo object-removal skill and weakens isolation between packages.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The script reads an access token from shared credentials.json and uses it to perform a remote revocation request. Access to bearer tokens is highly sensitive: any skill that can read and use them can potentially disrupt other skills, impersonate the device to the service, or misuse the credential beyond uninstall behavior.

Missing User Warnings

Medium
Confidence
77% confidence
Finding
The manifest configures a remote MCP endpoint with bearer-based authentication and a local credential file, but the user-facing metadata does not disclose that use of the skill involves sending data to an external service. For a photo-editing skill, this means user images and prompts may leave the local environment without clear notice, creating privacy and data-handling risk.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The document states that the client silently checks for updates and automatically installs newer releases before ordinary commands, without a prominent upfront warning about system-modifying behavior or an explicit opt-in. Even though the text describes several integrity protections, silent self-update and file replacement can surprise users, expand the blast radius of any updater flaw or server-side compromise, and undermine informed consent for local system changes.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The client supports silent automatic self-update that downloads remote manifests/archives and replaces local package files during execution without user-facing warning at the time of update. Even with checksum and path validation, this creates a supply-chain and change-control risk because code can change underneath a user’s installation outside normal review expectations for a photo-editing skill.

Credential Access

High
Category
Privilege Escalation
Content
#: these and then removes the directory only if it is empty — the script
#: never recursively deletes a directory it does not fully understand.
_STATE_FILES = (
    "credentials.json",
    "installation.json",
    "host.json",
    "skills.json",
Confidence
90% confidence
Finding
The script explicitly includes credentials.json among the files it manages, indicating awareness of and access to shared credential material. In the context of a consumer photo-editing skill, touching shared credentials is over-privileged and creates an avenue for credential theft, misuse, or denial of service against other installed skills.

Credential Access

High
Category
Privilege Escalation
Content
def _device_token(state_dir: Path) -> str | None:
    path = state_dir / "credentials.json"
    try:
        value = json.loads(path.read_text(encoding="utf-8"))
    except (OSError, ValueError):
Confidence
98% confidence
Finding
This function opens credentials.json and extracts access_token directly into process memory. Direct token access by a skill is dangerous because the token can be reused for unauthorized API calls, exfiltrated, or revoked to break other dependent functionality; the mismatch with the declared photo-cleanup purpose makes this more concerning.

Self-Modification

High
Category
Rogue Agent
Content
)
    update = subparsers.add_parser(
        "update",
        help="Check, install, or configure Beatra package self-updates",
    )
    update.add_argument(
        "--check",
Confidence
96% confidence
Finding
The presence of self-update/self-modification capability is high risk in a skill because it allows the installed codebase to be replaced after deployment through a remote-controlled update path. Even with validation controls, this materially changes trust assumptions and can turn a benign installation into a moving supply-chain target if the update infrastructure or publisher account is compromised.

Static analysis

No suspicious patterns detected.