Back to skill

Security audit

Sonarqube Analyzer

Security checks for vulnerabilities and agentic risk

Overview

The skill appears purpose-built for SonarQube analysis, but it handles SonarQube credentials with under-disclosed transport and storage risks that users should review before installing.

Install only if you are comfortable giving the skill access to your SonarQube instance. Use a dedicated least-privileged token, do not commit it in openclaw.json, prefer protected environment or secret storage, and use HTTPS for any non-local SonarQube server. Pin the npm package version if using npx or global install, and review any suggested code fixes manually because the artifact's auto-fix wording is broader than the inspected implementation.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
src/api.js:6
Finding

SonarQube Authentication Token Can Be Transmitted over Plaintext HTTP

Content
View full analysis
} API response */ async function fetchFromSonarQube(endpoint, params = {}) { const url = new URL(`${SONAR_HOST}/api${endpoint}`); Object.entries(params).forEach(([key, value]) => { if (value !== undefined && value !== null) { url.searchParams.append(key, value); } }); const headers = {}; // Only add auth if token is provided and not default if (SONAR_TOKEN && SONAR_TOKEN !== 'admin') { headers['Authorization'] = `Basic ${Buffer.from(`${SONAR_TOKEN}:`).toString('base64')}`; } const response = await fetch(url.toString(), { headers }); ``` ### Technical Analysis The API client accepts any URL supplied through `SONAR_HOST_URL`, including remote URLs using unencrypted HTTP. When a non-default token is configured, the token is placed in an HTTP Basic Authorization header. Basic authentication only Base64-encodes the credential; it does not encrypt it. Consequently, when the destination uses HTTP, any party capable of observing or altering the network connection may recover the SonarQube token by decoding the header. The default loopback URL is reasonable for local SonarQube use. However, the implementation does not limit plaintext HTTP to loopback destinations and the documentation explicitly permits users to configure another server URL. This exceeds safe minimum network privileges because a sensitive credential can be sent over an unauthenticated, unencrypted channel. ### Attack Path 1. A user configures `SONA ...[truncated 1401 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
README.md:81
Finding

Unpinned Registry Package Execution and Non-Reproducible Dependency Installation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (12)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · src/rules.js (reported line 138)May include surrounding context.

js
* @returns {Object|null} Rule solution or null if not found
 */
function getRuleSolution(ruleKey) {
  return RULE_SOLUTIONS[ruleKey] || null;
}

/**

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · src/rules.js (reported line 148)May include surrounding context.

js
*/
function isAutoFixable(ruleKey) {
  const rule = RULE_SOLUTIONS[ruleKey];
  return rule ? rule.autoFixable : false;
}

/**

Session Persistence

Medium
Category
Rogue Agent
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.

Content

Scanner excerpt · CONTRIBUTING.md (reported line 27)May include surrounding context.

To add support for a new SonarQube rule:

  1. Edit src/rules.js
  2. Add entry to RULE_SOLUTIONS object:
javascript
'rule-key': {

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The README normalizes handling of the SonarQube token as a plain configuration value and environment variable, but gives no warning about secret storage, least privilege, rotation, or avoiding commits/logging. In a plugin/agent setting, this is more dangerous because users may copy the example into shared config files, shell history, CI logs, or repository-managed configuration, exposing credentials to other users or systems.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The README recommends running the package directly via npx without pinning a specific version, which allows whatever version is current on the registry at execution time to be fetched and executed. In an agent or CI context, this increases supply-chain risk because a compromised maintainer account, malicious new release, or dependency hijack could lead to arbitrary code execution.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill explicitly advertises automatic fixes via autoFix and 'soluções automáticas' but does not provide a clear warning that code may be modified, could introduce regressions, and should be reviewed before application. In a code-modifying analysis skill, this omission can lead users or downstream agents to apply changes blindly, increasing the chance of unsafe or disruptive edits.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code uses a hardcoded default token value of 'admin' but explicitly suppresses authentication when that value is present, creating insecure and ambiguous authentication behavior. In practice this can lead to accidental unauthenticated access attempts, misconfiguration going unnoticed, and unsafe reliance on a privileged-looking default credential in environments where SonarQube is exposed or permissively configured.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructions and parameter descriptions are presented in Portuguese, which imposes a specific language on users without any opt-in or explanation. The policy requires avoiding forced language or locale constraints unless user choice or a justified regional scope is documented.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
65% confidence
Finding

All user-facing descriptions in the manifest are presented only in English, and there is no indication that users can select another language or locale. Under the stated policy, forcing a specific language without opt-in can be a natural-language policy concern when no justification or locale scope is documented.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This is a manifest file, so vague-trigger review applies. The tool descriptions such as "Fetch issues from SonarQube for a project or pull request," "Analyze issues and suggest solutions," and "Check the Quality Gate status" describe capabilities but provide no explicit trigger phrases, scope limits, or exclusion conditions, which can make activation boundaries ambiguous in systems that infer invocation from natural-language descriptions.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 40)May include surrounding context.

json
},
  "dependencies": {},
  "devDependencies": {
    "jest": "^29.0.0",
    "eslint": "^8.0.0"
  },
  "openclaw": {

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 41)May include surrounding context.

json
"dependencies": {},
  "devDependencies": {
    "jest": "^29.0.0",
    "eslint": "^8.0.0"
  },
  "openclaw": {
    "skillId": "sonarqube-analyzer",

Static analysis

Detected: suspicious.env_credential_access, suspicious.install_untrusted_source

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
src/api.js:6

Install source points to URL shortener or raw IP.

Warn
Code
suspicious.install_untrusted_source
Location
openclaw.plugin.json:118

Install source points to URL shortener or raw IP.

Warn
Code
suspicious.install_untrusted_source
Location
package.json:57