Back to skill

Security audit

CloudQ

Security checks for vulnerabilities and agentic risk

Overview

This is mostly a disclosed Tencent CloudQ client, but it needs review because normal setup can change cloud IAM permissions without a clear consent step and some credential-bearing helpers are overbroad.

Install only if you are comfortable granting Tencent CloudQ access to cloud credentials and local credential storage. Use the least-privileged Tencent sub-account possible, review any role or policy changes before running setup, and avoid installing in environments where untrusted prompts or wrappers can influence command arguments or environment variables.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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 (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/check_env.py:127
Finding

Mandatory Environment Check Silently Grants Full-Access IAM Policies

Content
View full analysis
list: """为角色补充缺失的必需策略(幂等操作)。 对 REQUIRED_ROLE_POLICIES 中的每个策略执行 AttachRolePolicy, 已关联的策略会返回 PolicyAlreadyAttached 错误码,视为成功。 Returns: list: 关联失败的警告信息列表(空列表表示全部成功) """ warnings = [] for policy_name in REQUIRED_ROLE_POLICIES: attach_result = call_api( "cam", "cam.tencentcloudapi.com", "AttachRolePolicy", "2019-01-16", {"AttachRoleName": role_name, "PolicyName": policy_name}, ) if not attach_result.get("success"): err_code = attach_result.get("error", {}).get("code", "") if "AlreadyAttached" not in err_code: err_msg = attach_result.get("error", {}).get("message", "未知错误") warnings.append(f"策略 {policy_name} 关联失败: {err_msg}") return warnings ``` ```python if role_configured: policy_warnings = ensure_role_policies( os.environ.get("TENCENTCLOUD_ROLE_NAME", ADVISOR_ROLE_NAME) ) if policy_warnings: for w in policy_warnings: log_warn(w) else: log_ok("角色策略检查通过") ``` ### Technical Analysis The Skill documentation requires `check_env.py` to run before the first CloudQ operation in each conversation. An environment check is expected to be read-only unless the user explicitly requests remediation. However, when a role is considered configured, the script calls `AttachRolePolicy` and attempts to attach `QcloudTAGFullAccess` and `QcloudAdvisorFullAccess`. This is an IAM write operation that changes the permissions of a cloud role. It is not ...[truncated 2161 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/tcloud_api.py:84
Finding

Generic API Client Sends Signed Authentication Headers to a Caller-Controlled Host

Content
View full analysis
dict: ``` ```python _OAUTH_ALLOWED_SERVICES = {"advisor"} _AKSK_ALLOWED_SERVICES = {"advisor", "cam", "sts"} if cred_source == "oauth": allowed = _OAUTH_ALLOWED_SERVICES deny_hint = f"如需调用 {service} 服务,请配置 AK/SK 环境变量。" else: allowed = _AKSK_ALLOWED_SERVICES deny_hint = f"CloudQ 不支持调用 {service} 服务。" if service not in allowed: return _make_error( action, "ServiceNotAllowed", f"当前凭证不允许调用 {service} 服务(允许: {', '.join(sorted(allowed))})。{deny_hint}" ) ``` ```python headers = { "Authorization": authorization, "Content-Type": "application/json; charset=utf-8", "Host": host, "X-TC-Action": action, "X-TC-Timestamp": str(timestamp), "X-TC-Version": version, "X-TC-Region": region, } if token: headers["X-TC-Token"] = token req = Request( f"https://{host}", data=payload_str.encode("utf-8"), headers=headers, method="POST", ) try: ctx = _get_ssl_context() with urlopen(req, context=ctx, timeout=30) as resp: response_body = resp.read().decode("utf-8") ``` ```python args = sys.argv[1:] if len(args) < 4: print(_output_json(_make_error( "", "MissingParameter", "缺少必要参数。用法: python3 tcloud_api.py [payload] [region]" ))) sys.exit(1) service = args[0] host = args[1] action = args[2] version = args[3] payload_str = args[4] if len(args) > 4 else " ...[truncated 3336 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/credential_manager.py:50
Finding

Environment-Controlled OAuth Endpoint Can Exfiltrate Authorization Codes and Refresh Tokens

Content
View full analysis
dict: """发送 POST 请求到 OAuth 服务端""" data = json.dumps(body).encode("utf-8") req = Request( url, data=data, headers={"Content-Type": "application/json"}, method="POST", ) ctx = _get_ssl_context() if url.startswith("https://") else None try: with urlopen(req, context=ctx, timeout=timeout) as resp: result = json.loads(resp.read().decode("utf-8")) return _check_response(result) ``` ```python def exchange_token(code: str) -> dict: url = f"{OAUTH_ENDPOINT}/oauth/cq/exchange_token" body = {"code": code} try: resp = _http_post(url, body) ``` ```python def get_tmp_cred(access_token: str, site: str = "cn") -> dict: url = f"{OAUTH_ENDPOINT}/oauth/cq/get_tmp_cred" body = {"access_token": access_token} try: resp = _http_post(url, body) ``` ```python def refresh_access_token(refresh_token: str, user_open_id: str, site: str = "cn") -> dict: url = f"{OAUTH_ENDPOINT}/oauth/cq/refresh_token" body = { "refresh_token": refresh_token, "user_open_id": user_open_id, } try: resp = _http_post(url, body) ``` ### Technical Analysis The OAuth server is selected from the `CLOUDQ_OAUTH_ENDPOINT` environment variable. The value is used without parsing or validating its scheme, hostname, port, path, or ownership. Sensitive OAuth data sent to this endpoint includes: - Authorization codes. - Access tokens. - Refresh tokens. - User Open ...[truncated 2532 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (46)

Tainted flow: 'req' from os.environ.get (line 247, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/login_url.py (reported line 255)May include surrounding context.

python
)

    ctx = _get_ssl_context()
    with urlopen(req, context=ctx, timeout=30) as resp:
        result = json.loads(resp.read().decode("utf-8"))

    response_body = result.get("Response", {})

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

声明描述的是一个面向多云资源管理和智能顾问业务功能的综合操作技能,覆盖大量查询、分析、绘图和运维场景;而提供的代码块仅实现“环境检测/初始化”相关能力。它主要检查本机运行环境、读取环境变量和本地凭证文件、访问腾讯云 API 验证授权状态、检查角色与策略,并在指定参数下执行开通智能顾问和附加角色策略等写操作。虽然“开通智能顾问”与声明中的一小部分内容一致,但整体主功能与声明严重不符,且代码完全没有实现所宣称的大部分多云资源查询、架构图操作、AIOps/CloudOps分析能力。因此应判定为描述与实际行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是一个面向多云资源咨询、架构分析、AIOps/CloudOps 问答与运维能力的技能;而提供的代码并未实现任何架构图查看、资源查询、智能巡检、成本优化、安全合规或多云分析逻辑。其核心功能是清理本地腾讯云智能顾问相关配置与缓存,并在具备 AK/SK 时删除腾讯云 CAM 角色。这属于明显不同的主要用途,并且包含未在声明中体现的敏感清理/删除能力(尤其是凭证、环境变量和云端角色删除)。因此描述与实际行为存在显著不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是面向用户的智能顾问、多云资源查询、架构分析和 AIOps/CloudOps 运维类功能;而实际代码并不执行任何架构图查看、资源查询、巡检、成本优化或诊断分析。其核心功能是对腾讯云身份与访问管理进行写操作:创建/复用 advisor 角色、附加权限策略、开启控制台登录并保存配置。这属于账号权限配置与初始化脚本,和声明中的主要用途存在明显偏离。虽然“开通智能顾问时”在描述中被提及,可能暗示某种初始化流程,但代码的具体且主要行为是 IAM 角色创建与授权,这一高敏感能力在声明中没有被明确表达,因此应判定为描述与行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是面向多云资源咨询、架构分析、AIOps/CloudOps 运维操作的高层业务能力;而代码仅实现认证与凭证管理基础设施。它没有执行任何架构图查看/绘制、资源查询、巡检、容量监测、成本优化、安全合规、资源盘点或最佳实践分析等声明中的核心功能。相反,代码具备明显未在描述中体现的能力:访问本地 ~/.tencent-cloudq/credential.json、管理 OAuth/Connector 凭证、调用远程 OAuth 服务端、刷新 token、获取临时密钥、读取环境变量密钥。这属于主要目的和能力层面的明显不一致,因此应判定为描述与行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是一个面向多云运维/架构/资源查询与优化的业务能力集合,重点在云资源分析、架构查看、诊断、巡检、成本优化、安全合规等操作。而提供的代码并未实现这些业务功能;它只负责身份认证和凭证生命周期管理。虽然登录可能是上述业务技能的支撑步骤,但当前代码块的主要目的与声明的主要用途明显不一致,且代码涉及未在描述中体现的 OAuth 登录、token 交换、本地凭证存储与刷新等能力。因此应判定为描述与实际行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是一个面向多云资源管理与智能顾问/AIOps能力的综合技能,而该代码块仅实现了腾讯云控制台的免密登录 URL 生成流程。其核心行为是身份认证与访问跳转,不是查看架构图、执行评估、巡检、诊断、资源查询或优化等业务功能。虽然目标 URL 可能指向 advisor 控制台页面,算是为进入相关页面提供辅助能力,但这只是支持性登录机制,无法代表声明中的主要功能范围。因此描述与代码实际行为存在明显不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

声明描述的是面向腾讯云、AWS、阿里云等多云环境的智能顾问、架构评估、AIOps/CloudOps查询与分析类能力;而提供的代码只是一个 logout.py 脚本,用于删除本地凭证文件并完成登出。其主要目的、操作对象和能力范围都与声明严重不一致。该代码没有实现任何云资源查询、架构图处理、诊断、巡检、优化或合规能力,因此应判定为明显不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

描述与代码存在明显不匹配。声明将技能定位为覆盖多云资源咨询、智能顾问架构查看、AIOps/CloudOps 操作、资源/成本/安全/巡检等大量高层功能;而实际代码只是一个底层异步任务管理脚本,用于查询和取消 CloudQ 异步任务,并轮询其执行结果。虽然这类脚本可能作为更大系统的辅助组件,但就提供的代码块而言,其主要用途并不是执行声明中的那些业务功能,而只是管理这些功能可能产生的异步任务。因此应判定为描述与实际行为不一致。

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

The skill explicitly requests filesystem access to ~/.tencent-cloudq/ and documents storage of OAuth/connector credentials in credential.json. Local credential persistence creates a real secret-exposure risk if file permissions, logging, other tools, or later steps mishandle that directory; in an agent skill, granting both Read and Write plus credential storage meaningfully enlarges the blast radius.

Content

Scanner excerpt · SKILL.md (reported line 8)May include surrounding context.

md
description_en: "Multi-cloud management & smart advisor with architecture visualization, risk assessment & AI-powered O&M"
version: 1.9.0
allowed-tools: Read,Write,Bash,Grep
metadata: {"openclaw": {"emoji": "☁️", "requires": {"bins": ["python3"]}, "permissions": ["network:https://*.tencentcloudapi.com", "network:https://cloud.tencent.com", "network:https://clawhub.ai", "network:https://cloudq.cloud.tencent.com", "fs:~/.tencent-cloudq/"], "security": {"iam_operations": ["cam:GetRole", "cam:CreateRole", "cam:AttachRolePolicy", "cam:DeleteRole", "cam:DescribeRoleList", "sts:AssumeRole", "sts:GetCallerIdentity", "advisor:CreateAdvisorAuthorization", "advisor:DescribeUserAuthorizationStatus"], "iam_note": "角色创建/删除为独立步骤,需用户明确同意后执行:create_role.py 创建角色(可选,仅影响免密登录),cleanup.py --cloud 删除角色;check_env.py 做环境检测(含智能顾问开通状态检测),--enable-advisor 参数开通智能顾问(需用户明确同意,必须开通才能使用 CloudQ);DescribeUserAuthorizationStatus 和 CreateAdvisorAuthorization 已集成到 check_env.py 中", "data_handling": "凭证保存在 ~/.tencent-cloudq/credential.json(权限600),OAuth 凭证自动刷新、Connector 凭证由 Agent 侧通过 MCP Tool 获取后写入;AK/SK 通过环境变量配置;配置文件仅保存角色 ARN,不保存长期密钥"}}}
---

# ☁️ CloudQ — 多云 AIOps 专家

Credential Access

High
Category
Privilege Escalation
Confidence
92% confidence
Finding

This section instructs the agent to obtain temporary cloud credentials from a connector and write them into a local credential file. Even temporary credentials are sensitive; storing secretId, secretKey, token, and auditJwt on disk exposes them to theft, reuse during validity windows, or accidental disclosure through debugging, backups, or other local processes.

Content

Scanner excerpt · SKILL.md (reported line 160)May include surrounding context.

md
### 2.3 Connector 临时密钥 — OneId 方案(CloudQ 托管环境,自动)

在支持 Connector 的 Agent 环境中,通过 MCP Tool `CloudQConnector_get_available_tmp_secret` 获取临时密钥,写入 `credential.json`(`type: "connector"`)。
连接成功后,Agent 无需在本地配置 OAuth 或 AK/SK。

首次使用请在 [CloudQ 控制台](https://console.cloud.tencent.com/advisor/cloudq) 的「拓展」→「Channels 集成」→「OneID」完成配置,并将返回的 MCP 配置粘贴到 WorkBuddy「连接器」→「自定义连接器」→「配置 MCP」,保存后点击「连接」。

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The inline Python snippet writes raw secretId, secretKey, token, and auditJwt values into credential.json, which is a concrete secret-handling weakness. Embedding secrets into command invocations and local files increases the chance of leakage through shell history, process inspection, crash logs, or unintended file reads by other components.

Content

Scanner excerpt · SKILL.md (reported line 169)May include surrounding context.

  1. 调用 MCP Connector Tool 获取临时密钥:secretId、secretKey、token、expiresAt、auditJwt

  2. 写入 credential.json(Python 一行命令):

    bash
    python3 -c "
    import json, sys
    

Credential Access

High
Category
Privilege Escalation
Confidence
89% confidence
Finding

The file confirms a persistent credential file containing OAuth or connector credentials under the user's home directory. In the context of a skill with Read/Write/Bash capabilities and network access, local secret files materially increase the risk of credential disclosure or misuse if another prompt path, script bug, or future modification accesses and transmits them.

Content

Scanner excerpt · SKILL.md (reported line 357)May include surrounding context.

md
| `sts:AssumeRole` | `login_url.py`(内部) | 敏感 |
| `cam:CreateRole` / `cam:AttachRolePolicy` / `cam:DeleteRole` | `create_role.py` / `cleanup.py` | 写入(需同意) |

- 凭证文件 `~/.tencent-cloudq/credential.json`(权限 600),存储 OAuth 或 Connector 凭证
- 网络仅连接 `*.tencentcloudapi.com`、`cloud.tencent.com`、`cloudq.cloud.tencent.com`、`clawhub.ai`
- 清理:`python3 {baseDir}/scripts/cleanup.py --all`(需 `--all` 参数)

Lp1

High
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The script performs outbound network access to Tencent Cloud APIs, ClawHub APIs, and version-check endpoints, and can trigger cloud-side state changes, yet the finding states network capability is not covered by declared permissions. In a skill context, undeclared network access is dangerous because it expands trust boundaries and can expose metadata, credentials, or trigger unintended external actions without transparent authorization.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The script performs outbound network access to Tencent Cloud APIs, ClawHub APIs, and version-check endpoints, and can trigger cloud-side state changes, yet the finding states network capability is not covered by declared permissions. In a skill context, undeclared network access is dangerous because it expands trust boundaries and can expose metadata, credentials, or trigger unintended external actions without transparent authorization.

Content

No source excerpt is available for this finding.

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · scripts/check_env.py (reported line 551)May include surrounding context.

python
��接」。")
                log_info("")
                log_info("  密钥获取地址: https://console.cloud.tencent.com/cam/capi")
                sys.exit(2)

        except ImportError:
            log_fail(f"未配置以下环境变量: {', '.join(missing)}")
            log_info("")
            log_info("  请将腾讯云 API 密钥写入 shell 配置文件:")
            log_info('    echo \'export TENCENTCLOUD_SECRET_ID="your-secret-id"\' >> ~/.bashrc')
            log_info("    source ~/.bashrc")
            log_info("")
            log_info("  密钥获取地址: https://console.cloud.tencent.com/cam/capi")
            sys.exit(2)
    else:
        masked_id = f"{secret_id[:4]}****{secret_id[-4:]}" if len(secret_id) > 8 else "****"
        log_ok(f"SecretId 已配置: {masked_id}")
        log_ok("SecretKey 已配置: ****")

    token = os.environ.get("TENCENTCLOUD_TOKEN", "")
    if token:
        log_ok("临时密钥 Token 已配置")

    # ============== 4. 验证�

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/cleanup.py (reported line 15)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/cleanup.py (reported line 42)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/credential_manager.py (reported line 6)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/credential_manager.py (reported line 7)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

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

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/credential_manager.py (reported line 13)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/credential_manager.py (reported line 16)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/credential_manager.py (reported line 404)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · scripts/credential_manager.py (reported line 461)May include surrounding context.

python
CloudQ 凭证统一管理模块

凭证获取优先级:
    1. OAuth 凭证文件(~/.tencent-cloudq/credential.json,type="oauth")
    2. Connector 凭证文件(~/.tencent-cloudq/credential.json,type="connector")
    3. 环境变量 AK/SK(TENCENTCLOUD_SECRET_ID / TENCENTCLOUD_SECRET_KEY)
    4. 抛出 CredentialNotFoundError

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/tcloud_async_task.py:84

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/tcloud_sse_api.py:216