Back to skill

Security audit

Zernio API

Security checks for vulnerabilities and agentic risk

Overview

This is a documentation-only Zernio API reference; its live social-posting and credential examples are expected for the product but should be used carefully.

Install only from a trusted ClawHub/registry source, preferably with a pinned installer version. Keep Zernio API keys, app passwords, bot tokens, and webhook secrets server-side and out of logs. Treat examples with publishNow: true, retry, DELETE, queue changes, media download, and webhook configuration as live actions that can affect connected social accounts or transmit data to Zernio and configured webhook URLs.

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

T08 · Insecure Dependencies

Warning
Location
README.md:16
Finding

Unpinned Package Execution Through npx

Content
View full analysis

Vulnerability Details

File Location: README.md:16-20
Vulnerability Type: Unpinned third-party dependency execution
Risk Level: Medium

Vulnerable Code

bash
## Installation

```bash
npx clawhub@latest install zernio-api
text

### Technical Analysis

The installation instructions use `npx` with the mutable `@latest` package tag. When the command is executed, `npx` may download and run a version of `clawhub` that did not exist when this Skill was reviewed.

Because neither an exact version nor an integrity value is specified, the effective installation code is controlled by the package registry and the package publisher at execution time. A compromised publisher account, registry, or future malicious release could consequently turn this command into an arbitrary-code execution path.

This is a supply-chain weakness rather than evidence that the currently documented package is malicious.

### Attack Path

1. An attacker compromises the `clawhub` package publisher, its release process, or the relevant package-registry account.
2. The attacker publishes a malicious package version and assigns it the `latest` tag.
3. A user follows the Skill's installation instructions and runs `npx clawhub@latest install zernio-api`.
4. `npx` retrieves the attacker-controlled version.
5. Package lifecycle hooks, the command-line entry point, or other package initialization code executes with the privileges of the user running the command.
6. The malicious package can access resources available to that user, subject to operating-system controls and the execution environment.

### Impact Assessment

Successful exploitation could permit arbitrary code execution with the installing user's privileges. Depending on those privileges, the attacker could read or modify user-accessible files, access environment variables and development credentials, alter project files, or install additional malicious components.

The c
...[truncated 162 chars]
Remediation
View remediation

Remediation Suggestions

  • Replace @latest with an exact, reviewed package version, for example:
    bash
    npx clawhub@X.Y.Z install zernio-api
    
  • Prefer installation through a lockfile-backed project dependency so the resolved version and transitive dependencies are reproducible.
  • Use package-manager integrity metadata and verify package provenance or signatures where supported.
  • Review package lifecycle scripts and the published artifact before recommending a new version.
  • Run installation in a restricted environment without unnecessary credentials or elevated operating-system privileges.
  • Establish a controlled update process in which version changes are explicitly reviewed instead of being adopted automatically.

T09 · Insecure Skill Coding Practices

Note
Location
rules/webhooks.md:46
Finding

Malformed Webhook Signatures Can Cause Unhandled Exceptions

Content
View full analysis

Vulnerability Details

File Location: rules/webhooks.md:46-55
Vulnerability Type: Improper validation before constant-time signature comparison
Risk Level: Low

Vulnerable Code

typescript
function verifyWebhook(payload: string, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

Technical Analysis

Node.js crypto.timingSafeEqual requires both input buffers to have the same byte length. It throws an exception when their lengths differ rather than returning false.

The example passes an externally supplied webhook signature directly to Buffer.from and then to timingSafeEqual without first validating its presence, encoding, format, or expected length. A missing signature may also cause Buffer.from itself to throw, depending on the value supplied by the web framework.

If an application copies this example without surrounding exception handling, malformed requests can terminate webhook request processing through an exception. Signature verification must reject invalid input safely before invoking the constant-time comparison.

Attack Path

  1. An attacker identifies a publicly reachable webhook endpoint implemented using the documented verification function.
  2. The attacker sends a webhook request with a missing, truncated, oversized, or otherwise malformed x-zernio-signature header.
  3. The application passes the attacker-controlled value to Buffer.from or constructs a buffer whose length differs from the expected HMAC.
  4. Buffer.from or crypto.timingSafeEqual throws an exception.
  5. If the handler does not catch the exception, the request fails with a server error.
  6. Repeated malformed requests can consume error-handling and logging resources or reduce webhook endpoint ava ...[truncated 496 chars]
Remediation
View remediation

Remediation Suggestions

  • Require the signature to be a single string before attempting conversion.
  • Validate the signature against the expected encoding and length. A SHA-256 hexadecimal HMAC must contain exactly 64 hexadecimal characters.
  • Decode both values explicitly and compare equal-length byte buffers.
  • Return false for all malformed inputs rather than allowing verification errors to propagate.
  • Wrap verification at the request boundary in defensive exception handling.
  • Verify the HMAC over the exact raw request body rather than a reserialized object, because JSON parsing and serialization can alter the signed bytes.

Example hardened implementation:

typescript
function verifyWebhook(
  rawPayload: Buffer,
  signature: unknown,
  secret: string
): boolean {
  if (
    typeof signature !== 'string' ||
    !/^[a-fA-F0-9]{64}$/.test(signature)
  ) {
    return false;
  }

  const supplied = Buffer.from(signature, 'hex');
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawPayload)
    .digest();

  if (supplied.length !== expected.length) {
    return false;
  }

  try {
    return crypto.timingSafeEqual(supplied, expected);
  } catch {
    return false;
  }
}

The HTTP handler should reject failed verification with an appropriate unauthorized response and apply request-size limits and rate limiting to the webhook route.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (25)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The example performs a live POST with publishNow: true, which can immediately publish content to connected social media accounts without any warning that the action has real external effects. In a coding assistant skill context, users may copy-paste examples directly, making this more dangerous because it can trigger unintended posts, reputational damage, or misuse of production credentials.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 18)May include surrounding context.

bash
# 1. Create profile
curl -X POST https://zernio.com/api/v1/profiles \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"name": "My Brand"}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file documents DELETE /v1/accounts/{accountId} as 'Disconnect account' but provides no user warning about the effect on connected accounts, tokens, or service behavior. For markdown files, destructive or system-affecting actions should include clear warnings when they may affect user data or system integrity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The documentation exposes DELETE /v1/account-groups/{groupId} but does not warn users that deleting a group is destructive and may affect bulk-posting organization. In markdown skill documentation, destructive operations should be accompanied by user-facing warnings about impact and reversibility.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/connect.md (reported line 36)May include surrounding context.

bash
# Get OAuth URL
curl "https://zernio.com/api/v1/connect/twitter?profileId=PROFILE_ID&callbackUrl=https://yourapp.com/callback" \
  -H "Authorization: Bearer YOUR_API_KEY"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The Bluesky example shows submission of an app password directly to the API without any explicit warning about the sensitivity of that credential, safe handling expectations, or storage implications. In API reference material this can normalize unsafe copy/paste or logging of long-lived secrets, increasing the chance that integrators expose credentials in client-side code, logs, analytics, or support traces.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/media.md (reported line 12)May include surrounding context.

Get Presigned URL

bash
curl -X POST https://zernio.com/api/v1/media/presign \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "image.jpg", "contentType": "image/jpeg"}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Create Post

typescript
const post = await fetch('https://zernio.com/api/v1/posts', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/posts.md (reported line 19)May include surrounding context.

Create Post

typescript
const post = await fetch('https://zernio.com/api/v1/posts', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/posts.md (reported line 69)May include surrounding context.

Create Post

typescript
const post = await fetch('https://zernio.com/api/v1/posts', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/posts.md (reported line 90)May include surrounding context.

Create Post

typescript
const post = await fetch('https://zernio.com/api/v1/posts', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The examples demonstrate live, state-changing operations that publish or retry social media posts immediately, but they do not warn that these calls have real-world external effects. In an agent skill context, this increases the risk that an automated system or developer copies the example into production-like flows and triggers unintended posts, retries, or duplicate content on external platforms.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file documents queue-management endpoints, including a DELETE operation and slot configuration that controls automatic publishing, but provides no user-facing warning about the impact on scheduled content or publishing behavior. Under the markdown-specific warning rule, descriptions that affect user data or system behavior should disclose those risks clearly.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/queue.md (reported line 17)May include surrounding context.

Add Post to Queue

bash
curl -X POST https://zernio.com/api/v1/posts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The example code issues a POST to create a post with publishNow: true, which triggers an immediate external action against connected social media accounts. In an SDK/reference skill, this is dangerous because users may copy-paste the sample verbatim and unintentionally publish real content, especially since the example does not warn that it performs a live side effect.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file documents media download and transcript tooling that materially exceeds the skill's stated scope of being an API reference for social media scheduling. Scope expansion is security-relevant because an agent or developer relying on the manifest may unknowingly invoke data-acquisition features that collect or transmit third-party content, increasing privacy, compliance, and misuse risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documented download endpoints enable retrieval of media from multiple third-party platforms, which is not justified by a scheduling-focused skill description. In an agent setting, undocumented expansion into content downloading can facilitate unauthorized collection, copyright/privacy issues, or unexpected external data flows under the guise of scheduling support.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The documentation presents media download and transcript retrieval endpoints as routine operations without warning that user-supplied URLs, hashtags, and referenced third-party content are transmitted to Zernio systems. Missing privacy and data-transmission disclosures can cause developers or agents to send regulated, sensitive, or copyrighted content externally without informed consent or policy checks.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/tools.md (reported line 45)May include surrounding context.

Hashtag Checker

bash
curl -X POST https://zernio.com/api/v1/tools/instagram/hashtag-checker \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"hashtags": ["travel", "photography", "banned123"]}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This is a markdown file, so SQP-2 applies to omissions in user-facing warnings. The document explains webhook setup and management, including DELETE operations and sending event data such as messages and account status to external URLs, but it does not warn that webhook payloads may contain user or system data or that deletion/testing can affect integrations.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · rules/webhooks.md (reported line 17)May include surrounding context.

Configure Webhooks

bash
curl -X POST https://zernio.com/api/v1/webhooks/settings \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

This markdown file includes executable curl examples that require an Authorization bearer token and create a post with publishNow: true, but it does not provide any warning about protecting API keys or the fact that the example can publish content immediately to connected social accounts. For markdown files, omissions of warnings about actions affecting privacy, user data, or system integrity should be flagged.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

This markdown file includes curl examples that transmit an API key in an Authorization header and query account-specific analytics, but it does not warn users about protecting credentials or the sensitivity of account/profile analytics data. Under the markdown-specific warning criterion, documentation should disclose privacy or system-impacting behavior when user data or credentials are involved.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

YouTube transcript retrieval is another capability mismatch relative to a scheduling-reference skill and can expose users to unanticipated ingestion of third-party content. While lower impact than bulk media download, it still broadens data access and may lead agents to collect transcripts without users understanding that external content is being fetched and processed.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.