Back to skill

Security audit

Seekdb

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its SeekDB install/build purpose, but several install paths use privileged, persistent system changes with unsafe verification or exposure choices that need review.

Review this skill carefully before installing. Prefer signed package repositories, pinned Docker digests bound to 127.0.0.1, verified MSI hashes/signatures, and separate confirmation before enabling services at boot or deleting SeekDB data. Avoid the yum remote-script path and the APT [trusted=yes] HTTP source unless you independently trust and verify the source.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (4)

T03 · Remote Payload Retrieval and Execution

Error
Location
install/references/linux-yum.md:28
Finding
Unverified Remote Installation Script Executed with Root Privileges<![CDATA[ ## Vulnerability Details **File Location**: `install/references/linux-yum.md:28-34` **Vulnerability Type**: Unverified remote payload execution as root **Risk Level**: Critical ### Vulnerable Code ```bash > **Security note:** The following command downloads and executes a remote script with root privileges. Review the script content before running, or prefer the yum repo method above. curl -fsSL https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/seekdb/seekdb_install.sh -o /tmp/seekdb_install.sh # Review the script before executing: less /tmp/seekdb_install.sh sudo bash /tmp/seekdb_install.sh ``` ### Technical Analysis The installation flow retrieves a mutable shell script from an external object-storage hostname and subsequently executes it through `sudo bash`. No cryptographic digest, detached signature, package signature, or expected signer identity is verified before execution. Opening the file with `less` does not provide a security boundary. It neither guarantees that the user performs a meaningful review nor detects a sophisticated malicious modification. The downloaded file also resides at a predictable path under `/tmp`, which is not as robust as creating a private temporary file using `mktemp`. Although installing a system database can legitimately require administrative privileges, granting root privileges to an unauthenticated remote script exceeds the minimum safe trust model for that task. ### Attack Path 1. An attacker compromises the object-storage account, the published script, or another part of the delivery infrastructure. 2. Alternatively, an attacker who can interfere with the trusted network or TLS environment redirects the request or alters the returned payload. 3. The Skill downloads the attacker-controlled script to `/tmp/seekdb_install.sh`. 4. The user or agent displays the script with `less`, but no automated integrity or signature validation occurs. 5. The Skill executes the payload ...[truncated 550 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the remote-script alternative and use a signed RPM repository as the default and preferred installation mechanism. 2. If the script must remain available: - Host it under an official, clearly controlled release domain. - Pin an immutable release version rather than a mutable path. - Publish its SHA-256 digest through an independently authenticated channel. - Verify the digest before execution and abort on any mismatch. - Prefer a detached signature and verify it against a pinned vendor signing key. 3. Create the temporary file with `mktemp`, set restrictive permissions, and delete it after use. 4. Do not automatically proceed from review to root execution. Obtain explicit confirmation after displaying the verified script and explain that it will execute with root privileges. 5. Where possible, replace the script with signed packages whose installation scripts are covered by RPM signature verification. ]]>

T08 · Insecure Dependencies

Error
Location
install/references/linux-apt.md:22
Finding
APT Repository Authentication Disabled over Plaintext HTTP<![CDATA[ ## Vulnerability Details **File Location**: `install/references/linux-apt.md:22-26` **Vulnerability Type**: Unauthenticated package repository and insecure transport **Risk Level**: Critical ### Vulnerable Code ```bash echo "deb [trusted=yes] http://mirrors.aliyun.com/oceanbase/community/stable/$(lsb_release -is | awk '{print tolower($0)}')/$(lsb_release -cs)/$(dpkg --print-architecture)/ ./" \ | sudo tee /etc/apt/sources.list.d/oceanbase.list sudo apt update sudo apt install seekdb ``` ### Technical Analysis The repository configuration combines two unsafe properties: - It uses plaintext HTTP, allowing repository metadata and packages to be observed or modified in transit. - It sets `[trusted=yes]`, instructing APT to treat packages from the repository as trusted without normal repository-signature authentication. Consequently, neither transport security nor APT's package-origin authentication protects the privileged installation. A malicious package may also contain maintainer scripts that execute automatically as root during installation. The command permanently adds the unsafe source to the system-wide APT configuration, so the exposure continues beyond the initial Skill execution and can affect later upgrades. ### Attack Path 1. A user selects the online APT installation method. 2. The Skill creates a system-wide repository entry using HTTP and `[trusted=yes]`. 3. An attacker controlling the mirror, a network gateway, DNS resolution, or another on-path position supplies modified repository metadata and a counterfeit `seekdb` package. 4. `apt update` accepts the unauthenticated repository metadata. 5. `apt install seekdb` accepts and installs the counterfeit package. 6. Malicious package maintainer scripts execute with root privileges during installation. 7. Because the repository entry remains under `/etc/apt/sources.list.d`, the attacker may also affect subsequent package updates. ### Impact Assessment Exploitation can result in ar ...[truncated 358 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `http://` with an official HTTPS repository endpoint. 2. Remove `[trusted=yes]` entirely. 3. Distribute a dedicated OceanBase/SeekDB repository signing key through an authenticated channel. 4. Store the dearmored key in a dedicated keyring, such as `/usr/share/keyrings/oceanbase-seekdb.gpg`. 5. Configure the source using a scoped signer: ```bash deb [signed-by=/usr/share/keyrings/oceanbase-seekdb.gpg] https://official.example/repository/ ... ``` 6. Verify and document the expected signing-key fingerprint before adding the repository. 7. Pin the expected repository origin and package version where operationally possible. 8. If a secure signed repository is unavailable, use an offline DEB whose vendor-published SHA-256 and package signature are verified before running `dpkg`. 9. Ask separately before enabling the SeekDB service at boot. Starting the service is sufficient for immediate verification; boot persistence is not required merely to complete installation. ]]>

T08 · Insecure Dependencies

Error
Location
install/references/windows-msi.md:25
Finding
Downloaded MSI Is Elevated without Digest or Publisher Verification<![CDATA[ ## Vulnerability Details **File Location**: `install/references/windows-msi.md:25, 51, 184-197` **Vulnerability Type**: Unverified privileged software installation **Risk Level**: High ### Vulnerable Code ```bash curl -fSL -o /tmp/seekdb.msi "https://mirrors.oceanbase.com/oceanbase/community/stable/windows/11/x86_64/seekdb-1.3.0.0-win64.msi" ``` The generated elevated batch file installs the downloaded MSI unattended: ```bat msiexec /i "%TEMP%\seekdb.msi" /qn /norestart WIXUI_EXITDIALOGOPTIONALCHECKBOX=0 ``` The launcher requests Administrator privileges and then executes the installation script: ```bash cat > /tmp/seekdb_elevate.vbs << 'VBS' Set wshShell = CreateObject("WScript.Shell") Set objShell = CreateObject("Shell.Application") tempDir = wshShell.ExpandEnvironmentStrings("%TEMP%") objShell.ShellExecute "cmd.exe", "/c """ & tempDir & "\seekdb_setup.bat""", "", "runas", 1 VBS cmd.exe //c "wscript.exe $(cygpath -w /tmp/seekdb_elevate.vbs)" ``` ### Technical Analysis The MSI is downloaded over HTTPS, but the flow does not verify a vendor-published cryptographic digest or validate that the MSI has a valid Authenticode signature from the expected publisher. HTTPS protects transport under normal conditions but does not provide artifact-level integrity against mirror compromise, incorrect uploads, signing infrastructure failures, or a compromised trust environment. The MSI is installed silently after a single UAC approval. An MSI can execute privileged custom actions, write system files, modify the registry, and register services. Therefore, an altered MSI would obtain Administrator-level execution without any subsequent user-visible review. The flow also configures the resulting SeekDB service for automatic startup. A server service is consistent with the declared deployment mode, but boot persistence is not necessary merely to install and verify the software and should be separately disclosed and consent-gated. ### Attack Path 1. An att ...[truncated 976 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Publish a SHA-256 digest for each MSI through an independently authenticated official release channel. 2. Before elevation, calculate the downloaded file's SHA-256 and require an exact match. 3. Validate the Authenticode signature before installation: - Require a valid signature. - Require the expected OceanBase/SeekDB publisher identity. - Reject expired, invalid, untrusted, or unexpected signatures. 4. Abort before showing the UAC prompt if any integrity or signature check fails. 5. Download to a securely created temporary directory with permissions restricted to the current user. 6. Display the verified version, hash, publisher, installation path, service registration, and auto-start behavior before requesting UAC approval. 7. Ask separately whether the service should start automatically at boot; default to manual startup when persistent operation was not explicitly requested. 8. The uninstall flow at `install/references/windows-msi.md:251` should require explicit confirmation and offer a backup before recursively deleting `C:\ProgramData\seekdb`, because it contains database data. ]]>

T08 · Insecure Dependencies

Error
Location
install/references/docker.md:18
Finding
Mutable Docker Image Publishes Unauthenticated Database Ports on All Interfaces<![CDATA[ ## Vulnerability Details **File Location**: `install/references/docker.md:18-23` **Vulnerability Type**: Unpinned container dependency and unintended network exposure **Risk Level**: High ### Vulnerable Code ```bash docker run -d \ --name seekdb \ -p 2881:2881 \ -p 2886:2886 \ oceanbase/seekdb:latest ``` ### Technical Analysis The container image uses the mutable `latest` tag instead of an immutable digest. The effective code executed by the installation can therefore change after the Skill has been reviewed. A compromised registry account or altered upstream image could cause future users to execute different code. The port mappings omit a host IP address. Docker normally interprets mappings such as `-p 2881:2881` as publication on all host interfaces, subject to the host's Docker and firewall configuration. This conflicts with the later documentation that presents the database endpoint as `127.0.0.1:2881`. The connection examples use the database `root` account without a password. If the image accepts such access over the published interface, remote systems able to reach the host may obtain database access. Port 2886 also exposes the HTTP/obshell interface. ### Attack Path Supply-chain path: 1. An attacker compromises the image publisher or registry repository. 2. The attacker replaces or moves `oceanbase/seekdb:latest` to a malicious image. 3. A user follows the Skill and pulls or runs the mutable tag. 4. Docker executes attacker-controlled container code with the container's granted runtime capabilities and network access. Network-exposure path: 1. The user launches the container with the documented port mappings. 2. Docker publishes ports 2881 and 2886 beyond loopback. 3. A remote attacker scans the host and connects to the exposed database or HTTP service. 4. If the default root account is unauthenticated or weakly protected, the attacker queries or modifies the database and may exploit any vulnerabilities exposed by those se ...[truncated 572 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the image by immutable digest: ```bash oceanbase/seekdb@sha256:<verified-digest> ``` 2. Publish the expected digest through an official authenticated release channel and verify it before deployment. 3. Bind services to loopback by default: ```bash -p 127.0.0.1:2881:2881 -p 127.0.0.1:2886:2886 ``` 4. Require explicit user consent before binding to non-loopback interfaces. 5. Configure strong database credentials and avoid an unauthenticated root account. 6. Do not publish the HTTP/obshell port unless the user specifically requires it. 7. Apply container hardening where compatible, including a non-root runtime user, dropped Linux capabilities, `no-new-privileges`, resource limits, and a read-only filesystem where possible. 8. Document the actual network binding and provide firewall guidance for intentionally remote deployments. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (39)

Missing User Warnings

High
Confidence
99% confidence
Finding
The APT source is added with `[trusted=yes]`, which disables normal package signature verification for that repository and grants broad trust to packages fetched from it. In an installation guide, this meaningfully increases supply-chain risk because a compromised mirror, network attacker on HTTP, or malicious package in that repo could be installed as root without cryptographic validation.

Chaining Abuse

High
Category
Tool Misuse
Content
- **Online install (recommended):**
```bash
echo "deb [trusted=yes] http://mirrors.aliyun.com/oceanbase/community/stable/$(lsb_release -is | awk '{print tolower($0)}')/$(lsb_release -cs)/$(dpkg --print-architecture)/ ./" \
  | sudo tee /etc/apt/sources.list.d/oceanbase.list
sudo apt update
sudo apt install seekdb
```
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Chaining Abuse

High
Category
Tool Misuse
Content
- MySQL port: `127.0.0.1:2881`
- Config file: `/etc/seekdb/seekdb.cnf`
- Service management: `sudo systemctl {start|stop|status} seekdb`
- Uninstall: `sudo apt remove seekdb && sudo bash /var/lib/seekdb/seekdb_clean.sh`

---
Confidence
92% confidence
Finding
The uninstall command chains package removal directly into execution of a root shell script, reducing user pause points and making destructive cleanup more likely to be run unintentionally. Combined with the lack of warnings about data deletion, this increases the chance of irreversible loss or execution of an opaque script with full privileges.

Chaining Abuse

High
Category
Tool Misuse
Content
- MySQL port: `127.0.0.1:2881`
- Config file: `/etc/seekdb/seekdb.cnf`
- Service management: `sudo systemctl {start|stop|status} seekdb`
- Uninstall: `sudo yum erase seekdb && sudo bash /var/lib/seekdb/seekdb_clean.sh`

---
Confidence
84% confidence
Finding
Chaining package erasure with immediate execution of a root cleanup script reduces the chance for users to pause and inspect what will run next. This increases the risk of accidental execution of unsafe cleanup logic and compounds the impact if the cleanup script is malicious or corrupted.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill includes an `--install` option that performs `adb install` on a connected Android device, which is a state-changing action on an external system. Although this is expected in a build/deploy workflow, the skill does not require explicit user confirmation or provide a warning that it will modify a connected device, increasing the risk of unintended installation to the wrong target.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly instructs the agent to actively run shell commands on the user's machine and verify outputs, but it does not provide an upfront warning or require explicit user consent before beginning environment inspection and installation actions. In an agent setting, this can lead to unauthorized system probing or package installation behavior that exceeds user expectations, especially when triggered from vague requests like 'install seekdb'.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
## Phase 1 — Detect environment

Run the following to understand the user's machine. Do this automatically without asking.

```bash
uname -s   # Darwin = macOS, Linux = Linux, MINGW64/MSYS/CYGWIN = Windows Git Bash
Confidence
97% confidence
Finding
The instruction to perform environment detection 'automatically without asking' delegates autonomous decision-making and action initiation to the agent without first obtaining consent. This is risky because the skill is designed not just to suggest commands but to execute them, creating a path for unapproved reconnaissance and follow-on installation actions on the host.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding
The Docker command pulls and runs `oceanbase/seekdb:latest`, which is a mutable tag rather than a pinned version or image digest. This creates a supply-chain risk: future pulls may retrieve different or compromised content, leading to unexpected code execution or behavior during installation.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
sudo systemctl start seekdb
sudo systemctl enable seekdb
```

## Step 5 — Verify service status
Confidence
80% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
sudo systemctl start seekdb
sudo systemctl enable seekdb
```

## Step 5 — Verify service status
Confidence
80% confidence
Finding
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The uninstall instruction runs a root shell script from `/var/lib/seekdb/seekdb_clean.sh` without explaining what it deletes or warning that cleanup may be irreversible. In context, this could remove databases, logs, or other local state, and users may execute it assuming it is a routine package removal step.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Install SeekDB — Linux yum (RPM)

**Supported systems:** Anolis OS 8.X/23.X, CentOS 7.X/9.X, openEuler 22.03/24.03 (kernel 4.19+)
**Minimum requirements:** 1-core CPU, 2 GB RAM, `jq` and MySQL client installed, systemd available, sudo privileges.

---
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Install SeekDB — Linux yum (RPM)

**Supported systems:** Anolis OS 8.X/23.X, CentOS 7.X/9.X, openEuler 22.03/24.03 (kernel 4.19+)
**Minimum requirements:** 1-core CPU, 2 GB RAM, `jq` and MySQL client installed, systemd available, sudo privileges.

---
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Install SeekDB — Linux yum (RPM)

**Supported systems:** Anolis OS 8.X/23.X, CentOS 7.X/9.X, openEuler 22.03/24.03 (kernel 4.19+)
**Minimum requirements:** 1-core CPU, 2 GB RAM, `jq` and MySQL client installed, systemd available, sudo privileges.

---
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Install SeekDB — Linux yum (RPM)

**Supported systems:** Anolis OS 8.X/23.X, CentOS 7.X/9.X, openEuler 22.03/24.03 (kernel 4.19+)
**Minimum requirements:** 1-core CPU, 2 GB RAM, `jq` and MySQL client installed, systemd available, sudo privileges.

---
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Install SeekDB — Linux yum (RPM)

**Supported systems:** Anolis OS 8.X/23.X, CentOS 7.X/9.X, openEuler 22.03/24.03 (kernel 4.19+)
**Minimum requirements:** 1-core CPU, 2 GB RAM, `jq` and MySQL client installed, systemd available, sudo privileges.

---
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
systemctl --version 2>/dev/null | head -1 || echo "systemd not available"
command -v jq || echo "jq not installed"
```
If `jq` is missing: `sudo yum install -y jq`

## Step 2 — Install SeekDB
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Static analysis

No suspicious patterns detected.