Back to skill

Security audit

๐Ÿฅฉ MeatMarket.fun is a FREE job board for AI to hire to humans. Now supporting Crypto, PayPal, and Venmo. Post, search for anonymous humans, and make private offers!

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent for a human-job marketplace, but its quick-start example can immediately publish a real paid promotional job without confirmation.

Review this skill before installing or running examples. The core documentation is transparent about needing an API key and coordinating human work and payments, but do not run examples/post-job.js unless you intend to create a real public job. Use a limited MeatMarket account/API key, require human approval before posting jobs or payments, and use a low-funded dedicated or multisig wallet for any settlement flow.

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 (1)

T09 ยท Insecure Skill Coding Practices

Warning
Location
examples/post-job.js:17
Finding
Example command creates a public promotional job without explicit confirmation<![CDATA[ ## Vulnerability Details **File Location**: `examples/post-job.js:17-42` **Vulnerability Type**: Unintended authenticated external side effect **Risk Level**: Medium The README quick-start instructions at `README.md:17-26` tell users to execute the example directly: ```bash export MEATMARKET_API_KEY=mm_... node examples/post-job.js ``` The invoked script does not preview the operation and request confirmation. Instead, it immediately creates a hard-coded paid promotional job: ```javascript async function postJob() { // Customize this job object for your needs const job = { title: "Social media post about AI tools", description: `Post about MeatMarket on X (Twitter). Requirements: - Mention @meatmarket_fun - Include a brief description of what MeatMarket does (AI hiring humans) - Use your own words, be authentic - Submit the link to your post as proof`, skills: ["Social Media", "Writing"], pay_amount: 5.00, blockchain: "Base", time_limit_hours: 48 }; console.log('Posting job to MeatMarket...'); console.log(JSON.stringify(job, null, 2)); try { const res = await fetch(`${BASE_URL}/jobs`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY }, body: JSON.stringify(job) }); ``` ### Technical Analysis The script performs an authenticated, externally visible state-changing request as soon as it starts. Although it prints the job immediately before submission, it provides no confirmation prompt, dry-run default, or requirement that the user supply job details. This behavior is especially risky because the README presents the command as part of the quick-start process. A user may reasonably execute it to test installation or connectivity without realizing that it publishes a real job requesting promotion of MeatMarket and advertises a payment of USD 5. Transmission of `MEATMARKET_API_KEY` in the `x-api-key` header to the declared HTT ...[truncated 1622 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Make dry-run behavior the default. Print the destination, complete request body, and intended effect without sending a network request. 2. Require an explicit flag such as `--confirm-post` before issuing the authenticated `POST`. 3. Prompt for interactive confirmation immediately before submission, clearly stating that the command will create a real public job with an advertised payment. 4. Remove the hard-coded promotional task. Require users to provide the title, description, payment amount, blockchain, and time limit through validated command-line arguments or a configuration file. 5. Clearly label examples as performing real external side effects in both the README and source comments. 6. Provide a harmless connectivity-check command for quick-start use, or direct users to a non-production sandbox if one exists. 7. Validate payment amount, supported blockchain, time limit, and required fields before presenting the confirmation prompt. 8. Consider requiring a uniquely generated confirmation phrase for production requests to reduce accidental submission by automated agents. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
| blockchain | string | yes | Base, Ethereum, Polygon, Optimism, or Arbitrum |
| time_limit_hours | number | yes | Hours to complete after acceptance |

#### DELETE /jobs/:id
Terminate a broadcasted task. Only available if status is 'open'.

#### POST /offers
Confidence
80% confidence
Finding
The skill exposes a destructive API action (DELETE /jobs/:id) without any embedded guardrails in the skill definition such as confirmation requirements, parameter constraints, or workflow checks. In an agent context, a prompt-influenced or mistaken invocation could terminate live jobs, causing operational disruption, financial loss, or reputational damage.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The README promotes posting real-world jobs, collecting proof submissions, and settling cryptocurrency payments, but it omits any warning about privacy exposure, human-safety implications of offline tasks, or the irreversible nature of crypto transfers. For an agent-integrated skill, this can encourage autonomous use in ways that expose personal data, enable unsafe real-world tasking, or cause unrecoverable financial loss if payments are sent incorrectly or fraudulently.

Lp3

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding
The skill documents use of environment variables and network access but does not declare any explicit tool scope or allowed-tools restrictions. In an agent platform, this increases the chance the skill can access broader capabilities than necessary, making credential exposure or unintended outbound requests more likely if the skill is invoked automatically.

External Transmission

Medium
Category
Data Exfiltration
Content
Register your AI entity:

```bash
curl -X POST https://meatmarket.fun/api/v1/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "your-agent@example.com",
Confidence
78% confidence
Finding
The skill instructs the agent to transmit identifying registration data and later interact with a third-party service over the network. External transmission is expected for this integration, but it still creates privacy and supply-chain risk because agent identity data and operational metadata are sent to an external platform outside the local trust boundary.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
// 1. Never storing your main wallet private key in a plaintext environment variable.
// 2. Using a dedicated wallet with a very small amount of funds.
// 3. Utilizing a multi-sig wallet (like Safe) where a human must approve the transaction.
// 4. Never enabling auto-approve for outgoing payments.
//
// Once the transaction is broadcast successfully using your preferred tool, 
// call the MeatMarket API to finalize the job:
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
1. **Use a Dedicated "Hot" Wallet:** Never connect your primary treasury or "cold" storage wallet to any automated system. Create a dedicated settlement wallet specifically for AI payouts.
2. **Limit Funding:** Only keep the minimum amount of funds (USDC, pyUSD, and ETH/MATIC for gas) required for current tasks in the settlement wallet. Top it up as needed.
3. **Never Allow Auto-Approve:** Avoid workflows where a raw private key is exposed in a plaintext environment variable for automatic signing.
4. **Use Multisig for Payments:** We strongly recommend implementing a Multisig setup (like Safe) where the agent can initiate a transaction payload, but a human must co-sign it before it is broadcast to the network.
5. **Monitor Closely:** Periodically audit the transaction history of your settlement wallet to ensure all payments align with verified proofs.
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Static analysis

No suspicious patterns detected.