Back to skill

Security audit

Instagram API

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does the advertised Instagram API lookups, but it handles the JustOneAPI token in ways that can expose it and under-discloses some data/privacy scope.

Review before installing. Use a narrowly scoped, revocable JustOneAPI token, avoid running this on shared or heavily logged systems, and assume queried Instagram identifiers plus the token may appear in service or infrastructure logs. Handle returned profile, post, and media data according to your privacy and authorization obligations.

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
bin/run.mjs:325
Finding

API Token Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
" --token "$JUST_ONE_API_TOKEN" --params-json '{"key":"value"}' ``` The helper copies that command-line value into the request parameters: ```javascript function injectToken(operation, params, cliToken) { const tokenParam = operation.parameters.find((parameter) => parameter.name === "token"); if (!tokenParam || params.token !== undefined) { return; } if (!cliToken) { fail("--token is required for this operation.", { operationId: operation.operationId, }); } params.token = cliToken; } ``` All query parameters, including `token`, are then appended to the URL: ```javascript function applyQueryParams(operation, params, url) { for (const parameter of operation.parameters.filter((item) => item.location === "query")) { const value = params[parameter.name]; if (value === undefined) { continue; } appendValue(url.searchParams, parameter.name, value); } } function appendValue(searchParams, name, value) { if (Array.isArray(value)) { for (const item of value) { appendValue(searchParams, name, item); } return; } if (value && typeof value === "object") { searchParams.append(name, JSON.stringify(value)); return; } searchParams.append(name, String(value)); } ``` The resulting URL is sent to the external API: ```javascript const baseUrl = manifest.baseUrl; const url = new URL(operation.path, ensureBaseUrl(baseUrl)); applyPathParams(operation, params, url); applyQueryParams(operation, params, url); const requestInit = { headers: { "accept": "application/json", }, me ...[truncated 2646 chars]
Remediation
View remediation
" \ --params-json '{"key":"value"}' ``` Prefer secret injection by the execution environment over inline shell assignment where available. 5. If the upstream service strictly requires query-string authentication: - Clearly disclose the residual URL-logging risk. - Ensure clients, gateways, proxies, tracing systems, and server logs redact the `token` parameter. - Never include the complete request URL in errors or diagnostics. - Use short-lived, narrowly scoped, and readily revocable tokens. - Rotate the token after suspected process-list or log exposure. 6. Prevent callers from overriding authentication through `params.token`; authentication should come exclusively from the trusted environment-variable path. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (26)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

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

