Back to skill

Security audit

BNBot

Security checks for vulnerabilities and agentic risk

Overview

This skill is not clearly malicious, but it gives an agent broad browser-linked social account control with persistent local service setup and weak guardrails.

Review this before installing. Use it only if you are comfortable giving an external CLI and Chrome extension control over an authenticated Twitter/X session. Confirm every post, delete, follow, unfollow, scraping, article publish, and media upload action yourself, avoid passing sensitive local files, verify the npm package/version and Chrome extension provenance, and stop the local daemon when not actively using it.

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:9
Finding
Unpinned Third-Party Package Is Installed and Executed as a Background Daemon<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:9-15, 29-34`; duplicated in `README.md:9-15, 29-34` **Vulnerability Type**: Unpinned third-party executable dependency **Risk Level**: Medium ### Vulnerable Code ```yaml requires: bins: [bnbot-cli] install: - id: node kind: node package: bnbot-cli bins: [bnbot-cli] label: Install bnbot-cli (npm) ``` ```bash nohup bnbot serve > /tmp/bnbot.log 2>&1 & sleep 1 lsof -i :18900 -P 2>/dev/null | grep LISTEN ``` ### Technical Analysis The installation metadata requests `bnbot-cli` from npm without specifying an exact version or package-integrity digest. The instructions subsequently launch code supplied by that dependency as a persistent background process for the current host session. Because dependency resolution is not pinned to an audited artifact, the code installed at different times can differ from the version originally reviewed. A malicious or compromised future package release could therefore execute arbitrary commands under the account running the Skill. The daemon is also designed to communicate with a Chrome extension operating in an authenticated Twitter/X browser session. Consequently, compromise of the dependency could potentially affect both local resources available to the process and social-media operations exposed through that extension. The repository contains only documentation and no implementation of the npm package or extension, so their internal controls and actual network behavior could not be verified in this audit. ### Attack Path 1. An attacker compromises the npm publisher account, package distribution process, or another component responsible for publishing `bnbot-cli`. 2. The attacker publishes a malicious release under the expected package name. 3. A user installs the Skill after that release becomes the version selected by npm because no exact version or integrity digest is specified. 4. The setup instructions cause the user or agent to run `b ...[truncated 1200 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `bnbot-cli` to a reviewed, exact version rather than resolving the latest available package: ```yaml package: bnbot-cli@1.5.0 ``` 2. Verify the package with a trusted lockfile and npm integrity digest. Preserve and review the expected `integrity` value before installation. 3. Document the expected npm publisher, source repository, release commit, and package hash so users can verify provenance. 4. Use automated dependency monitoring and require security review before updating the pinned version. 5. Do not automatically start the daemon immediately after installation. Request explicit user approval and display the executable path and version that will run. 6. Run the daemon with a restricted operating-system account or sandbox, minimal filesystem access, and constrained outbound network access. 7. Bind the WebSocket service only to the loopback interface and require authenticated, origin-validated connections between the daemon and extension. 8. Limit extension permissions and Twitter/X operations to those explicitly requested by the user. Require confirmation for posting, deleting, following, and transmitting local files. 9. Publish auditable source code for the CLI and extension or provide reproducible builds so the installed artifacts can be compared with reviewed source. 10. Add documented shutdown instructions and avoid presenting an indefinitely running background process as necessary when a short-lived process would suffice. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (15)

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The skill advertises itself as Twitter/X automation, but the README documents broader capabilities such as cross-platform content fetching and job search. This scope mismatch weakens informed consent and increases the chance an agent or user invokes higher-risk functions they did not expect, especially where external content retrieval or account actions are involved.

Session Persistence

Medium
Category
Rogue Agent
Content
After `bnbot-cli` is installed, start the WebSocket daemon:

```bash
nohup bnbot serve > /tmp/bnbot.log 2>&1 &
sleep 1
lsof -i :18900 -P 2>/dev/null | grep LISTEN
```
Confidence
86% confidence
Finding
The instructions recommend starting a long-lived background daemon with nohup on a local listening port, creating persistent agent-controlled browser automation beyond a single task. Persistent services increase exposure to unauthorized local access, stale sessions, and unintended reuse of an authenticated browser context.

Session Persistence

Medium
Category
Rogue Agent
Content
If empty, restart it:

```bash
nohup bnbot serve > /tmp/bnbot.log 2>&1 &
```

## How to use tools
Confidence
85% confidence
Finding
The restart guidance reinforces maintaining a persistent background service, normalizing continuous availability of a local automation endpoint. In the context of browser-mediated account access, this increases the risk of unintended actions through a lingering authenticated control channel.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The README describes scraping and media upload behavior without any privacy, consent, or data-handling warnings. Because the tool can collect content and upload local files or remote URLs, users and agents may unintentionally process sensitive data or violate platform and privacy expectations.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The README exposes destructive and account-affecting commands like delete, follow/unfollow, retweet, and posting without documenting confirmation, dry-run, or approval requirements. In an agent context, this can lead to accidental or unauthorized account actions that are hard to reverse and may cause reputational or operational harm.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
Fetching WeChat, TikTok, and Xiaohongshu content is outside the declared Twitter/X automation use case. This broadens data-ingestion and network interaction beyond user expectations, potentially exposing the environment to unreviewed third-party content flows and privacy issues.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
Job-search functionality is unrelated to the stated Twitter/X automation purpose, indicating unnecessary expansion of agent-accessible actions. Unjustified capability growth increases attack surface and makes it harder for operators to reason about what the skill may do on a user's behalf.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill is presented as Twitter/X automation, but its documented capabilities extend into unrelated content fetching, article publishing, and job search. This scope mismatch increases the chance that users or higher-level agents will grant the skill broader trust and permissions than justified, enabling unintended data access or actions outside the expected domain.

Missing User Warnings

Medium
Confidence
83% confidence
Finding
The documentation promotes scraping and content-fetching capabilities without any warning about privacy, sensitive data collection, retention, or terms-of-service implications. Because the skill operates through a logged-in browser session, scraped data may include personalized or private content, making the absence of data-handling guidance more dangerous.

Session Persistence

Medium
Category
Rogue Agent
Content
After `bnbot-cli` is installed, start the WebSocket daemon:

```bash
nohup bnbot serve > /tmp/bnbot.log 2>&1 &
sleep 1
lsof -i :18900 -P 2>/dev/null | grep LISTEN
```
Confidence
72% confidence
Finding
The instructions tell users to start a background daemon with nohup, creating persistent local service behavior on port 18900. While not inherently malicious, persistence expands the attack surface by leaving a long-lived control channel running beyond the immediate task, potentially exposing browser-linked automation to unintended local access or stale sessions.

Session Persistence

Medium
Category
Rogue Agent
Content
If empty, restart it:

```bash
nohup bnbot serve > /tmp/bnbot.log 2>&1 &
```

## How to use tools
Confidence
72% confidence
Finding
Restart guidance again normalizes a persistent background service without discussing shutdown, authentication, or local exposure. In the context of a browser-automation skill tied to a user session, an always-on daemon increases the chance of unauthorized or unintended actions if other local processes can reach the service.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill exposes destructive and state-changing account actions such as unfollow, unbookmark, delete-tweet, and other engagement operations without documenting any confirmation or warning requirements. In an agent-driven environment, that omission materially increases the risk of accidental account manipulation, irreversible deletions, or abuse through prompt injection or user misunderstanding.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
Cross-platform content fetching from WeChat, TikTok, and Xiaohongshu is not aligned with the stated Twitter/X automation purpose, creating unnecessary capability expansion. In an agent setting, this can expose users to unexpected retrieval of third-party content, possible local file writes, and broader browsing/data-handling than the skill description suggests.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
Article authoring and publishing functions substantially exceed the declared Twitter/X automation scope and introduce the ability to create and publish longer-form content. That broadens the action surface from social posting into content production workflows, which may surprise users and allow an agent to perform more impactful publishing actions than expected.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
Job-search functionality is unrelated to Twitter/X automation and signals unnecessary privilege and feature expansion. In practice, this can cause users or orchestrating agents to trust the skill for one purpose while it performs unrelated searches or accesses external workflows not implied by its manifest.

Static analysis

No suspicious patterns detected.