Back to skill

Security audit

Avbuzz

Security checks for vulnerabilities and agentic risk

Overview

The basic FANZA query skill is disclosed, but the optional bot setup asks users to run mutable external code persistently, including as root with messaging tokens.

Use the on-demand curl examples only if you are comfortable querying an unofficial adult-content FANZA endpoint. Treat the Discord/Telegram bot section as a separate unreviewed application: do not run it as root, do not enable a systemd service without a dedicated locked-down user, avoid putting tokens in command URLs or committed config files, and pin/review the cloned code and dependencies before starting it.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T06 · System Persistence

Error
Location
SKILL.md:352
Finding
Root-Level Persistent Execution Through a System-Wide Service<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 352–376 **Vulnerability Type**: Root-level service persistence **Risk Level**: Critical ### Vulnerable Code ```bash ssh root@your-vps.com git clone https://github.com/zxcnny930/avbuzz.git /root/avbuzz cd /root/avbuzz && npm install cp config.example.json config.json && nano config.json ``` ```ini [Unit] Description=AVBUZZ Discord Bot After=network.target [Service] Type=simple WorkingDirectory=/root/avbuzz ExecStart=/usr/bin/node src/index.js Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` ```bash systemctl daemon-reload && systemctl enable avbuzz && systemctl start avbuzz journalctl -u avbuzz -f # View logs ``` ### Technical Analysis The deployment instructions direct the user to connect as `root`, install the application under `/root`, and register it as a system-wide systemd service. No `User=` or `Group=` directive is present, so the service inherits root privileges. The combination of `WantedBy=multi-user.target`, `systemctl enable`, and `Restart=always` causes the downloaded Node.js application to start after reboot and restart indefinitely after failures. This creates cross-session persistence for code obtained from an external repository. Persistent execution is relevant to the optional notification feature, but root privileges are not necessary for querying FANZA, sending Discord or Telegram messages, or running scheduled notification logic. The deployment therefore exceeds the minimum privileges required by both the primary on-demand functionality and the optional bot functionality. ### Attack Path 1. An attacker compromises the referenced GitHub repository, its maintainer account, or one of the installed npm dependencies. 2. A user follows the documented instructions while logged in as root. 3. `git clone` retrieves attacker-controlled application code into `/root/avbuzz`. 4. `npm install` may execute dependency lifecycle scripts with root privi ...[truncated 830 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Create a dedicated system account with no interactive shell: ```bash sudo useradd --system --home /opt/avbuzz --shell /usr/sbin/nologin avbuzz ``` 2. Install the application under `/opt/avbuzz` or another restricted application directory rather than `/root`. 3. Set ownership exclusively to the service account and prevent unauthorized modification. 4. Add `User=avbuzz` and `Group=avbuzz` to the service definition. 5. Apply systemd hardening controls such as: ```ini NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ProtectKernelTunables=true ProtectKernelModules=true ProtectControlGroups=true RestrictSUIDSGID=true CapabilityBoundingSet= AmbientCapabilities= ``` 6. Grant write access only to narrowly scoped state directories through `StateDirectory=` or `ReadWritePaths=`. 7. Require explicit user confirmation before enabling boot persistence. Running the bot interactively should be the default deployment mode. 8. Include complete removal instructions covering service disablement, service-file deletion, daemon reload, application deletion, and credential revocation. 9. Do not execute `npm install` or application processes as root. ]]>

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:280
Finding
Unpinned Remote Application and Dependency Retrieval Followed by Execution<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 280–284; repeated in lines 353–354 **Vulnerability Type**: Mutable remote payload retrieval and unsafe dependency installation **Risk Level**: High ### Vulnerable Code ```bash git clone https://github.com/zxcnny930/avbuzz.git cd avbuzz npm install cp config.example.json config.json # Edit with your tokens npm start ``` The privileged deployment path repeats the same pattern: ```bash git clone https://github.com/zxcnny930/avbuzz.git /root/avbuzz cd /root/avbuzz && npm install ``` ### Technical Analysis The audited artifact contains only `SKILL.md` and `package.json`; it does not contain the bot implementation or a lockfile for the externally cloned project. The instructions clone the current state of a mutable repository without pinning a reviewed commit, tag, signed release, or checksum. They then install its npm dependency tree and execute the resulting application. Consequently, the payload that executes can change after this Skill has been reviewed. Moreover, `npm install` can execute package lifecycle scripts. The artifact provides no means to verify the behavior of those scripts or the bot code that receives Discord and Telegram credentials. This network behavior is not the ordinary FANZA GraphQL request required by the declared query function. It is a separate code-retrieval and execution workflow for the optional bot deployment. ### Attack Path 1. An attacker compromises the upstream GitHub repository, publishes an unsafe update, or compromises a transitive npm dependency. 2. The user runs the documented `git clone` command at a later time and receives content different from what was originally reviewed. 3. `npm install` resolves and installs dependencies and may execute malicious lifecycle scripts. 4. `npm start` executes the externally retrieved application. 5. In the documented VPS workflow, the installation occurs as root and the application is subsequently registered ...[truncated 736 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Include the complete bot source and dependency lockfile in the audited artifact rather than retrieving an unreviewed implementation at deployment time. 2. Pin installation instructions to a specific reviewed commit or immutable signed release. 3. Publish and verify cryptographic checksums or signed release attestations before installation. 4. Use `npm ci` with a committed lockfile so dependency resolution is reproducible. 5. Review all direct and transitive dependencies and remove unnecessary packages. 6. Disable npm lifecycle scripts during initial installation with `npm ci --ignore-scripts` where the application permits it. Explicitly review any scripts that must subsequently be run. 7. Perform source retrieval and dependency installation as an unprivileged application account, never as root. 8. Store Discord and Telegram tokens in a restricted environment file or secret manager rather than a general application configuration file. 9. Restrict credential-file permissions to the dedicated service account and document immediate token rotation if compromise is suspected. 10. Separate the basic on-demand query Skill from the optional persistent bot deployment so users do not need to trust or install unrelated executable code. ]]>
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
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (18)

