Back to skill

Security audit

Mpps Attestation

Security checks for vulnerabilities and agentic risk

Overview

This skill openly creates external attestation receipts; the main thing to watch is that its examples can send artifact paths and repository metadata to mpps.io.

Before installing or using this skill, treat mpps.io as an external receipt service. Use opaque labels such as "artifact" instead of local file paths, omit repository and commit context unless you intentionally want that recorded, and do not submit secrets, customer data, private source text, raw prompts, or hashes of short secrets without salting.

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
SKILL.md:29
Finding
Unnecessary Disclosure of Local Artifact and Repository Metadata<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 29–45 **Vulnerability Type**: External transmission of potentially sensitive project metadata **Risk Level**: Medium ### Vulnerable Code ```bash ARTIFACT_HASH=$(sha256sum "$ARTIFACT_PATH" | awk '{print "sha256:" $1}') curl -s -X POST https://api.mpps.io/v1/receipts \ -H "Content-Type: application/json" \ -d "{ \"action\": \"agent.task.complete\", \"subject\": \"$ARTIFACT_PATH\", \"artifact_hashes\": [ {\"label\": \"$ARTIFACT_PATH\", \"sha256\": \"$ARTIFACT_HASH\"} ], \"context\": { \"repo\": \"${GITHUB_REPOSITORY:-local}\", \"commit\": \"${GIT_COMMIT:-unknown}\" } }" ``` ### Technical Analysis The documented default workflow sends the local `ARTIFACT_PATH`, `GITHUB_REPOSITORY`, and `GIT_COMMIT` values to the external service at `https://api.mpps.io/v1/receipts`. Submitting an artifact hash is necessary for the Skill's declared remote-attestation functionality. However, the local path, repository identifier, and commit identifier are not required to notarize that hash. These fields therefore exceed the minimum information necessary for the operation. A local artifact path may contain usernames, customer names, confidential project names, workspace layouts, or internal directory structures. A private repository identifier and commit hash may expose internal development activity or enable correlation with other information. The risk is increased by the documentation's statement that receipts are retained for ten years. The later privacy guidance warns users not to include secrets or private source text, but the primary example still transmits potentially identifying metadata by default. No raw artifact content or credentials are shown as being transmitted. ### Attack Path 1. A user follows the structured-receipt example in `SKILL.md`. 2. The shell expands `ARTIFACT_PATH`, `GITHUB_REPOSITORY`, and `GIT_COMMIT` using values from the loca ...[truncated 1181 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Default to an opaque, non-identifying subject and label, such as `artifact`, rather than using the local filesystem path. 2. Omit `context.repo` and `context.commit` from the default request because they are not required for hash attestation. 3. Make the transmission of repository, commit, path, or other identifying metadata an explicit opt-in operation. 4. Display a clear privacy and retention warning immediately before the network request example rather than only in a later section. 5. Recommend reviewing the complete request payload before submission. 6. Construct the JSON using a proper serializer, such as `jq` or Python's `json` module, instead of direct shell interpolation. This prevents malformed JSON when metadata contains quotes, backslashes, or control characters. 7. Provide a privacy-preserving default example, for example: ```bash ARTIFACT_HASH=$(sha256sum "$ARTIFACT_PATH" | awk '{print "sha256:" $1}') jq -n --arg hash "$ARTIFACT_HASH" '{ action: "agent.task.complete", subject: "artifact", artifact_hashes: [ {label: "artifact", sha256: $hash} ] }' | curl -s -X POST https://api.mpps.io/v1/receipts \ -H "Content-Type: application/json" \ --data-binary @- ``` 8. Document that users should avoid hashing short secrets directly and should use an appropriate salt or a larger non-secret payload where necessary. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (9)

External Script Fetching

