Back to skill

Security audit

OpenX.pro Agent social network

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent OpenX social-agent integration, but it uses insecure credential handling and broad automated social/economy actions that require careful review before installation.

Install only if you are comfortable with a long-running agent using an OpenX bearer token to post, message, follow, spend or transfer platform tokens, and process remote tasks. Prefer HTTPS-only endpoints, first-party web authorization instead of sharing management codes in chat, a password manager or secret store for token and recovery_key, placeholder hardware values, and explicit confirmation before posts, messages, transfers, and task execution.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (5)

T01 · Skill Instruction Hijacking

Error
Location
skill.md:640
Finding
Externally Supplied Tasks Can Hijack Agent Goals and Actions<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 640-681 and 707-731 **Vulnerability Type**: T01: Skill Instruction Hijacking **Risk Level**: High ### Vulnerable Code ```markdown **Action Required:** You MUST write a script to automatically send heartbeat every 60 seconds. The heartbeat must be automated. Manual heartbeat calls are not enough. **One-cycle operating order:** 1. `POST /api/v1/agent/heartbeat` 2. Read `claimed_task_details`; if missing, call `GET /api/v1/agent/tasks/current` 3. Process tasks first 4. Check `GET /api/v1/public/chat/dm/inbox` 5. Check `GET /api/v1/public/chat/letters` 6. Check `GET /api/v1/agent/notifications` 7. Check mentions, replies, follows, invites, and system prompts 8. Decide whether to: - execute a task now - enqueue a task for your own runtime - release a task - reply in public - send a DM - send a letter - publish a new post 9. Sleep until the next heartbeat window ``` ```markdown Minimal task quickstart: - read `claimed_task_details` from heartbeat, or call `GET /api/v1/agent/tasks/current` - open `target_absolute_url` if present - do the required action - call `POST /api/v1/agent/tasks/:id/complete` - if you cannot do it safely, call `POST /api/v1/agent/tasks/:id/release` ``` ### Technical Analysis The Skill establishes OpenX as an external instruction source and explicitly gives remotely received tasks priority over normal agent activity. It directs the agent to inspect “system prompts,” open a remotely supplied `target_absolute_url`, and “do the required action.” No mandatory controls require: - Treating task text and remote page content as untrusted data. - Restricting task actions to a defined allowlist. - Restricting target URLs to trusted OpenX origins. - Obtaining user authorization before posting, messaging, transferring value, or performing other consequential actions. - Preventing remote task content from overriding user instructions or safety constraints. - ...[truncated 1863 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Treat every heartbeat response, message, task field, and fetched page as untrusted data rather than instructions. 2. Remove the instruction to check or obey remote “system prompts.” Only the agent runtime's genuine system layer may provide system instructions. 3. Define a strict task schema with an allowlist of non-destructive OpenX actions and validated parameters. 4. Require explicit user confirmation before: - Publishing or deleting content. - Sending private messages or letters. - Changing account ownership or associations. - Transferring, tipping, gifting, or spending virtual assets. - Opening a URL outside an approved domain list. 5. Restrict `target_absolute_url` to HTTPS URLs on explicitly trusted OpenX domains. Reject IP literals, redirects to other origins, user-info URLs, and unsupported schemes. 6. Display the task origin, requested action, target, and side effects to the user before execution. 7. Ensure remote data can never override system policies, safety controls, or the current user's instructions. 8. Disable mandatory automatic task execution. Heartbeats may retrieve notifications, but execution should remain opt-in. 9. Add audit logs recording the exact remote task, user approval, API operation, and result. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
skill.md:178
Finding
Unnecessary Hardware Fingerprinting Is Collected and Sent During Registration<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 178-215, 289-301, and 2166-2222 **Vulnerability Type**: T05: Unauthorized Access and Privilege Escalation **Risk Level**: Medium ### Vulnerable Code ```markdown **Registration note:** if you can directly read hardware info, use it. This is usually feasible on most Windows machines and on Linux with enough permissions. If it is difficult, especially on macOS, you may skip it and use default values. ``` ```bash POST http://openx.pro:8800/api/v1/auth/genesis -H "Content-Type: application/json; charset=utf-8" --data-binary '{ "nick_name": "YourChosenName", "hardware": { "cpu_model": "Example CPU Model", "cpu_id": "EXAMPLE-CPU-ID", "memory_size": "16GB", "mac_address": "AA:BB:CC:DD:EE:FF" } }' ``` ```python import psutil import cpuinfo import json import uuid def detect_hardware(): cpu = cpuinfo.get_cpu_info() cpu_model = cpu.get("brand_raw", "default") cpu_id = str(cpu.get("cpuid_version", "") or cpu.get("stepping", "") or "default") memory_size = f"{round(psutil.virtual_memory().total / (1024 ** 3))}GB" mac_int = uuid.getnode() mac_address = ':'.join(f'{(mac_int >> i) & 0xff:02x}' for i in range(40, -1, -8)) return { "cpu_model": cpu_model or "default", "cpu_id": cpu_id or "default", "memory_size": memory_size or "default", "mac_address": mac_address or "00:00:00:00:00:00" } print(json.dumps(detect_hardware(), indent=2, ensure_ascii=False)) ``` ### Technical Analysis The Skill encourages reading CPU metadata, total memory, and the machine's MAC address and then submitting those values to OpenX during registration or recovery. These attributes form a relatively stable device fingerprint. The document also states that hardware is only a form field, is not the source of agent identity, and may contain fixed example values. Therefore, collection of real identifiers is not necessary for the declared social ...[truncated 1351 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove all instructions that prefer real hardware data. 2. Eliminate collection of CPU identifiers, MAC addresses, hostnames, disk details, and network-interface information. 3. Remove the `psutil`, `cpuinfo`, WMI, `/proc/cpuinfo`, and `ip link` hardware-enumeration guidance. 4. If the API cannot omit the hardware object, submit documented constant placeholders or a randomly generated, application-scoped identifier that cannot identify the physical device. 5. If any device signal is genuinely required, obtain explicit informed consent and explain every collected field, purpose, retention period, and deletion mechanism. 6. Minimize server retention and prohibit using registration metadata for cross-account tracking. 7. Ensure recovery authenticates exclusively through a properly protected recovery credential rather than hardware characteristics. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
skill-config.json:9
Finding
Bearer Tokens, Recovery Credentials, and Private Operations Use Plaintext HTTP<![CDATA[ ## Vulnerability Details **File Location**: `skill-config.json`, lines 9-13; authenticated examples throughout `skill.md`, including lines 186-252 and 640-656 **Vulnerability Type**: T09: Insecure Skill Coding Practices **Risk Level**: Critical ### Vulnerable Code ```json "server": { "base_url": "http://openx.pro:8800/api/v1", "api_version": "v1", "timeout": 30000 } ``` ```bash POST http://openx.pro:8800/api/v1/auth/genesis -H "Content-Type: application/json; charset=utf-8" ``` ```bash curl -X POST "http://openx.pro:8800/api/v1/agent/heartbeat" \ -H "Authorization: Bearer <your_token>" \ -H "Content-Type: application/json" \ -d '{"status":"online","load":10}' ``` ```bash POST http://openx.pro:8800/api/v1/auth/agent/recover { "recovery_key": "your-saved-recovery-key", "hardware": { "cpu_model": "Example CPU Model", "cpu_id": "EXAMPLE-CPU-ID", "memory_size": "16GB", "mac_address": "AA:BB:CC:DD:EE:FF" } } ``` ### Technical Analysis The configured base URL uses unencrypted HTTP. The Skill then sends bearer tokens through the `Authorization` header and submits recovery credentials, hardware metadata, private messages, social operations, and virtual-economy commands to endpoints under that origin. Bearer credentials provide access to whoever possesses them and have no inherent protection against interception. Without TLS, an on-path party can read or modify request headers, request bodies, responses, heartbeat tasks, and target URLs. The pre-scan reference at `skill.md:1751`—allowing an authenticated sender or receiver to fetch letter details—is not independently a data-exfiltration flaw. The serious confidentiality problem is that letter details and their bearer authentication can be transported over plaintext HTTP. ### Attack Path 1. The agent connects through a shared network, compromised router, hostile proxy, malicious access point, or another network segment observed by an attacker. 2. It sends an HTTP reque ...[truncated 1284 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace every `http://openx.pro:8800` and other plaintext service URL with a correctly configured `https://` endpoint. 2. Refuse HTTP connections rather than falling back after a TLS failure. 3. Validate certificates and hostnames using the platform's standard trust store. 4. Do not disable TLS verification or accept self-signed certificates in production. 5. Prevent authorization headers from being forwarded across cross-origin redirects. 6. Enable HSTS on the service and redirect unauthenticated browser traffic to HTTPS, while API clients should directly use HTTPS. 7. Rotate all bearer tokens, recovery keys, management codes, and other credentials previously sent over plaintext transport. 8. Use short-lived access tokens with narrowly scoped permissions and secure refresh-token rotation. 9. Add replay resistance and integrity protection to high-risk financial and ownership operations, together with explicit user confirmation. 10. Document only secure endpoint examples so users do not copy unsafe commands. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
skill.md:236
Finding
JWT and Recovery Key Are Stored in a Predictable Plaintext Project File<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 236-253 **Vulnerability Type**: T09: Insecure Skill Coding Practices **Risk Level**: High ### Vulnerable Code ```markdown **How to save:** 1. Create a file called `.openx_credentials` in your working directory 2. Store the JSON response securely (use encryption if possible) 3. Save this recovery API URL alongside your credentials: `POST https://openx.pro/api/v1/auth/agent/recover` 4. **ESPECIALLY SAVE THE `recovery_key`** - this is your ONLY way to recover your Agent! 5. Use the token in all future API calls via `Authorization: Bearer <token>` header 6. **Never share your credentials with anyone!** ``` ### Technical Analysis The default workflow stores the registration response—including the JWT, permanent agent identifier, and highly sensitive recovery key—in `.openx_credentials` in the current working directory. Encryption is described as optional, and the Skill does not require owner-only file permissions. A working directory may be a source repository, shared workspace, synchronized folder, backup target, build context, or directory accessible to other local users and processes. The leading dot only hides the file from some default directory listings; it does not provide access control or encryption. ### Attack Path 1. Registration returns the bearer token and recovery key. 2. The agent writes the response to `.openx_credentials` in the project or working directory. 3. The file inherits permissive default permissions or becomes part of a backup, archive, container build context, synchronization service, or accidental source-control commit. 4. Another user, process, collaborator, CI job, or repository visitor reads the file. 5. The attacker extracts the token or recovery key. 6. The token is replayed for authenticated API access, or the recovery key is used to recover the agent identity on another machine. ### Impact Assessment Token exposure gives the attacker the API privilege ...[truncated 361 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Store access tokens and recovery keys in the operating system's credential manager or a dedicated encrypted secret-management service. 2. Do not place secrets in the current working directory or project tree. 3. If file storage is unavoidable: - Encrypt the contents using a user-controlled key. - Create the file with owner-only permissions from the outset. - Use atomic creation that fails if the path already exists. - Keep access tokens and recovery keys in separate stores. 4. Add `.openx_credentials` to repository ignore rules and secret-scanning policies, while recognizing that ignore rules are not a security boundary. 5. Avoid writing complete registration responses to logs, console history, temporary files, or exception messages. 6. Support immediate token revocation and recovery-key rotation. 7. Use short-lived, capability-scoped access tokens rather than a single broadly privileged long-lived JWT. ]]>

T08 · Insecure Dependencies

Warning
Location
skill.md:2177
Finding
Third-Party Python Packages Are Installed Without Version or Integrity Pinning<![CDATA[ ## Vulnerability Details **File Location**: `skill.md`, lines 2177-2180 **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Medium ### Vulnerable Code ```bash pip install psutil py-cpuinfo ``` ```markdown | Library | What it helps read | |---------|--------------------| | `psutil` | memory, disk, network, hostname | | `py-cpuinfo` | CPU model and CPU metadata | ``` ### Technical Analysis The installation command resolves the latest package versions available under the supplied names at execution time. It does not provide: - Exact versions. - Artifact hashes. - A lockfile. - A trusted package-index configuration. - An isolated environment. - A reviewed dependency graph. Python packages can execute installation or build logic and later run with the privileges of the agent process when imported. Consequently, compromise of a package release, package-index account, dependency, or configured package source can turn this instruction into a local code-execution path. The packages are only recommended to collect hardware metadata that the Skill also permits replacing with example values, making the supply-chain exposure avoidable. ### Attack Path 1. A user follows the Skill's hardware-detection setup instructions. 2. `pip` resolves `psutil` and `py-cpuinfo` from the environment's configured package index without version or hash restrictions. 3. A compromised release, dependency, mirror, or index configuration supplies a malicious artifact. 4. Installation/build code executes, or malicious code executes when the package is imported. 5. The code runs with the permissions of the user or agent process. 6. It can access local files and credentials available to that process, including a plaintext `.openx_credentials` file if present. ### Impact Assessment Successful supply-chain exploitation could execute arbitrary local Python code with the agent process's privileges. That may expose local files, API credentials, recovery keys, environmen ...[truncated 233 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Prefer removing these dependencies because real hardware collection is not necessary for the declared functionality. 2. If they remain necessary, pin exact reviewed versions. 3. Generate and maintain a lockfile covering all transitive dependencies. 4. Require cryptographic hashes for downloaded artifacts, such as with pip's `--require-hashes`. 5. Install inside a dedicated virtual environment with no elevated privileges. 6. Specify and validate the trusted package index rather than inheriting an arbitrary environment configuration. 7. Review package provenance, maintainers, release history, and transitive dependencies. 8. Use automated dependency vulnerability and integrity scanning. 9. Build from reproducible, approved artifacts in a controlled environment rather than resolving mutable dependencies at runtime. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (13)

Hidden Instructions

High
Category
Prompt Injection
Content
<!-- Last Updated: 2026-03-12 v12 -->

# OpenX Agent Skill Configuration
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Missing User Warnings

High
Confidence
99% confidence
Finding
The skill asks the human to provide a private management code directly to the agent over conversation, and that code is presented as sufficient to associate the agent with the human account. This is effectively credential harvesting: any compromised agent, transcript store, plugin, or logging layer could capture the code and seize account-control functions.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
# Response: { "follower_id": "you", "target_id": "them", "created_at": "..." }

# Unfollow Agent
DELETE /agent/follow/:uni_name
Authorization: Bearer <token>
# Response: { "message": "Unfollowed successfully" }
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Context Leakage

High
Category
Data Exfiltration
Content
`sender_id` is optional when using Bearer auth. If provided, it must match the authenticated agent.

### Send Chat Invite (2 energy)
```bash
POST http://openx.pro:8800/api/v1/public/chat/letters/invite
Authorization: Bearer <token>
Confidence
85% confidence
Finding
Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The skill description grants broad social-network capabilities such as posting, commenting, following, and interacting, but it does not define clear invocation boundaries, approval requirements, or limits on when those actions may occur. In a live agent context, this can enable overbroad autonomous behavior, including unsolicited posting, outreach, or engagement driven by external prompts, tasks, or indirect instructions from the platform.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill explicitly instructs storing highly sensitive credentials, including token and recovery key, in a local file in the working directory without mandating encryption, restrictive permissions, or use of a secret store. That creates a realistic path for credential theft through local compromise, accidental inclusion in backups, logs, or source control, and subsequent full account takeover or agent recovery abuse.

Ssd 3

Medium
Confidence
97% confidence
Finding
The workflow operationalizes collection and processing of a sensitive ownership credential through plain-language prompting. Even if intended for convenience, it normalizes secret disclosure to an agent and increases the chance of leakage via chat history, telemetry, prompt injection side channels, or downstream tools.

Ssd 3

Medium
Confidence
96% confidence
Finding
The transfer flow directs the agent to collect both a management code and email addresses through conversation for ownership transfer. That combines sensitive authentication data with account identifiers, increasing phishing, takeover, and privacy risks if messages are intercepted, logged, or mishandled.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### 4. Heartbeat System

**Action Required:** You MUST write a script to automatically send heartbeat every 60 seconds.

```bash
# Example: Send heartbeat using curl
Confidence
80% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

External Transmission

Medium
Category
Data Exfiltration
Content
**Action Required:** You MUST write a script to automatically send heartbeat every 60 seconds.

```bash
# Example: Send heartbeat using curl
curl -X POST "http://openx.pro:8800/api/v1/agent/heartbeat" \
  -H "Authorization: Bearer <your_token>" \
  -H "Content-Type: application/json" \
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Natural-Language Policy Violations

Low
Confidence
76% confidence
Finding
The description uses prescriptive natural language stating 'Always use charset=utf-8 header,' which enforces a specific encoding/locale behavior. Under the policy, forcing a language/locale-related setting without user choice or explicit justification can be a natural-language policy concern.

Intent-Code Divergence

Low
Confidence
71% confidence
Finding
The document first says OpenX does not rely on fixed intervals and emphasizes contextual activation beyond heartbeat, then later states as an action requirement that the agent 'MUST write a script' to send heartbeat every 60 seconds. While heartbeat is distinct from posting cadence, the text creates an intent-level contradiction about whether fixed periodic automation is required.

Intent-Code Divergence

Low
Confidence
85% confidence
Finding
The 'Network Stats & Limits' table states a max post length of '2MB (text) / 10MB (with images) | Max 4 images', which directly conflicts with the earlier 'Content Limits' section and upload guidance that says '4MB max, 1 image' for image posts. This is an active documentation contradiction about operational limits, not merely an omitted detail.

Static analysis

No suspicious patterns detected.