Instruction Override

High
Category
Prompt Injection
Content
1. Create app at [discord.com/developers](https://discord.com/developers/applications) → **Bot** tab → **Add Bot** → copy Token
2. **OAuth2** → **URL Generator** → scopes: `bot` → permissions: `Send Messages`, `Embed Links` → invite bot
3. Right-click server → **Copy Server ID** (enable Developer Mode first)
4. Right-click channel → **Copy Channel ID**

### Telegram Setup (Optional)
Confidence
70% confidence
Finding
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
---
name: avbuzz
description: Query AV new releases, rankings, and actress info from FANZA GraphQL API. No authentication required. Supports direct curl queries and optional Discord/Telegram bot deployment.
version: 1.1.0
user-invocable: true
metadata:
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## API Overview

**Endpoint:** `POST https://api.video.dmm.co.jp/graphql`

**Authentication:** None (public API)
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
Search by actress name, title, video code, or any keyword:

```bash
curl -s -X POST https://api.video.dmm.co.jp/graphql \
  -H "Content-Type: application/json" \
  -d '{"query":"{ legacySearchPPV(limit: 10, offset: 0, sort: SALES_RANK_SCORE, floor: AV, queryWord: \"蒼井空\") { result { contents { id title deliveryStartAt contentType maker { name } actresses { id name } packageImage { largeUrl } review { average count } bookmarkCount } pageInfo { totalCount } } } }"}'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill is presented as a simple unauthenticated query tool, but it also includes instructions for deploying a persistent Discord/Telegram bot with scheduled notifications and tracking. That expands the trust boundary from on-demand local API calls to long-running external integrations that can continuously transmit content and metadata, which is materially different from the stated scope.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The documentation says the skill only supports on-demand queries and cannot autonomously push notifications, then immediately directs users to deploy a bot that performs scheduled digests and alerts. This contradiction can mislead reviewers and users about autonomy, persistence, and external transmission behavior.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The instructions tell users to place Discord and Telegram bot tokens directly into a local config file without emphasizing credential sensitivity, storage hygiene, or access controls. Exposed bot tokens can allow unauthorized control of messaging integrations, message exfiltration, impersonation, or spam from the victim's accounts.

External Transmission

Medium
Category
Data Exfiltration
Content
### Telegram Setup (Optional)

1. Message `@BotFather` on Telegram → `/newbot` → copy Token
2. Send a message, then visit `https://api.telegram.org/bot<TOKEN>/getUpdates` → find `chat.id`
3. Leave both fields empty to run Discord-only

### Discord Slash Commands
Confidence
86% confidence
Finding
The Telegram setup instructs users to place a bot token directly into a URL when calling `getUpdates`. Tokens embedded in shell history, browser history, logs, screenshots, or shared terminals are easily leaked and can grant full bot control to an attacker.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
VPS and systemd deployment steps introduce remote administration and persistent-service behavior that are unnecessary for a local query skill. This can normalize running a long-lived networked process as root on a server, increasing operational and security risk beyond the skill's advertised purpose.

Session Persistence

Medium
Category
Rogue Agent
Content
```

```bash
systemctl daemon-reload && systemctl enable avbuzz && systemctl start avbuzz
journalctl -u avbuzz -f  # View logs
```
Confidence
89% confidence
Finding
The `systemctl enable` guidance explicitly configures the service to persist and auto-start, turning a simple skill-adjacent utility into a long-running background process. Persistence increases exposure to secret leakage, unintended ongoing external communication, and abuse if the deployed bot or host is compromised.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The manifest requests both shell execution and the curl binary for a skill whose stated purpose is simple querying of a public GraphQL API. Granting exec enables arbitrary command execution beyond the minimum needed for the advertised functionality, which increases the blast radius if the skill content, parameters, or downstream prompts are manipulated into constructing unsafe shell commands.

Static analysis

No suspicious patterns detected.