Back to skill

Security audit

Baidu Netdisk Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its Baidu Netdisk file-management purpose, but it under-discloses credential and upload behavior and uses weak secret handling.

Review before installing. Only use this in an environment where local config files, shell history, terminal logs, and process listings are protected. Prefer OAuth with a strong ENCRYPTION_KEY set, avoid passing tokens or secrets on the command line, rotate any credentials previously configured this way, and confirm you are comfortable granting basic and netdisk read/write scope to this skill.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
src/auth.js:21
Finding
OAuth Tokens Are Encrypted with a Public, Hard-Coded Fallback Key<![CDATA[ ## Vulnerability Details **File Location**: `src/auth.js:21-22`; `src/baidu-api.js:14-15` **Vulnerability Type**: Predictable encryption key used for credential storage **Risk Level**: High ### Vulnerable Code `src/auth.js:21-22`: ```js const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY || crypto.createHash('sha256').update('baidu-netdisk-skill-secret-2026').digest('hex'); ``` `src/baidu-api.js:14-15`: ```js const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY || crypto.createHash('sha256').update('baidu-netdisk-skill-secret-2026').digest('hex'); ``` The key is subsequently used to encrypt and decrypt OAuth credentials: ```js function encrypt(text) { return CryptoJS.AES.encrypt(text, ENCRYPTION_KEY).toString(); } function decrypt(ciphertext) { const bytes = CryptoJS.AES.decrypt(ciphertext, ENCRYPTION_KEY); return bytes.toString(CryptoJS.enc.Utf8); } ``` ### Technical Analysis The application encrypts OAuth access and refresh tokens with AES, but it silently falls back to a key derived from a constant embedded in the public source code. Every installation that does not explicitly set `ENCRYPTION_KEY` therefore uses the same reproducible key. Encryption does not provide confidentiality when an attacker can derive the encryption key from public information. Anyone who obtains the configuration ciphertext can reproduce the SHA-256-derived key and decrypt the stored credentials using CryptoJS or another compatible implementation. This is particularly significant for refresh tokens because they may allow an attacker to obtain new access tokens after the original access token expires. ### Attack Path 1. A user completes OAuth authorization without setting the optional `ENCRYPTION_KEY` environment variable. 2. The application encrypts the access and refresh tokens using the public fallback key. 3. An attacker, malicious local process, compromised backup service, or configuration-file recipient obtains the Skill configuration file. 4. The ...[truncated 1015 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the source-controlled fallback key entirely. Refuse to encrypt credentials unless secure key material is available. 2. Store OAuth tokens in an operating-system credential manager, such as: - macOS Keychain - Windows Credential Manager - Linux Secret Service or an equivalent protected keyring 3. If file-based encryption is unavoidable: - Generate a cryptographically random, unique key for every installation. - Protect that key independently from the encrypted configuration. - Use authenticated encryption such as AES-256-GCM. - Never store the encryption key alongside the ciphertext. 4. If a user password is used, derive the key with a password-hardening KDF such as Argon2id or scrypt using a unique random salt. 5. Add a migration routine that decrypts credentials stored with the legacy key and immediately re-encrypts or moves them into secure storage. 6. Warn users that previously encrypted configuration files should be treated as potentially exposed, and recommend revoking and rotating existing tokens. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
src/index.js:25
Finding
Manual Configuration Exposes Secrets in Process Arguments and Stores Them in Plaintext<![CDATA[ ## Vulnerability Details **File Location**: `src/index.js:25-36`; `SKILL.md:47-50`; `docs/QUICKSTART.md:68-72` **Vulnerability Type**: Plaintext credential storage and unsafe command-line secret handling **Risk Level**: High ### Vulnerable Code `src/index.js:25-36`: ```js program .command('config') .description('Configure Baidu API credentials') .option('-k, --apikey <key>', 'API Key') .option('-s, --secret <secret>', 'Secret Key') .option('-t, --token <token>', 'Access Token') .option('-r, --refresh <refresh>', 'Refresh Token') .action(async (options) => { if (options.apikey) config.set('apiKey', options.apikey); if (options.secret) config.set('secretKey', options.secret); if (options.token) config.set('accessToken', options.token); if (options.refresh) config.set('refreshToken', options.refresh); ``` The documented invocation places secrets directly on the command line: ```bash npx baidu-netdisk-skill config -k <apikey> -s <secret> -t <token> ``` The quick-start documentation also recommends passing the access and refresh tokens as command-line arguments: ```bash npx baidu-netdisk-skill config \ -k <API_KEY> \ -s <SECRET_KEY> \ -t <ACCESS_TOKEN> \ -r <REFRESH_TOKEN> ``` ### Technical Analysis Credentials supplied through the `config` command are persisted directly with `config.set()` and do not pass through the encryption routine used by the OAuth helper. Consequently, the API secret, access token, and refresh token can be stored as plaintext in the local configuration file. In addition, passing credentials through CLI options exposes them beyond the Node.js process. Depending on the operating system and environment, command-line arguments can be captured through: - Shell history. - Process-listing utilities. - Process telemetry and endpoint monitoring. - Terminal session recording. - CI/CD and automation logs. - Wrapper scripts and command auditing. Even if file permissions restrict the configuratio ...[truncated 1404 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Stop accepting secrets through ordinary command-line options. 2. Collect credentials through a hidden interactive prompt that disables terminal echo, or accept them through protected standard input. 3. Allow credential-file input only when the file has appropriately restrictive permissions, and clearly document the security requirements. 4. Store all credentials through the same secure credential-storage mechanism. Do not leave manually configured credentials in plaintext. 5. Prefer an operating-system credential manager over application-managed encryption. 6. If environment variables are supported, warn that they may still be visible in process environments, crash reports, or deployment metadata. 7. Update all documentation to remove examples that place secrets directly in shell commands. 8. Add a migration process that identifies existing plaintext credentials, moves them to secure storage, and removes the plaintext values. 9. Recommend that existing users clear relevant shell histories and rotate previously supplied API secrets and OAuth tokens. 10. Apply restrictive file permissions as defense in depth, but do not treat permissions alone as a substitute for secure secret storage. ]]>

other

Warning
Location
skill.json:9
Finding
Security Metadata Incorrectly Denies Credential Collection and Outbound User Data<![CDATA[ ## Vulnerability Details **File Location**: `skill.json:9-16`; `package.json:10-14`; `src/index.js:25-36`; `src/baidu-api.js:198-270` **Vulnerability Type**: Misleading security and privacy declarations **Risk Level**: Medium ### Vulnerable Declarations `skill.json:9-16` declares: ```json "security": { "auditStatus": "self-audited", "auditDate": "2026-03-19", "externalCalls": ["pan.baidu.com", "openapi.baidu.com"], "fileAccess": ["~/.config/configstore/baidu-netdisk-skill.json"], "credentialsCollected": false, "dataLeavesDevice": false } ``` `package.json:10-14` similarly declares: ```json "security": { "policy": "SECURITY.md", "externalDomains": ["pan.baidu.com", "openapi.baidu.com"], "noCredentials": true, "encryptedStorage": true } ``` However, the CLI explicitly accepts and stores credentials: ```js if (options.apikey) config.set('apiKey', options.apikey); if (options.secret) config.set('secretKey', options.secret); if (options.token) config.set('accessToken', options.token); if (options.refresh) config.set('refreshToken', options.refresh); ``` The upload implementation reads a local file and transmits its contents to Baidu: ```js const fileBuffer = fs.readFileSync(filePath); const uploadPart = await axios.post( 'https://pan.baidu.com/rest/2.0/xpan/file', fileBuffer, { params: { method: 'upload', access_token: this.accessToken, type: 'tmpfile', path: remotePath, uploadid: uploadId, partseq: partSeq }, headers: { 'Content-Type': 'application/octet-stream' } } ); ``` ### Technical Analysis The declarations do not match the implementation: - `credentialsCollected: false` and `noCredentials: true` conflict with the collection, storage, and use of API keys, secret keys, access tokens, and refresh tokens. - `dataLeavesDevice: false` conflicts with the upload feature, which reads a local file and sends its contents to `pan.baidu.com`. - `encryptedStorage: t ...[truncated 1972 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Change `credentialsCollected` to `true`. 2. Remove or set `noCredentials` to `false`. 3. Change `dataLeavesDevice` to reflect that user-selected local files can be uploaded to Baidu. 4. Replace the broad `encryptedStorage` assertion with a precise statement describing: - Which credentials are stored. - Which storage paths are used. - Which credentials are encrypted. - How encryption keys are managed. 5. Explicitly disclose the outbound destinations: - `pan.baidu.com` - `openapi.baidu.com` 6. State that local file contents leave the device only when the user or Agent invokes the upload command. 7. Describe the OAuth scopes and the operations those scopes permit. 8. Keep metadata synchronized with implementation through automated tests that fail when credential fields, network destinations, or file-access behavior diverge from declared policy. 9. Reassess the broad `exec` tool declaration and replace it with narrower capabilities if the hosting platform supports them. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (99)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
2. 填写企业信息
3. 等待审核(1-3 工作日)
4. 手动获取 Code
5. 用 curl 换 Token
6. 命令行配置
```
Confidence
60% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
2. 填写企业信息
3. 等待审核(1-3 工作日)
4. 手动获取 Code
5. 用 curl 换 Token
6. 命令行配置
```
Confidence
60% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Credential Access

High
Category
Privilege Escalation
Content
默认存储在本地 `config.json`,包含:
- `apiKey` - 百度 API Key
- `secretKey` - 百度 Secret Key
- `accessToken` - Access Token(OAuth 授权后自动保存)
- `refreshToken` - Refresh Token(OAuth 授权后自动保存)

---
Confidence
88% confidence
Finding
The README states that API keys, secret keys, access tokens, and refresh tokens are stored in a local `config.json`. Even with claims of encryption elsewhere, documenting local storage of all sensitive credentials without clear details on file permissions, encryption-key management, and rotation creates a substantial credential exposure risk on shared or compromised hosts.

Credential Access

High
Category
Privilege Escalation
Content
### 1. Token 加密存储

用户的百度 Access Token 使用 AES-256 加密,存储在本地配置文件中。

```javascript
// 加密存储,密钥由用户密码派生
Confidence
83% confidence
Finding
The file states that Baidu access tokens are stored locally and describes encryption using AES-256-CBC with `crypto-js`-style key derivation from a user password. This is security-sensitive because local token storage creates credential theft risk if the host or config file is exposed, and the described scheme lacks details about robust KDF parameters, authenticated encryption, secure key management, and token lifecycle protections. In the context of a file-management skill with read/write cloud-storage scope, compromise of the token could allow unauthorized access to user files.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The declared purpose understates the actual capability surface by omitting credential storage, account info lookup, manual token handling, and cache-related behavior. In agent ecosystems, such mismatches weaken informed consent and can cause operators to grant a skill broader trust than its description warrants.

Credential Access

High
Category
Privilege Escalation
Content
|--------|------|------|
| `apiKey` | 百度 API Key(自带 API key 模式使用) | 否 |
| `secretKey` | 百度 Secret Key(自带 API key 模式使用) | 否 |
| `accessToken` | Access Token(OAuth 授权后自动保存) | 否 |
| `refreshToken` | Refresh Token(OAuth 授权后自动保存) | 否 |
| `encryptionKey` | 自定义加密密钥(可选,增强安全性) | 否 |
Confidence
84% confidence
Finding
The documented configuration includes storage and handling of apiKey, secretKey, accessToken, and refreshToken, which are highly sensitive credentials. In the context of an agent skill that also uses unpinned executable package commands, this broad credential handling materially increases the risk of account takeover or long-lived unauthorized access if secrets are logged, exposed, or intercepted.

Credential Access

High
Category
Privilege Escalation
Content
- 创建新应用
- 获取 **API Key** 和 **Secret Key**

### 4. 获取 Access Token

方法一:OAuth 授权(推荐)
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
访问后获得 code,然后用 code 换 token:

```bash
curl "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=你的 CODE&client_id=你的 API_KEY&client_secret=你的 SECRET_KEY&redirect_uri=oob"
```

返回的 JSON 里有 `access_token` 和 `refresh_token`。
Confidence
92% confidence
Finding
The `curl` example places the authorization code, API key, and especially the client secret directly in the URL query string. Query-string secrets are prone to leakage through shell history, terminal logs, browser or proxy logs, process inspection, and copied command history, which is particularly dangerous because the endpoint returns bearer tokens and refresh tokens for cloud storage access.

Known Vulnerable Dependency: axios==1.13.6 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
93% confidence
Finding
The lockfile pins axios at 1.13.6, and the provided advisory set includes multiple high-severity issues affecting request handling, proxy behavior, and prototype-pollution-related exploitation paths. In a skill that performs OAuth and remote file management over HTTP, a vulnerable HTTP client is especially relevant because it directly mediates authentication, downloads, uploads, and outbound requests.

Known Vulnerable Dependency: brace-expansion==1.1.12 — 4 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro) +1 more

High
Category
Supply Chain
Confidence
80% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: fast-uri==3.1.0 — 7 advisory(ies): CVE-2026-13676 (fast-uri vulnerable to host confusion via failed IDN canonicalization); CVE-2026-18446 (fast-uri vulnerable to host confusion via backslash authority introducer); CVE-2026-75975 (fast-uri vulnerable to server-side request forgery via malformed IPv6 normalizat) +4 more

High
Category
Supply Chain
Confidence
80% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: flatted==3.4.1 — 1 advisory(ies): CVE-2026-33228 (Prototype Pollution via parse() in NodeJS flatted)

High
Category
Supply Chain
Confidence
80% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
81% confidence
Finding
form-data is a runtime dependency commonly used for multipart uploads, which is directly relevant to a file-upload skill. If attacker-controlled filenames or field names are incorporated into multipart requests without proper escaping, CRLF injection could corrupt request structure or enable header injection against upstream services.

Known Vulnerable Dependency: js-yaml==4.1.1 — 4 advisory(ies): CVE-2026-84375 (js-yaml: maxTotalMergeKeys does not limit CPU use for empty merge sources); CVE-2026-59869 (js-yaml: YAML merge-key chains can force quadratic CPU consumption); GHSA-5p4m-2wfm-xmqj (JS-YAML: Quadratic CPU consumption in !!omap resolution (3.x and 4.x) — CVE-2026) +1 more

High
Category
Supply Chain
Confidence
80% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Known Vulnerable Dependency: axios==1.13.6 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
94% confidence
Finding
The manifest permits axios versions that static analysis maps to a version with numerous advisories, including SSRF- and MITM-related issues. In a Baidu Netdisk skill handling OAuth flows and remote file operations, an HTTP client vulnerability can expose access tokens, redirect requests, bypass proxy protections, or tamper with responses from external services.

Credential Access

High
Category
Privilege Escalation
Content
},
      "accessToken": {
        "type": "string",
        "description": "Access Token(OAuth 授权后自动保存,无需手动配置)",
        "required": false,
        "secret": true
      },
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
},
      "accessToken": {
        "type": "string",
        "description": "Access Token(OAuth 授权后自动保存,无需手动配置)",
        "required": false,
        "secret": true
      },
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
},
      "accessToken": {
        "type": "string",
        "description": "Access Token(OAuth 授权后自动保存,无需手动配置)",
        "required": false,
        "secret": true
      },
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
},
      "accessToken": {
        "type": "string",
        "description": "Access Token(OAuth 授权后自动保存,无需手动配置)",
        "required": false,
        "secret": true
      },
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
console.log(chalk.green('\n✅ 百度网盘授权完成!\n'));
      console.log('Token 已加密保存在本地配置文件');
      console.log(`Access Token 有效期:${Math.floor(expires_in / 86400)} 天`);
      console.log('\n你现在可以开始使用百度网盘 Skill 了!\n');
      console.log('常用命令:');
      console.log('  npx baidu-netdisk-skill whoami     # 查看用户信息');
Confidence
90% confidence
Finding
The skill stores OAuth access and refresh tokens with AES using a default key derived from a hardcoded constant, and merely reports that the token is encrypted locally. Anyone with access to the code and local config can reproduce the default key and decrypt stored tokens unless the operator overrides ENCRYPTION_KEY, making credential theft feasible on shared or compromised systems.

Credential Access

High
Category
Privilege Escalation
Content
}

  /**
   * 刷新 Access Token
   */
  async refreshAccessToken() {
    const response = await axios.post(
Confidence
88% confidence
Finding
This file handles access and refresh tokens plus client credentials, and it derives a default encryption key from a hardcoded constant if the environment variable is absent. Because that fallback is embedded in code and encryption is reversible, anyone with local config access and source knowledge can potentially recover persisted tokens, leading to account access and long-lived credential compromise.

Credential Access

High
Category
Privilege Escalation
Content
.description('配置百度 API 密钥')
  .option('-k, --apikey <key>', 'API Key')
  .option('-s, --secret <secret>', 'Secret Key')
  .option('-t, --token <token>', 'Access Token')
  .option('-r, --refresh <refresh>', 'Refresh Token')
  .action(async (options) => {
    console.log(chalk.blue('🔧 配置百度 API 密钥\n'));
Confidence
88% confidence
Finding
The CLI accepts API keys, access tokens, and refresh tokens directly as command-line arguments. On many systems, command-line arguments can be exposed through shell history, process listings, audit logs, or job runners, which can leak long-lived credentials and enable unauthorized access to the user's Baidu Netdisk account.

Credential Access

High
Category
Privilege Escalation
Content
if (apiKey && secretKey && accessToken) {
      console.log(chalk.green('✅ 配置完成!'));
      console.log(`API Key: ${apiKey.slice(0, 8)}...`);
      console.log(`Access Token: ${accessToken.slice(0, 8)}...`);
    } else {
      console.log(chalk.yellow('⚠️  配置不完整,请运行:'));
      console.log('npx baidu-netdisk-skill config -k <apikey> -s <secret> -t <token> -r <refresh>');
Confidence
83% confidence
Finding
The tool echoes the first 8 characters of the API key and access token after configuration. Even partial credential disclosure can aid correlation, leak identifying token prefixes into logs/screenshots, and normalize unsafe secret handling in terminal output; combined with the prior CLI-argument issue, this increases accidental exposure risk.

Credential Access

High
Category
Privilege Escalation
Content
cat "$CONFIG_FILE" | jq -r '
  "  API Key: " + (if .apiKey then (.apiKey[0:8] + "...") else "未设置" end) +
  "\n  Secret Key: " + (if .secretKey then (.secretKey[0:8] + "...") else "未设置" end) +
  "\n  Access Token: " + (if .accessToken then (.accessToken[0:8] + "...") else "未设置" end) +
  "\n  Refresh Token: " + (if .refreshToken then (.refreshToken[0:8] + "...") else "未设置" end) +
  "\n  Token 过期时间: " + (if .tokenExpires then (.tokenExpires | tostring) else "未设置" end)
' 2>/dev/null || echo "  (无法解析 JSON)"
Confidence
94% confidence
Finding
This line explicitly outputs portions of the access token and refresh token from the local config file. In a local test script for an OAuth-integrated file-management skill, these credentials are highly sensitive because anyone obtaining them may access or refresh access to the user's Baidu Netdisk account; printing even truncated values raises the chance of accidental disclosure through logs or shared environments.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding
The README instructs users to execute `npx baidu-netdisk-auth` without a pinned package version. This can fetch the latest package at execution time, creating a supply-chain risk if the package is compromised or a malicious update is published. Because this skill is explicitly intended for credentialed OAuth flows, running an unpinned helper is more dangerous than a generic utility.

Static analysis

Detected: suspicious.env_credential_access, suspicious.exposed_secret_literal

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
src/auth.js:21

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
src/baidu-api.js:15

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
src/auth.js:87

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
src/baidu-api.js:36