Back to skill

Security audit

Keplerjai Oss Uploader

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Aliyun OSS uploader with optional lifecycle-management behavior that users should enable only with scoped credentials.

Install only if you intend to let this skill upload selected files to the configured Aliyun OSS bucket. Use a least-privilege AccessKey limited to the intended bucket and prefix, avoid granting lifecycle permissions unless you need automatic expiration, and prefer dry-run before applying lifecycle rules.

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

Note
Location
requirements.txt:1
Finding

Non-Reproducible Third-Party Dependency Installation Without Integrity Verification

Content
View full analysis
=2.18.0,<3 ``` `SKILL.md:24-26`: ```bash pip install -r "{baseDir}/requirements.txt" python "{baseDir}/scripts/upload_to_oss.py" "/path/to/file.png" ``` ### Technical Analysis The installation instructions cause `pip` to resolve any available `oss2` release from version 2.18.0 up to, but excluding, version 3. The project does not pin a reviewed exact version and does not provide cryptographic hashes for the package or its transitive dependencies. Consequently, installation results may change over time without any modification to this project. If a future matching release, a transitive dependency, or the configured Python package index is compromised, the documented installation command may retrieve attacker-controlled code. No evidence was found that the currently declared `oss2` package is malicious. This finding concerns the lack of reproducible, integrity-verified dependency resolution rather than a confirmed malicious package. ### Attack Path 1. An attacker compromises a future compatible `oss2` release, one of its resolved transitive dependencies, or the package-index resolution path. 2. A user or Agent follows the documented command: ```bash pip install -r "{baseDir}/requirements.txt" ``` 3. `pip` selects the compromised version because it satisfies `>=2.18.0,<3`. 4. Attacker-controlled package code may run during installation or when the uploader imports and uses the dependency. 5. During uploader execution, malicious dependency code could access the process environment, including OSS credentials, and the local file selected for upload. ### Impact Assessment Malicious dependency code would run with the privileges of the account executing `pip` or the uploader. Dependin ...[truncated 651 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The described purpose focuses on uploading a local file and returning a bindHost URL, but the skill text also references config-loading behavior and operational scripts not aligned with that narrow purpose. This mismatch can mislead operators about what local files and configuration sources the skill may read, increasing the risk of unintended secret exposure or unsafe execution with broader access than expected.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The described purpose focuses on uploading a local file and returning a bindHost URL, but the skill text also references config-loading behavior and operational scripts not aligned with that narrow purpose. This mismatch can mislead operators about what local files and configuration sources the skill may read, increasing the risk of unintended secret exposure or unsafe execution with broader access than expected.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The described purpose focuses on uploading a local file and returning a bindHost URL, but the skill text also references config-loading behavior and operational scripts not aligned with that narrow purpose. This mismatch can mislead operators about what local files and configuration sources the skill may read, increasing the risk of unintended secret exposure or unsafe execution with broader access than expected.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · config.example.env (reported line 1)May include surrounding context.

text
# 复制为 .env 或写入 OpenClaw skills.entries(勿提交 .env)
# 非敏感项可由同目录 config.json 提供;以下为必填密钥
KEPLERJAI_OSS_ACCESS_KEY_ID=
KEPLERJAI_OSS_ACCESS_KEY_SECRET=

Memory Manipulation

High
Category
Memory Poisoning
Confidence
85% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/oss_lifecycle.py (reported line 31)May include surrounding context.

python
rule_id: str,
) -> str:
    """
    GET lifecycle, replace rule with same id, PUT merged rules.
    Returns a short status line for logging.
    """
    if expire_days <= 0:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/skill_config.py (reported line 12)May include surrounding context.

python
def load_dotenv(skill_root: Path) -> None:
    """Load `{skill_root}/.env` into os.environ if key not already set (shell env wins)."""
    path = skill_root / ".env"
    if not path.is_file():
        return
    try:

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill description is written entirely in Chinese and provides no indication that other languages are supported or that Chinese is a required locale for a region-specific use case. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The description says the skill is used whenever the user mentions OSS upload, static resources, or keplerjai OSS, but it does not define clear trigger boundaries or exclusions. Phrases like '静态资源' are broad and could cause unintended activation during general discussion rather than an explicit upload request.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This function performs a privileged bucket-level configuration change by reading and updating the OSS bucket lifecycle policy, which is materially broader than the declared skill purpose of uploading a file and returning a URL. Even though the behavior is explicit in code, it creates a dangerous scope mismatch: invoking an upload-related skill can silently alter retention/deletion rules for objects under a prefix, potentially causing unintended data loss or policy changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The code updates persistent OSS lifecycle configuration without any user-visible warning, consent gate, or dry-run mode, then returns only a success log line. In the context of a skill presented as an uploader, this hidden side effect can surprise users and lead to automatic expiration of uploaded content or other objects under the configured prefix.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest describes a skill for uploading a local file to OSS and outputting an accessible URL. In addition to uploading, the code exposes a --sync-lifecycle feature and later calls PutBucketLifecycle, which changes bucket-level retention policy rather than merely performing the upload operation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.