Back to skill

Security audit

Publora Mastodon

Security checks across malware telemetry and agentic risk

Overview

This is a focused Mastodon posting helper for Publora, with the main risk being ordinary public posting through a third-party API.

Install only if you want your agent to post or schedule Mastodon content through Publora. Treat the Publora API key as sensitive, review text and media before sending, avoid posting secrets or private personal data, and remember that published Mastodon content may become public and federated.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (9)

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill provides ready-to-use examples that send post content and media to Publora/Mastodon but does not include any explicit warning that user text, images, and metadata will be transmitted to an external third-party service. In an agent setting, this can cause unintended disclosure of sensitive or private user content because the examples normalize external posting without requiring clear user confirmation or notice.

External Transmission

Medium
Category
Data Exfiltration
Content
HEADERS = { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' }

# Step 1: Create post
post = requests.post('https://api.publora.com/api/v1/create-post', headers=HEADERS, json={
    'content': 'Here is a photo from our event 📷 #community',
    'platforms': ['mastodon-123456789']
}).json()
Confidence
84% confidence
Finding
This URL occurrence is embedded in a requests.post call that transmits post content externally, making it a real data egress point rather than harmless reference text. The main risk is unintended publication or disclosure of user content through automated use of the example in a skill execution context.

External Transmission

Medium
Category
Data Exfiltration
Content
}).json()

# Step 2: Get upload URL (up to 16 MB, JPEG/PNG/GIF/WebP)
upload = requests.post('https://api.publora.com/api/v1/get-upload-url', headers=HEADERS, json={
    'postGroupId': post['postGroupId'],
    'fileName': 'photo.jpg',
    'contentType': 'image/jpeg',
Confidence
83% confidence
Finding
This URL is part of the upload-setup request and supports transferring user-associated media to external systems, so it is a valid security-relevant transmission finding. In a social-posting skill this is expected behavior, but still a meaningful risk because users may not understand that files and metadata are leaving their environment and could become public.

External Transmission

Medium
Category
Data Exfiltration
Content
HEADERS = { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' }

# Step 1: Create post
post = requests.post('https://api.publora.com/api/v1/create-post', headers=HEADERS, json={
    'content': 'Here is a photo from our event 📷 #community',
    'platforms': ['mastodon-123456789']
}).json()
Confidence
84% confidence
Finding
This URL occurrence is embedded in a requests.post call that transmits post content externally, making it a real data egress point rather than harmless reference text. The main risk is unintended publication or disclosure of user content through automated use of the example in a skill execution context.

External Transmission

Medium
Category
Data Exfiltration
Content
}).json()

# Step 2: Get upload URL (up to 16 MB, JPEG/PNG/GIF/WebP)
upload = requests.post('https://api.publora.com/api/v1/get-upload-url', headers=HEADERS, json={
    'postGroupId': post['postGroupId'],
    'fileName': 'photo.jpg',
    'contentType': 'image/jpeg',
Confidence
83% confidence
Finding
This URL is part of the upload-setup request and supports transferring user-associated media to external systems, so it is a valid security-relevant transmission finding. In a social-posting skill this is expected behavior, but still a meaningful risk because users may not understand that files and metadata are leaving their environment and could become public.

External Transmission

Medium
Category
Data Exfiltration
Content
## Post a Toot (text)

```javascript
await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' },
  body: JSON.stringify({
Confidence
85% confidence
Finding
The presence of the Publora URL inside the fetch example corresponds to an actual outbound call path and therefore represents true external transmission. The skill context reduces suspicion because posting to Mastodon is the stated purpose, but the absence of explicit disclosure and consent requirements makes accidental data leakage more likely.

External Transmission

Medium
Category
Data Exfiltration
Content
## Post a Toot (text)

```javascript
await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' },
  body: JSON.stringify({
Confidence
85% confidence
Finding
The presence of the Publora URL inside the fetch example corresponds to an actual outbound call path and therefore represents true external transmission. The skill context reduces suspicion because posting to Mastodon is the stated purpose, but the absence of explicit disclosure and consent requirements makes accidental data leakage more likely.

External Transmission

Medium
Category
Data Exfiltration
Content
HEADERS = { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' }

# Step 1: Create post
post = requests.post('https://api.publora.com/api/v1/create-post', headers=HEADERS, json={
    'content': 'Here is a photo from our event 📷 #community',
    'platforms': ['mastodon-123456789']
}).json()
Confidence
84% confidence
Finding
This URL occurrence is embedded in a requests.post call that transmits post content externally, making it a real data egress point rather than harmless reference text. The main risk is unintended publication or disclosure of user content through automated use of the example in a skill execution context.

External Transmission

Medium
Category
Data Exfiltration
Content
}).json()

# Step 2: Get upload URL (up to 16 MB, JPEG/PNG/GIF/WebP)
upload = requests.post('https://api.publora.com/api/v1/get-upload-url', headers=HEADERS, json={
    'postGroupId': post['postGroupId'],
    'fileName': 'photo.jpg',
    'contentType': 'image/jpeg',
Confidence
83% confidence
Finding
This URL is part of the upload-setup request and supports transferring user-associated media to external systems, so it is a valid security-relevant transmission finding. In a social-posting skill this is expected behavior, but still a meaningful risk because users may not understand that files and metadata are leaving their environment and could become public.

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.