Back to skill

Security audit

SocialKit Social Analytics

Security checks for vulnerabilities and agentic risk

Overview

Review is needed because Google Business reporting automatically collects broader business activity than the promised post-engagement metrics.

Use a dedicated posts folder and protect the generated reports. Before using Google Business analytics, request an explicit opt-in and a separately labeled location report; the current behavior collects broader business activity automatically and can misrepresent it as individual post performance. Existing social sign-ins are used. The separate core dependency and live API behavior were not assessed.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Incomplete referenced artifact analysis

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
2. Run `node scripts/analytics.mjs --root <folder>`. It writes `report.md` and `report.json`.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/analytics.mjs (reported line 497)May include surrounding context.

js
function defaultHint(error) {
  switch (error.code) {
    case 190:
      return "The access token is expired or invalid. Re-run the auth script for this platform.";
    case 4:
    case 17:
    case 32:

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/analytics.mjs (reported line 2416)May include surrounding context.

js
onError: (status, body) => new PlatformError(
      `MASTODON_${status}`,
      String(body.error ?? `Mastodon API error ${status}`),
      status === 401 || status === 403 ? "The access token is invalid or lacks write:statuses / write:media." : void 0
    )
  });
}

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, network, shell.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

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 · scripts/analytics.mjs (reported line 1578)May include surrounding context.

js
return v;
}
function apiBase(env) {
  return env[PIN_ENV.sandbox] === "1" ? "https://api-sandbox.pinterest.com/v5" : "https://api.pinterest.com/v5";
}
function basic(env) {
  return {

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 · scripts/analytics.mjs (reported line 1602)May include surrounding context.

js
"pinterest",
      async (t) => toToken2(
        await postForm(
          "https://api.pinterest.com/v5/oauth/token",
          { grant_type: "refresh_token", refresh_token: t.refreshToken },
          basic(env)
        ),

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 · scripts/analytics.mjs (reported line 1953)May include surrounding context.

js
async function call(token, method, body, fetchImpl) {
  const isForm = body instanceof FormData;
  const res = await fetchWithRetry(
    `https://api.telegram.org/bot${token}/${method}`,
    {
      method: "POST",
      body: isForm ? body : JSON.stringify(body),

Google Business analytics collects location-wide activity instead of engagement for the user's published posts.

Medium
Category
Excessive Agency
Confidence
97% confidence
Finding

The Google Business metrics implementation retrieves 30 days of location-wide impressions, website clicks, calls, and direction requests rather than engagement attributable to the recorded post. This exceeds the skill's stated post-engagement scope and writes broader business activity into the report without an explicit opt-in; repeating those totals for each post also makes the report misleading. Existing API authorization limits which locations are accessible, but does not establish consent for this broader collection.

Content

No source excerpt is available for this finding.