Back to skill

Security audit

Clawdbot Skill Cookidoo

Security checks for vulnerabilities and agentic risk

Overview

This Cookidoo skill is a coherent recipe/account access helper, but users should be careful because it uses a plaintext password with an unofficial, unpinned Python dependency.

Install only if you are comfortable giving an unofficial Python package access to your Cookidoo account. Prefer setting credentials only for the command session or storing them in a protected secrets manager; if you use the documented env file, restrict its permissions and do not sync or commit it. Treat the documented favorites/sync claims as unsupported by this version unless the package is updated and reviewed.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
package.json:27
Finding

Unpinned Unofficial Dependency Receives Cookidoo Credentials

Content
View full analysis

Vulnerability Details

File Location: package.json:27-29; related installation instructions in README.md:33-35 and SKILL.md:28-30; credential handoff in scripts/cookidoo_cli.py:48-51
Vulnerability Type: Unpinned third-party dependency / software supply-chain risk
Risk Level: Medium

Complete Code Snippets

package.json:27-29:

json
"dependencies": {
  "python": ["cookidoo-api"]
}

README.md:33-35 and SKILL.md:28-30:

bash
pip install cookidoo-api

scripts/cookidoo_cli.py:48-51:

python
email, password = get_credentials()

async with Cookidoo(email, password) as cookidoo:
    await cookidoo.login()

Technical Analysis

The project declares and recommends installing the unofficial cookidoo-api package without an exact version constraint, lockfile, or package-integrity hash. A fresh installation therefore resolves to whichever release is available from the configured Python package index at installation time.

The imported package executes within the CLI process and is instantiated with the user's Cookidoo email address and plaintext password. Python package code can also execute during installation or import. Consequently, a compromised, malicious, or unexpectedly changed future release could access the credentials and execute arbitrary code with the privileges of the user running the CLI.

The audited project does not itself fetch and execute a remote payload or contain confirmed malicious code. The risk arises from its unconstrained trust in a mutable third-party supply-chain component.

Attack Path

  1. An attacker compromises the publisher account, distribution infrastructure, or a future release of cookidoo-api.
  2. The attacker publishes a malicious package version under the dependency name already recommended by the project.
  3. A user follows the documented pip install cookidoo-api instruction. Because no version or hash is specified, ...[truncated 1122 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin cookidoo-api to an exact, reviewed release rather than accepting the latest available version.
  2. Maintain the Python dependency in a lockfile or requirements file with cryptographic hashes, for example by using pip-tools and installing with pip install --require-hashes.
  3. Update package.json, README.md, and SKILL.md so all dependency declarations and installation commands refer to the same pinned version and verified hashes.
  4. Review the package's source, publisher identity, release history, and transitive dependencies before selecting or upgrading the pinned release.
  5. Perform dependency upgrades through a controlled review process with automated vulnerability, malware, and provenance checks.
  6. Run the CLI with least privilege and, where practical, isolate it in a virtual environment or container with restricted filesystem and network access.
  7. Prefer token-based or otherwise revocable authentication if the upstream API supports it, rather than supplying the account password directly to a third-party library.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The documented behavior does not accurately match the apparent capabilities: it omits account/profile access while claiming features like favorites and shopping-list sync that are not actually implemented. This mismatch is dangerous because users and reviewers may authorize the skill based on incomplete or misleading expectations, especially where account data access or future write operations are involved.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
84% confidence
Finding

The README instructs users to store plaintext account credentials in a persistent local file under ~/.config/atlas/cookidoo.env. Persisting reusable secrets on disk increases exposure to credential theft from local compromise, backups, accidental file disclosure, or overly permissive file permissions, especially since these credentials grant access to a real third-party account.

Content

Scanner excerpt · README.md (reported line 24)May include surrounding context.

| COOKIDOO_COUNTRY | Optional | Country code (default: DE) | | COOKIDOO_LANGUAGE | Optional | Language code (default: de-DE) |

Set credentials in environment or create ~/.config/atlas/cookidoo.env:

bash
COOKIDOO_EMAIL=your@email.com
COOKIDOO_PASSWORD=yourpassword

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
82% confidence
Finding

The skill declares no explicit tool scope or permissions even though it is designed to read environment credentials and local configuration files. In an agent setting, missing scope declarations reduce transparency and can allow broader-than-expected access to sensitive data such as Cookidoo credentials, making review and containment harder.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The description states the skill can access shopping lists and sync ingredients to shopping lists, which implies write operations affecting user data. However, the markdown does not clearly warn users that invoking these functions may change their Cookidoo account state.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This markdown file instructs users to provide their Cookidoo email and password and describes access to recipes, shopping lists, and meal planning via an unofficial API package. While it notes to store credentials securely, it does not explicitly warn that the skill will authenticate to a remote service and transmit account data and recipe-related requests over the network.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README specifies a default country of DE and default language of de-DE, which can force a particular locale for users who do not actively override it. Under the stated policy, locale-specific behavior should either be user-selectable or clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation specifies a default language code of de-DE, which can force a specific locale if the user does not actively override it. This is a natural-language locale policy concern because the skill does not indicate that users will be asked to choose or confirm their preferred language.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.