Back to skill

Security audit

Hummingbot Developer

Security checks for vulnerabilities and agentic risk

Overview

This skill appears intended for local Hummingbot development, but its installers and dev scripts use high-impact setup patterns that deserve manual review before installation.

Install only in an isolated development environment. Review scripts before running install-deps or install-all, avoid exposing the API, Gateway, Postgres, or EMQX ports beyond localhost, replace the default credentials immediately, and be especially cautious with the Docker installer and docker group change.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
Findings (5)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/install_deps.sh:62
Finding
Unverified remote installation scripts are executed directly<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install_deps.sh:62-65`, `scripts/install_deps.sh:176-178`, and `scripts/install_deps.sh:259-262` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code ```bash info "Installing Homebrew..." /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` ```bash # Install nvm then node info "Installing nvm first..." curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash ``` ```bash elif [ "$OS" = "Linux" ]; then info "Installing Docker Engine..." curl -fsSL https://get.docker.com | sh sudo usermod -aG docker "$USER" 2>/dev/null || true ``` ### Technical Analysis The script passes responses received from external URLs directly to command interpreters. This removes the opportunity to verify the downloaded content before execution. The Homebrew URL references mutable `HEAD`, so the effective payload can change after this Skill is reviewed. The nvm URL identifies a release tag, but the downloaded response is still not verified against a trusted checksum or signature. `get.docker.com` is also a mutable installer endpoint. HTTPS protects the connection in transit but does not protect against compromise of the hosting account, upstream repository, release process, DNS/TLS trust infrastructure, or the remote endpoint itself. If any source returns malicious content, that content executes immediately. The Docker installation path has especially high impact. Docker installation scripts commonly perform system package-management operations, and the script subsequently invokes `sudo usermod`. Membership in the Docker group is effectively root-equivalent on typical Linux systems because a member can start privileged containers and mount the host filesystem. These installation actions support the declared dependency-setup functionality, but direct remote-to-shell execution exceeds the min ...[truncated 1170 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove all `curl | bash`, `curl | sh`, and command-substitution installation patterns. 2. Pin every installer to an immutable, reviewed version rather than mutable `HEAD` or generic installer endpoints. 3. Download installers to files created with `mktemp` and restrictive permissions. 4. Verify each artifact using a hardcoded SHA-256 digest obtained through a separate trusted channel, or verify a trusted publisher signature. 5. Execute only after verification succeeds; fail closed if verification cannot be performed. 6. Prefer signed operating-system package repositories where available. 7. Do not automatically add the user to the Docker group. Explain its root-equivalent security implications and require a separate, explicit confirmation. 8. Offer a default check-only mode and make high-impact installation an explicit opt-in. 9. Run dependency installation in a disposable environment where practical. A safer pattern is: ```bash installer="$(mktemp)" trap 'rm -f "$installer"' EXIT curl --fail --show-error --location \ "https://trusted.example/installer-pinned-version.sh" \ -o "$installer" printf '%s %s\n' "$EXPECTED_SHA256" "$installer" | sha256sum --check - /bin/bash "$installer" ``` ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/install_all.sh:156
Finding
Predictable plaintext service credentials are created without restrictive permissions<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install_all.sh:156-178` **Vulnerability Type**: Hardcoded credentials and insecure secret-file creation **Risk Level**: High ### Vulnerable Code ```bash step "Write dev .env (localhost URLs — fixes Docker-internal hostnames)" # Always write the dev .env so DATABASE_URL and BROKER_HOST point to localhost. # The Docker-based setup writes internal hostnames (hummingbot-postgres, emqx) # which break when running the API from source outside of Docker. cat > "$API_DIR/.env" << EOF USERNAME=admin PASSWORD=admin CONFIG_PASSWORD=admin DEBUG_MODE=false # MQTT broker — EMQX running in Docker, exposed on localhost:1883 BROKER_HOST=localhost BROKER_PORT=1883 BROKER_USERNAME=admin BROKER_PASSWORD=password # Postgres — running in Docker, exposed on localhost:5432 # Note: Docker-based setup uses internal hostname 'hummingbot-postgres' — dev mode needs 'localhost' DATABASE_URL=postgresql+asyncpg://hbot:hummingbot-api@localhost:5432/hummingbot_api BOTS_PATH=$API_DIR/bots # Gateway — running from source on localhost:15888 GATEWAY_URL=http://localhost:15888 EOF touch "$API_DIR/.setup-complete" ok "Dev .env written (postgres + EMQX + gateway all on localhost)" ``` ### Technical Analysis The installer writes publicly predictable credentials for the API, configuration encryption, MQTT broker, and PostgreSQL database. It unconditionally replaces the existing `.env`, which can destroy previously secured configuration. No restrictive `umask` or explicit `chmod 600` is applied. Consequently, file accessibility depends on the user's ambient umask and directory permissions. On a multi-user system, other local users may be able to read the credentials. Although hostnames are set to `localhost`, actual exposure depends on the Docker Compose and application binding configuration in the external Hummingbot API repository. If ports are bound to non-loopback interfaces, accessed through a development proxy, or forwarded from a r ...[truncated 1410 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Generate unique cryptographically random credentials for every installation. 2. Set `umask 077` before creating secret-bearing files and explicitly apply mode `0600`. 3. Refuse to overwrite an existing `.env` unless the user explicitly requests replacement. 4. Separate non-secret endpoint configuration from secret values. 5. Bind all development services explicitly to `127.0.0.1`. 6. Add startup validation that rejects default credentials when a service is configured on a non-loopback interface. 7. Prefer a supported local secret store or protected environment-file mechanism. 8. Redact credentials from logs, verification output, and documentation examples. 9. Treat the Docker group and any container-mounted `.env` file as privileged access boundaries. Example: ```bash umask 077 API_PASSWORD="$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))')" BROKER_PASSWORD="$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))')" install -m 600 /dev/null "$API_DIR/.env" cat > "$API_DIR/.env" <<EOF USERNAME=admin PASSWORD=$API_PASSWORD BROKER_USERNAME=admin BROKER_PASSWORD=$BROKER_PASSWORD GATEWAY_URL=http://127.0.0.1:15888 EOF ``` ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/test_integration.py:26
Finding
API credentials can be sent to an attacker-controlled plaintext endpoint<![CDATA[ ## Vulnerability Details **File Location**: `scripts/test_integration.py:26-60` and `scripts/test_integration.py:114-136`; parallel behavior appears in `scripts/verify_build.sh:52-65` and `scripts/verify_build.sh:261-262` **Vulnerability Type**: Credential disclosure through configurable HTTP destinations **Risk Level**: High ### Vulnerable Code ```python API_URL = os.environ.get("HUMMINGBOT_API_URL", "http://localhost:8000") GATEWAY_URL = os.environ.get("GATEWAY_URL", "http://localhost:15888") API_USER = os.environ.get("API_USER") or os.environ.get("API_USER", "admin") API_PASS = os.environ.get("API_PASS") or os.environ.get("API_PASS", "admin") # Load .env file (first match wins) _ENV_PATHS = [ "hummingbot-api/.env", os.path.expanduser("~/.hummingbot/.env"), ".env", ] for _p in _ENV_PATHS: if os.path.exists(_p): with open(_p) as _f: for _line in _f: _line = _line.strip() if _line and not _line.startswith("#") and "=" in _line: k, _, v = _line.partition("=") os.environ.setdefault(k.strip(), v.strip().strip('"').strip("'")) break API_URL = os.environ.get("HUMMINGBOT_API_URL", API_URL) API_USER = os.environ.get("API_USER") or os.environ.get("API_USER", USERNAME) API_PASS = os.environ.get("API_PASS") or os.environ.get("API_PASS", PASSWORD) def http_get(url, auth=None, timeout=5): """Simple HTTP GET. Returns (status_code, body_str) or raises.""" req = urllib.request.Request(url) if auth: import base64 creds = base64.b64encode(f"{auth[0]}:{auth[1]}".encode()).decode() req.add_header("Authorization", f"Basic {creds}") try: with urllib.request.urlopen(req, timeout=timeout) as resp: return resp.status, resp.read().decode() ``` ```python status, body = http_get( f"{API_URL}/gateway/status", auth=(API_USER, API_PASS) ) status, body = http_get( f"{API_URL}/connectors/", ...[truncated 2692 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Parse API URLs and permit only `127.0.0.1`, `localhost`, and `::1` by default. 2. Require an explicit `--allow-remote-api` option for any non-loopback destination. 3. Require HTTPS for non-loopback endpoints. 4. Reject URLs containing user information, unexpected schemes, or ambiguous host representations. 5. Disable redirects for authenticated requests, or independently validate every redirect destination before forwarding an Authorization header. 6. Load only the required credential keys from an explicitly selected API environment file. 7. Remove fallback scanning of `~/.hummingbot/.env`. 8. Correct the undefined variable bug by reading `USERNAME` and `PASSWORD` from `os.environ`. 9. Prefer scoped, short-lived tokens over reusable Basic-auth passwords. 10. Warn and stop before transmitting credentials over plaintext HTTP to a remote host. For example: ```python from urllib.parse import urlparse import ipaddress parsed = urlparse(API_URL) host = parsed.hostname is_loopback = host == "localhost" if host: try: is_loopback = is_loopback or ipaddress.ip_address(host).is_loopback except ValueError: pass if not is_loopback and parsed.scheme != "https": raise RuntimeError("Remote authenticated API endpoints must use HTTPS") ``` ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/select_branches.sh:137
Finding
Branch state is stored as executable shell code and later sourced<![CDATA[ ## Vulnerability Details **File Location**: `scripts/select_branches.sh:137-143`, with execution sinks in `scripts/install_all.sh:47-49`, `scripts/build_all.sh:57-58`, and `scripts/verify_build.sh:46-47` **Vulnerability Type**: Shell command injection through an executable configuration file **Risk Level**: High ### Vulnerable Code ```bash # Save to .dev-branches cat > "$WORKSPACE/.dev-branches" << EOF # Hummingbot dev branch selections # Generated: $(date -u +%Y-%m-%dT%H:%M:%SZ) HBOT_BRANCH=$HBOT_BRANCH GATEWAY_BRANCH=$GATEWAY_BRANCH API_BRANCH=$API_BRANCH EOF ``` The generated data file is subsequently interpreted as shell code: ```bash # Load saved branch selections if present if [ -f "$WORKSPACE/.dev-branches" ]; then source "$WORKSPACE/.dev-branches" echo "Loaded branch config from .dev-branches:" ``` ```bash # Load saved branch selections [ -f "$WORKSPACE/.dev-branches" ] && source "$WORKSPACE/.dev-branches" ``` ### Technical Analysis Branch values are serialized without shell escaping and then loaded using `source`. A sourced file is executable code, not data: command substitutions, separators, redirections, function definitions, and arbitrary commands in that file are interpreted by the current shell. The command-line branch path accepts values directly: ```bash --hummingbot) HBOT_BRANCH="$2"; shift 2 ;; --gateway) GATEWAY_BRANCH="$2"; shift 2 ;; --api) API_BRANCH="$2"; shift 2 ;; ``` When all three values are supplied, the script skips the interactive branch-list validation. Git operations may reject many malformed branch names, but using Git validation as shell-syntax validation is unsafe. More directly, any process or repository automation capable of modifying `$WORKSPACE/.dev-branches` can obtain command execution when a developer later runs installation, build, or verification. The state only needs to store three branch strings. Executing it as shell code is unnecessary and exceeds minimum privilege. ### Attack Pa ...[truncated 1169 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not use `source` to read configuration data. 2. Store selections in JSON, TOML, or another non-executable format and parse them with a dedicated parser. 3. Validate all branch names with both `git check-ref-format --branch` and a conservative application allowlist. 4. Reject newlines, carriage returns, whitespace, command substitutions, shell metacharacters, and leading option characters. 5. Write the state file atomically with restrictive permissions. 6. Verify that the file is a regular file owned by the current user and is not a symbolic link before reading it. 7. If shell serialization is unavoidable, use `printf '%q'`, but parsing non-executable data remains preferable. Example JSON storage: ```bash umask 077 python3 - "$WORKSPACE/.dev-branches.json" \ "$HBOT_BRANCH" "$GATEWAY_BRANCH" "$API_BRANCH" <<'PY' import json, os, sys, tempfile path = sys.argv[1] data = { "hummingbot": sys.argv[2], "gateway": sys.argv[3], "api": sys.argv[4], } with open(path, "w", encoding="utf-8") as f: json.dump(data, f) f.write("\n") os.chmod(path, 0o600) PY ``` ]]>

T08 · Insecure Dependencies

Warning
Location
scripts/install_deps.sh:99
Finding
Mutable and unpinned third-party dependency installers reduce supply-chain integrity<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install_deps.sh:99-124` and `scripts/install_deps.sh:192-205`; related lifecycle execution occurs in `scripts/install_all.sh:82-112` and `scripts/install_all.sh:141-186` **Vulnerability Type**: Unpinned and unverified dependency installation **Risk Level**: Medium ### Vulnerable Code ```bash if [ "$OS" = "Darwin" ]; then if [ "$ARCH" = "arm64" ]; then url="https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh" else url="https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh" fi elif [ "$OS" = "Linux" ]; then if [ "$ARCH" = "aarch64" ]; then url="https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh" else url="https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh" fi fi installer="/tmp/miniconda_install.sh" info "Downloading $url..." curl -fsSL "$url" -o "$installer" PATH="/opt/homebrew/bin:/usr/local/bin:$PATH" \ bash "$installer" -b -p "$HOME/miniconda3" ``` ```bash if command -v npm &>/dev/null; then info "Installing pnpm via npm..." npm install -g pnpm export PATH="$(npm root -g)/.bin:$PATH" ok "pnpm $(pnpm --version) installed" ``` Repository-controlled lifecycle and installation commands are also executed: ```bash cd "$HBOT_DIR" make install ``` ```bash cd "$GATEWAY_DIR" step "pnpm install" pnpm install 2>&1 | tail -5 step "pnpm build (TypeScript → dist/)" pnpm build 2>&1 | tail -5 step "Gateway setup (non-interactive defaults)" pnpm run setup:with-defaults 2>&1 | grep -E "✓|✗|Error|conf|cert" | head -10 || true ``` ### Technical Analysis The Miniconda installer uses mutable `latest` URLs and executes a predictable temporary file without checksum or signature validation. The predictable path `/tmp/miniconda_install.sh` also creates an avoidable local race and symlink risk on systems where another user can manipulate the path. `npm install -g pnpm` installs whichever version is cur ...[truncated 1851 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace every `latest` URL with a fixed release version. 2. Verify Miniconda installers against publisher-provided SHA-256 values or signatures. 3. Use `mktemp` instead of a fixed file under `/tmp`. 4. Set restrictive permissions and clean temporary files through a trap. 5. Pin pnpm to a reviewed version, for example through Corepack and a `packageManager` declaration. 6. Use lockfiles with frozen installation modes, such as `pnpm install --frozen-lockfile`. 7. Pin Python and Conda dependencies with hashes or lockfiles where supported. 8. Prefer immutable Git commit IDs over mutable branches for reviewed builds. 9. Display incoming repository changes and require confirmation before executing changed lifecycle scripts. 10. Run third-party builds in disposable, least-privilege containers without access to host credentials or the Docker socket. 11. Avoid suppressing or truncating security-relevant installer output, because doing so can conceal warnings and lifecycle activity. Example temporary-file hardening: ```bash installer="$(mktemp "${TMPDIR:-/tmp}/miniconda.XXXXXX.sh")" trap 'rm -f "$installer"' EXIT chmod 600 "$installer" curl --fail --show-error --location "$PINNED_URL" -o "$installer" printf '%s %s\n' "$EXPECTED_SHA256" "$installer" | sha256sum --check - bash "$installer" -b -p "$HOME/miniconda3" ``` ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (54)

External Script Fetching

High
Category
Supply Chain
Content
### Step 3: Confirm local hummingbot is in use

```bash
curl -s http://localhost:8000/health | python3 -m json.tool
```

Check API logs for hummingbot version on startup.
Confidence
90% confidence
Finding
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

External Script Fetching

High
Category
Supply Chain
Content
API_URL="${HUMMINGBOT_API_URL:-http://localhost:8000}"

if curl -s --max-time 3 "$API_URL/health" &>/dev/null; then
  RUNNING=true
  DETAIL=$(curl -s --max-time 3 "$API_URL/health" 2>/dev/null)
else
Confidence
90% confidence
Finding
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Credential Access

High
Category
Privilege Escalation
Content
# Always write the dev .env so DATABASE_URL and BROKER_HOST point to localhost.
  # The Docker-based setup writes internal hostnames (hummingbot-postgres, emqx)
  # which break when running the API from source outside of Docker.
  cat > "$API_DIR/.env" << EOF
USERNAME=admin
PASSWORD=admin
CONFIG_PASSWORD=admin
Confidence
99% confidence
Finding
The script writes predictable credentials directly into the .env file: USERNAME=admin, PASSWORD=admin, and CONFIG_PASSWORD=admin. If the API, broker, or related services are reachable beyond the local machine, these defaults make compromise trivial; even in local development, they normalize insecure secrets and can be accidentally reused or committed.

Chaining Abuse

High
Category
Tool Misuse
Content
# Install nvm then node
  info "Installing nvm first..."
  curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
  export NVM_DIR="$HOME/.nvm"
  [ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"
  nvm install 22
Confidence
99% confidence
Finding
The curl-to-bash chain removes any review boundary between retrieval and execution, making exploitation trivial if the fetched content is malicious. This is a classic command-chaining anti-pattern and directly increases the blast radius of any supply-chain or transport compromise.

Missing User Warnings

High
Confidence
99% confidence
Finding
The Docker installation path on Linux downloads a remote script and pipes it into sh, then adjusts local privileges via docker group membership. This is especially dangerous because Docker installation typically requires elevated changes, so a compromised installer can make broad system modifications or establish persistence.

Chaining Abuse

High
Category
Tool Misuse
Content
fi
  elif [ "$OS" = "Linux" ]; then
    info "Installing Docker Engine..."
    curl -fsSL https://get.docker.com | sh
    sudo usermod -aG docker "$USER" 2>/dev/null || true
    ok "Docker installed — log out and back in for group membership"
    INSTALLED+=("docker")
Confidence
99% confidence
Finding
The curl-to-sh chain for Docker is especially severe because it targets system-level installation and often runs commands that require or lead to elevated privileges. A malicious or tampered response would be executed immediately with no opportunity for validation, enabling full host compromise.

Credential Access

High
Category
Privilege Escalation
Content
API_USER = os.environ.get("API_USER") or os.environ.get("API_USER", "admin")
API_PASS = os.environ.get("API_PASS") or os.environ.get("API_PASS", "admin")

# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
Confidence
91% confidence
Finding
The script falls back to hardcoded default credentials ('admin'/'admin') for authenticated API access. In a developer stack this may seem convenient, but if the API is exposed beyond localhost or reused in less controlled environments, predictable credentials can allow unauthorized access to API and gateway-related endpoints.

Credential Access

High
Category
Privilege Escalation
Content
# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
    ".env",
]
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
    ".env",
]
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
    ".env",
]
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
    ".env",
]
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
    ".env",
]
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
    ".env",
]
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
# Load .env file (first match wins)
_ENV_PATHS = [
    "hummingbot-api/.env",
    os.path.expanduser("~/.hummingbot/.env"),
    ".env",
]
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
API_USER="${API_USER:-admin}"
API_PASS="${API_PASS:-admin}"

# Load .env
for _p in "$API_DIR/.env" "$HOME/.hummingbot/.env" ".env"; do
  if [ -f "$_p" ]; then
    while IFS= read -r line; do
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Static analysis

No suspicious patterns detected.