md
- Get a token from [Just One API Dashboard](https://dashboard.justoneapi.com/en/login?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_instagram&utm_content=project_link).
- Authentication details: [Just One API Usage Guide](https://docs.justoneapi.com/en/?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_instagram&utm_content=project_link).

## Output Rules

- Start with a plain-language answer tied to the Instagram task the user asked for.
- Include the most decision-relevant fields from the selected endpoint before dumping raw 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 · bin/run.mjs (reported line 20)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · bin/run.mjs (reported line 57)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · bin/run.mjs (reported line 94)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · bin/run.mjs (reported line 140)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · bin/run.mjs (reported line 186)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · generated/operations.json (reported line 14)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · generated/operations.json (reported line 51)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · generated/operations.json (reported line 88)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · generated/operations.json (reported line 134)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

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 · generated/operations.json (reported line 180)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API service.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

Requiring an access token as a query parameter creates a credential exposure risk because secrets in URLs are frequently captured by logs, reverse proxies, monitoring tools, and referrer propagation. In a skill context that interacts with external Instagram-related endpoints, this increases the chance that user-supplied API credentials are mishandled or leaked outside the intended trust boundary.

Content

Scanner excerpt · generated/operations.md (reported line 17)May include surrounding context.

md
| Name | In | Required | Type | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `token` | `query` | yes | `string` | n/a | Access token for the API service. |
| `code` | `query` | yes | `string` | n/a | The unique shortcode (slug) for the Instagram post (e.g., 'DRhvwVLAHAG'). |

### Request body

Credential Access

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

This operation also places the access token in the query string, creating the same credential leakage vector through URL logging and observability tooling. Because the skill is designed for repeated account lookups, exposure could affect many requests and increase the blast radius of a leaked token.

Content

Scanner excerpt · generated/operations.md (reported line 40)May include surrounding context.

md
| Name | In | Required | Type | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `token` | `query` | yes | `string` | n/a | Access token for the API service. |
| `username` | `query` | yes | `string` | n/a | The Instagram username whose profile details are to be retrieved. |

### Request body

Credential Access

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

The token is again transmitted in the query string for a paginated endpoint, meaning repeated requests may replicate the secret across multiple logged URLs and systems. Pagination increases operational frequency, which raises the probability of accidental disclosure and long-term persistence in logs.

Content

Scanner excerpt · generated/operations.md (reported line 63)May include surrounding context.

md
| Name | In | Required | Type | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `token` | `query` | yes | `string` | n/a | Access token for the API service. |
| `username` | `query` | yes | `string` | n/a | The Instagram username whose published posts are to be retrieved. |
| `paginationToken` | `query` | no | `string` | n/a | Token used for retrieving the next page of results. |

Credential Access

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

Supplying the access token in the URL for hashtag search exposes credentials to routine infrastructure and telemetry components that process request URIs. Since search operations may be used broadly and frequently, the skill context makes this more dangerous by encouraging high-volume use that multiplies leakage opportunities.

Content

Scanner excerpt · generated/operations.md (reported line 87)May include surrounding context.

md
| Name | In | Required | Type | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `token` | `query` | yes | `string` | n/a | Access token for the API service. |
| `hashtag` | `query` | yes | `string` | n/a | The hashtag or keyword to search for. |
| `endCursor` | `query` | no | `string` | n/a | Cursor used for retrieving the next page of results. |

Credential Access

High
Category
Privilege Escalation
Confidence
98% confidence
Finding

This reels search endpoint repeats the same insecure credential handling pattern by embedding the access token in the query string. If leaked, an attacker could reuse the token to access the API service, and the search-oriented workflow may cause widespread token exposure across debugging, logging, and third-party monitoring paths.

Content

Scanner excerpt · generated/operations.md (reported line 111)May include surrounding context.

md
| Name | In | Required | Type | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `token` | `query` | yes | `string` | n/a | Access token for the API service. |
| `keyword` | `query` | yes | `string` | n/a | The search keyword or hashtag to filter Reels. |
| `paginationToken` | `query` | no | `string` | n/a | Token used for retrieving the next page of results. |

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill invokes a Node helper to make authenticated external API requests, but the manifest does not declare any explicit tool scope or allowed-tools restrictions. This increases the chance that an agent can use broader-than-necessary code/network capabilities without clear sandbox expectations or user-visible permission boundaries.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The skill is designed to retrieve Instagram profile, post, and reels data, which can include personal or sensitive behavioral information, but it does not warn users about privacy implications or appropriate handling. This omission can lead to collection, sharing, or retention of personal data without adequate user awareness or safeguards.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest says the skill analyzes Instagram workflows including user Profile, post Details, and user Published Posts across 5 operations, which implies those named areas define the scope. However, the code also exposes two additional operations for hashtag post search and reels search, expanding the skill beyond the described functionality.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill sends the API access token as a URL query parameter, which is then placed into the full request URL. Query-string credentials are more likely to be exposed through logs, proxies, browser/history tooling, analytics, and upstream infrastructure, increasing the chance of credential leakage even when HTTPS is used.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The top-level description claims the skill covers only profile lookup, post details, and user published posts, but the manifest also exposes hashtag search and reels search operations. This mismatch can mislead users about the skill's actual data collection and querying behavior, reducing informed consent and making unexpected third-party data transmission more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The API token is transmitted as a query parameter, which is commonly captured in logs, browser history, proxy telemetry, referrer data, and monitoring systems even when HTTPS is used. Putting credentials in the URL materially increases the chance of token disclosure and subsequent unauthorized use of the upstream API account.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The operation description explicitly mentions archiving post content and media assets, which can affect user data handling and privacy expectations. The markdown does not include any caution about storing retrieved media/content, retention practices, or ensuring authorization to archive such data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The API requires an access token in the query string, but the documentation provides no warning about the security risks of placing credentials in URLs. Query parameters are commonly exposed in logs, browser history, analytics, proxies, and monitoring systems, making accidental credential disclosure much more likely.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest description limits the skill's scope to user Profile, post Details, and user Published Posts across 5 operations. However, the operations file also exposes hashtag post search and reels search endpoints, which expand the functionality beyond the three declared workflow categories.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.