Back to skill

Security audit

Agent Relay Orchestrator

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be an agent-orchestration helper, but it asks users to run mutable external code that controls Claude sessions, stores context, and uses external integrations without enough disclosure.

Review before installing. Run the orchestrator only from a pinned, audited commit or release, use a dedicated low-privilege environment, provide a least-privilege Notion token, keep the HTTP API bound to localhost with access controls, and avoid sending secrets or proprietary code unless you understand what is persisted and what is synced to Notion or Telegram.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:16
Finding
Unpinned Third-Party Dependencies and Repository Code Are Installed and Executed<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:16-24` and `SKILL.md:38-44` **Vulnerability Type**: Unpinned and mutable supply-chain dependencies **Risk Level**: Medium ### Vulnerable Code ```yaml install: - kind: node package: "@notionhq/client" bins: [] - kind: node package: "agent-relay" bins: [] - kind: node package: "better-sqlite3" bins: [] ``` ```bash git clone https://github.com/TheAgentAcademy/agent-relay-orchestrator.git cd agent-relay-orchestrator npm install cp .env.example .env # Edit .env with your Notion credentials npm start ``` ### Technical Analysis The Skill declares three npm dependencies without exact versions and instructs users to clone and execute an external repository without pinning a reviewed commit or release. Consequently, the code installed and executed can change after this Skill has been audited. Running `npm install` may download mutable transitive dependencies and execute npm lifecycle scripts. Running `npm start` then executes the fetched repository with the permissions of the invoking user. The external repository, its lockfile, lifecycle scripts, and runtime implementation were not included in the audited project, so their behavior could not be verified. This is a supply-chain weakness rather than evidence that the named packages or repository are currently malicious. ### Attack Path 1. An attacker compromises the external repository, an npm package publisher, or a transitive dependency. 2. The attacker publishes or commits a modified payload while retaining the expected package or repository identity. 3. A user follows the documented setup instructions or permits the Skill framework to install the declared dependencies. 4. `npm install` retrieves the mutable dependency version and may execute attacker-controlled lifecycle scripts. 5. `npm start` executes the downloaded application code under the invoking user's account. 6. The malicious code can access resources avai ...[truncated 779 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin every npm dependency to an exact reviewed version rather than relying on mutable version resolution. 2. Include and verify a lockfile, and use `npm ci` instead of `npm install` for reproducible installations. 3. Pin the external repository to a specific reviewed commit hash or cryptographically signed release. 4. Publish and verify checksums or signatures for downloaded source archives and release artifacts. 5. Use `npm ci --ignore-scripts` where lifecycle scripts are unnecessary. If scripts are required, review and explicitly allow each one. 6. Audit all direct and transitive dependencies using tools such as `npm audit`, an SBOM scanner, and package provenance verification. 7. Run the orchestrator under a dedicated low-privilege account or sandbox with restricted filesystem and network access. 8. Provide secrets only at runtime, scope the Notion token to the minimum required permissions, and avoid exposing unrelated credentials to the process. 9. Vendor or bundle the reviewed implementation with the Skill when feasible so the audited artifact corresponds to the code that will execute. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Credential Access

High
Category
Privilege Escalation
Content
git clone https://github.com/TheAgentAcademy/agent-relay-orchestrator.git
cd agent-relay-orchestrator
npm install
cp .env.example .env
# Edit .env with your Notion credentials
npm start
```
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
git clone https://github.com/TheAgentAcademy/agent-relay-orchestrator.git
cd agent-relay-orchestrator
npm install
cp .env.example .env
# Edit .env with your Notion credentials
npm start
```
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The metadata and setup require Notion credentials and describe visibility through an external service, but the skill does not warn that user prompts, worker outputs, or metadata may be transmitted to Notion or other third-party integrations. In this context, the omission is security-relevant because users may assume orchestration is local-only while sensitive agent data is actually shared externally.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill documents local HTTP endpoints that expose worker state, events, sessions, and metadata, and also describes persistence and auto-resume, but it does not warn users that sensitive prompts, outputs, and operational metadata may be retrievable through those endpoints or retained across restarts. In an agent orchestration context, these records can contain proprietary code, secrets, or system instructions, so omission of this warning meaningfully increases the risk of unintended disclosure.

External Transmission

Medium
Category
Data Exfiltration
Content
### Health Check

```bash
curl http://localhost:3890/health
```

Returns service status, active workers, and ticker state.
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The manifest and top-level documentation consistently position the skill around Claude Code orchestration with Notion visibility, but the documented API section exposes a "Toggle Telegram Ticker" capability instead. This is not merely omitted detail: it names and documents a different integration target than the stated Notion visibility purpose, creating an active intent/documentation contradiction.

Static analysis

No suspicious patterns detected.