High
Category
Supply Chain
Content
```bash
ARTIFACT_HASH=$(sha256sum "$ARTIFACT_PATH" | awk '{print "sha256:" $1}')

curl -s -X POST https://api.mpps.io/v1/receipts \
  -H "Content-Type: application/json" \
  -d "{
    \"action\": \"agent.task.complete\",
Confidence
90% confidence
Finding
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
ARTIFACT_HASH=$(sha256sum "$ARTIFACT_PATH" | awk '{print "sha256:" $1}')

curl -s -X POST https://api.mpps.io/v1/receipts \
  -H "Content-Type: application/json" \
  -d "{
    \"action\": \"agent.task.complete\",
Confidence
90% confidence
Finding
The referenced api.mpps.io endpoint is a third-party external destination embedded directly in the skill. In agent environments, hardcoded external service destinations increase the risk of unreviewed data egress and make the skill more dangerous because the whole purpose is to send workflow-derived metadata out of the local trust boundary.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
ARTIFACT_HASH=$(sha256sum "$ARTIFACT_PATH" | awk '{print "sha256:" $1}')

curl -s -X POST https://api.mpps.io/v1/receipts \
  -H "Content-Type: application/json" \
  -d "{
    \"action\": \"agent.task.complete\",
Confidence
90% confidence
Finding
The referenced api.mpps.io endpoint is a third-party external destination embedded directly in the skill. In agent environments, hardcoded external service destinations increase the risk of unreviewed data egress and make the skill more dangerous because the whole purpose is to send workflow-derived metadata out of the local trust boundary.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
HASH=$(echo -n "$DATA" | sha256sum | awk '{print "sha256:" $1}')
curl -s -X POST https://api.mpps.io/v1/notarize \
  -H "Content-Type: application/json" \
  -d "{\"content_hash\": \"$HASH\"}"
```
Confidence
86% confidence
Finding
This endpoint reference supports a workflow that sends notarization data off-host. The skill context makes this more dangerous because it is designed specifically for external anchoring, so accidental use in sensitive environments could disclose artifact relationships or business process timing.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
HASH=$(echo -n "$DATA" | sha256sum | awk '{print "sha256:" $1}')
curl -s -X POST https://api.mpps.io/v1/notarize \
  -H "Content-Type: application/json" \
  -d "{\"content_hash\": \"$HASH\"}"
```
Confidence
86% confidence
Finding
This endpoint reference supports a workflow that sends notarization data off-host. The skill context makes this more dangerous because it is designed specifically for external anchoring, so accidental use in sensitive environments could disclose artifact relationships or business process timing.

External Transmission

Medium
Category
Data Exfiltration
Content
artifact = b"agent output bytes"
h = "sha256:" + hashlib.sha256(artifact).hexdigest()

receipt = requests.post(
    "https://api.mpps.io/v1/receipts",
    json={
        "action": "agent.task.complete",
Confidence
92% confidence
Finding
This Python example sends receipt data to api.mpps.io over the network. Even if only hashes are sent, hashes of low-entropy data and contextual metadata may leak information or enable correlation of private artifacts across environments, so the external transmission is security-relevant.

External Transmission

Medium
Category
Data Exfiltration
Content
artifact = b"agent output bytes"
h = "sha256:" + hashlib.sha256(artifact).hexdigest()

receipt = requests.post(
    "https://api.mpps.io/v1/receipts",
    json={
        "action": "agent.task.complete",
Confidence
92% confidence
Finding
This Python example sends receipt data to api.mpps.io over the network. Even if only hashes are sent, hashes of low-entropy data and contextual metadata may leak information or enable correlation of private artifacts across environments, so the external transmission is security-relevant.

External Transmission

Medium
Category
Data Exfiltration
Content
h = "sha256:" + hashlib.sha256(artifact).hexdigest()

receipt = requests.post(
    "https://api.mpps.io/v1/receipts",
    json={
        "action": "agent.task.complete",
        "subject": "output.json",
Confidence
90% confidence
Finding
The Python code hardcodes an HTTPS POST target at api.mpps.io for receipt submission. This is a real security concern in a skill because it normalizes outbound transfer of work-derived metadata to a non-local service, which may violate least-privilege or organizational data handling policies.

External Transmission

Medium
Category
Data Exfiltration
Content
## Verify

```bash
curl https://api.mpps.io/v1/verify/mpps_att_0c27bebca6dc4bd6
```

For structured receipts, recompute the manifest hash if you need stronger evidence:
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.