Skip to main content
The vault is where your credentials are stored. You can add entries through our UI or API. When adding an entry to your vault through our API, you have to encrypt the user name, password, and any tfa_secret before sending them to us. You can find your encryption key in your workspace settings. Here’s a code snippet you can use:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import binascii, json

def encrypt_message(message: dict, key_hex: str) -> str:
    key = binascii.unhexlify(key_hex)  # 32‑byte AES‑256 key
    iv = get_random_bytes(12)          # 96‑bit IV for GCM
    serialized = json.dumps(message)   # ensure deterministic encoding
    cipher = AES.new(key, AES.MODE_GCM, iv)
    ciphertext, tag = cipher.encrypt_and_digest(serialized.encode())
    return iv.hex() + ciphertext.hex() + tag.hex()

Security Overview

Our credential vault adopts the envelope‑encryption pattern recommended by NIST SP 800‑57 and mirrors proven designs used by services like AWS Secrets Manager and Google Secret Manager. Plaintext credentials are never persisted or transmitted to our servers. This page outlines the key design choices behind that guarantee.

Key hierarchy

  • Per‑user data key (AES‑256‑GCM)
    • Can be generated and managed in your workspace settings
    • Stored only in encrypted form.
    • Can be rotated at any time from the dashboard.
  • Vault master key – a 256‑bit key held in AWS KMS/HSM.
    • Used solely to encrypt/decrypt each user’s data key.
    • Stored as a Kubernetes Secret

Secret ingestion flow

  1. Client encrypts the credential locally with their data key.
  2. The ciphertext is sent to the vault. The vault verifies the envelope and stores it verbatim.
  3. The vault keeps a mapping: user‑id → { encrypted_data_key, ciphertext, metadata }.
The vault rejects any credential that is not already encrypted with the correct data key for that user.

Runtime access

When a browser agent needs a credential:
  1. The agent requests the ciphertext.
  2. The vault decrypts the data key entirely in‑memory using the master key mounted from the Kubernetes Secret.
  3. The agent uses it, and immediately zeroises the buffer.
  4. No decrypted value is logged, cached, or exported.

Key rotation

Users may rotate their data key at any time. The vault automatically:
  1. Generates a new data key.
  2. Decrypts each stored secret with the old key within a secure enclave.
  3. Re‑encrypts the secret with the new key and updates metadata.
  4. Shreds the old key material.

Threat model & mitigations

ThreatMitigation
Database breachSecrets remain encrypted with per‑user keys; attacker lacks the data keys.
Compromise of a single data keyBlast radius limited to that user only.
Master key exposureMaster key stored in KMS with hardware isolation & strict IAM; usage logged and alerted.
Replay/tamperingAES‑GCM tag validation prevents bit‑flips or stale ciphertext from being accepted.
For security questions or key‑rotation assistance, email founders@cloudcruise.com.

Credential Configuration

Vault entries support comprehensive authentication and session management options to accommodate different website requirements and security needs.

Two-Factor Authentication (TFA)

CloudCruise supports multiple TFA methods for automated login flows:

Authenticator App (TOTP)

  • Method: AUTHENTICATOR
  • Setup: Provide the TOTP secret key from your authenticator app
  • Usage: CloudCruise generates time-based one-time passwords automatically during login

Email TFA

  • Method: EMAIL
  • Setup Options:
    1. Register the CloudCruise email directly with the target account
    2. Forward TFA emails from your account to the CloudCruise email
  • Usage: CloudCruise automatically processes TFA codes received via email
  • Method: MAGIC_LINK
  • Setup Options:
    1. Register the CloudCruise email directly with the target account
    2. Forward magic-link emails from your account to the CloudCruise email
  • Usage: CloudCruise extracts the login link from the email and navigates to it during the TFA node

SMS TFA

  • Method: SMS
  • Setup Options:
    1. Register the CloudCruise phone number directly with the target account
    2. Forward TFA SMS messages to the CloudCruise phone number
  • Usage: CloudCruise automatically processes TFA codes received via SMS

Session Persistence

Control how browser state is maintained across workflow executions:

Storage Options

  • Cookies: Maintains authentication cookies between runs
  • Local Storage: Preserves local storage data across sessions
  • Session Storage: Maintains session storage (typically cleared between browser sessions)

Concurrent Sessions

  • Allow Multiple Sessions: Enable parallel workflow executions using the same credentials
  • Max Concurrent Sessions: Limit the number of simultaneous sessions (leave empty for no limit)
  • Prevent Concurrency During Login: Block other sessions while login is in progress

Session Expiration

Configure automatic session cleanup:
  • Expiry from Last Use: Sessions expire after period of inactivity
  • Expiry from Creation: Sessions expire after absolute time from creation

Credential Pooling

Distribute runs across multiple accounts by passing an array of permissioned_user_id values instead of a single string when starting a run:
{
  "run_input_variables": {
    "USER": [
      "user-id-1",
      "user-id-2",
      "user-id-3"
    ]
  }
}
CloudCruise uses round-robin selection to distribute runs across the provided credentials. Each credential’s concurrency limits and session settings are respected individually. This helps prevent rate limiting on target websites and provides fault tolerance if one credential becomes unavailable.

Proxy Configuration

Override workflow proxy settings at the credential level:

Proxy Modes

Set a credential’s proxy via proxy_setting (it overrides the workflow-level proxy for any run that uses this credential). The meaning of proxy_value depends on the mode:
proxy_settingproxy_valueBehavior
randomA random proxy from CloudCruise’s managed pool
statictarget IP addressThe managed proxy closest to that IP — ideal for geo-restricted content or region-specific testing
countrycountry code (e.g. US)A managed proxy in that country
customproxy URLYour own proxy infrastructure (Enterprise) — see Custom URL below
Proxy priority: credential-level proxy settings take precedence over workflow-level configuration, allowing fine-grained control over network routing for specific accounts.

Custom URL (bring-your-own proxy)

Enterprise customers can point CloudCruise at their own proxy infrastructure instead of the managed pool. Select Custom URL in the credential’s proxy dropdown and provide a URL. Supported transports and authentication:
FormAuthUse case
socks5://user:pass@host:portSOCKS5 username/passwordMost residential and self-hosted SOCKS proxies
socks5://host:portNone (IP allowlist)SOCKS proxies that whitelist worker egress IPs
http://user:pass@host:portHTTP CONNECT + Basic authSquid, Tinyproxy, most corporate egress gateways
http://host:portNone (IP allowlist)Corporate gateways that whitelist worker egress IPs
https://user:pass@host:portHTTP CONNECT inside TLS + Basic authProxies that require TLS encryption to the proxy itself
https://host:portNone (IP allowlist)TLS-to-proxy with IP allowlist
Not supported (today): NTLM / Negotiate / Kerberos auth, HTTP Digest auth, and bearer-token / custom-header authentication. If your proxy requires one of these, contact us — we can scope a follow-up. UDP behavior: Preferred: a SOCKS5 proxy that supports UDP (UDP ASSOCIATE). This preserves full UDP egress — QUIC, WebRTC, and UDP DNS. If your proxy is HTTP CONNECT or a TCP-only SOCKS deployment, custom proxying still works, but the worker automatically falls back to DNS-over-TCP: HTTP/3 (QUIC) degrades to HTTP/2 over TCP (pages still load) and WebRTC-over-UDP is unavailable.
  • HTTP CONNECT proxies cannot carry UDP by spec. CloudCruise routes DNS over TCP through the proxy so resolution still works; Chrome’s QUIC attempts fail fast and fall back to TCP/HTTP2 automatically; WebRTC over UDP is unavailable.
  • SOCKS proxies vary — the spec supports UDP via UDP ASSOCIATE but many real-world deployments are TCP-only. On the first activation of a custom SOCKS proxy CloudCruise probes UDP support via a short DNS query through the proxy. If UDP works, full UDP egress (QUIC, WebRTC, UDP DNS) is preserved. If UDP doesn’t work, the worker reactivates with TCP DNS — same fallback as HTTP CONNECT. The probe result is cached for 24 h.
What CloudCruise does with the URL:
  • The URL is encrypted at rest with the workspace’s AES-256-GCM key (same protection as vault passwords).
  • On every dispatch, the URL is re-validated against SSRF rules: private/loopback/link-local IPs (incl. cloud metadata services at 169.254.169.254), .local/.internal/etc. suffixes, and hosts that resolve to CloudCruise infrastructure are all rejected.
  • For http/socks5 schemes, the hostname is DNS-pinned at dispatch to eliminate rebinding windows. For https, the hostname is preserved for TLS SNI validation.
Trust model:
  • Target-site traffic flows through your proxy. The proxy operator can see and log everything the worker sends to and receives from the target site for plain HTTP. For HTTPS, traffic is end-to-end encrypted to the target — your proxy sees the SNI and connect-traffic envelope but not the request/response body unless it performs TLS interception with a CA that the worker trusts (which is not possible on CloudCruise-managed workers).
  • CloudCruise infrastructure traffic (auth tokens, websocket, telemetry, screenshot uploads) is bypassed — it never traverses your proxy. The bypass covers *.cloudcruise.com, *.cloudcruise.app, and your configured Supabase host.
  • If sing-box (the OS-level proxy router) dies mid-session, the worker fails the run rather than reverting to direct internet egress. This protects compliance use cases where all automation traffic must stay inside the customer’s network.
Compliance note: when a custom proxy is active, traffic to the target site is egressing through customer-controlled infrastructure. The customer is the data controller for that egress, including any credentials submitted to the target site through their proxy.