Shadowbroker Backend APIs Security Measures: A Defense-in-Depth Analysis
Shadowbroker protects its HTTP API surface with a layered defense-in-depth strategy that combines static secrets, scoped tokens, runtime host validation, cryptographic request signing, and transport-tier policies, all centralized in backend/auth.py.
The Shadowbroker project by BigBodyCobain implements a robust security model for its backend services. Understanding these Shadowbroker backend APIs security measures is critical for operators deploying the mesh network infrastructure, as the system handles privileged operations like gate entry and mesh management through strictly controlled authentication flows.
Core Authentication Layers
The authentication system in backend/auth.py employs multiple verification methods depending on the client type and required access level.
Admin-Key Authentication
Privileged endpoints require a static Admin Key passed via the X-Admin-Key header. The key is loaded from environment variables or the generated settings object at runtime.
In backend/auth.py, the _current_admin_key function (lines 61-66) retrieves this value, while _check_scoped_auth (lines 50-69) validates the header against the required scope for the request path.
curl -X POST https://api.shadowbroker.example/api/wormhole/gate/enter \
-H "X-Admin-Key: ${ADMIN_KEY}"
Scoped Admin Tokens
For fine-grained delegation, Shadowbroker supports scoped tokens that map specific capabilities to API keys. The _scoped_admin_tokens dictionary (lines 93-112) defines which tokens grant access to specific scopes like gate or mesh.
The _required_scope_for_request function (lines 15-26) derives the necessary scope from the URL path, ensuring that a token with only gate scope cannot access mesh endpoints.
TOKEN=$(cat token.txt) # token generated by the admin UI
curl -H "X-Admin-Key: $TOKEN" \
https://api.shadowbroker.example/api/mesh/gate/create
Debug and Local Operator Trust
Development environments support an insecure admin mode controlled by ALLOW_INSECURE_ADMIN and MESH_DEBUG_MODE environment variables. The _validate_insecure_admin_startup function (lines 70-86) explicitly refuses to start if insecure mode is enabled without debug mode, preventing accidental production exposure.
For trusted local operations, _is_trusted_local_runtime_host (lines 59-62) validates requests originating from the loopback interface or trusted Docker bridge IPs when SHADOWBROKER_TRUST_DOCKER_BRIDGE_LOCAL_OPERATOR is set. The _require_local_operator decorator (lines 65-74) enforces this policy on sensitive endpoints.
Cryptographic Request Verification
Remote agents authenticate using cryptographic signatures rather than static keys, preventing credential transmission over the wire.
OpenClaw HMAC Authentication
The _verify_openclaw_hmac function (lines 14-78) validates requests from remote agents (e.g., OpenClaw) using HMAC-SHA256 signatures. Each request must include:
- Timestamp (
X-SB-Timestamp): Unix timestamp for freshness validation - Nonce (
X-SB-Nonce): Unique value preventing replay attacks - Signature (
X-SB-Signature): HMAC over the stringMETHOD|path|timestamp|nonce|body-hash
Critically, if an Authorization header is present, the request is rejected to prevent accidental LLM-API key leakage.
import time, uuid, hashlib, hmac, requests
secret = "my_shared_hmac_secret"
method = "POST"
path = "/api/ai/infer"
body = b'{"prompt":"Hello"}'
body_hash = hashlib.sha256(body).hexdigest()
ts = str(int(time.time()))
nonce = uuid.uuid4().hex[:16]
msg = f"{method}|{path}|{ts}|{nonce}|{body_hash}"
sig = hmac.new(secret.encode(), msg.encode(), hashlib.sha256).hexdigest()
headers = {
"X-SB-Timestamp": ts,
"X-SB-Nonce": nonce,
"X-SB-Signature": sig,
"Content-Type": "application/json",
}
r = requests.post("https://api.shadowbroker.example"+path, data=body, headers=headers)
print(r.json())
Replay Attack Prevention
The _openclaw_nonce_cache maintains a time-limited store of previously seen nonces, ensuring that captured requests cannot be replayed by attackers even if the timestamp is valid.
Transport-Tier Policy Enforcement
Shadowbroker implements privacy lanes through transport-tier policies defined in the route table (_ROUTE_TRANSPORT_POLICY). Each API route is associated with a tier:
private_strong: Highest security requirementsprivate_transitional: Intermediate trust levelprivate_control_only: Administrative commands only
The _resolve_transport_tier function (lines 332-336) inspects the required tier for incoming requests, while _require_openclaw_or_local (lines 84-106) validates that the client's network path meets the enforced tier before processing. This guarantees that strong-private traffic never traverses public internet paths.
Startup Validators and Secret Management
Security configuration is validated at process initialization to prevent deployment of weak credentials.
The _validate_admin_startup function (lines 37-55) ensures the admin key contains at least 32 bytes of entropy. Similarly, _validate_peer_push_secret (lines 109-165) verifies the presence of a strong peer-push secret, generating a cryptographically secure random value and persisting it to .env if missing.
These validators run before the FastAPI application mounts its dependencies in backend/main.py, ensuring no endpoints are exposed with default or weak credentials.
Practical Implementation Examples
When operating Shadowbroker in containerized environments, verify that bridge networks are properly isolated:
# Assume the backend is reachable on the Docker bridge IP 172.17.0.2
curl http://172.17.0.2/api/mesh/gate/create # → 403 Forbidden (no admin key)
Operators should configure the environment variables in services/config.py, which provides the get_settings() dependency that injects these security parameters throughout the application.
Summary
- Multi-layer authentication: Static admin keys, scoped tokens, and HMAC-signed requests cover different trust scenarios.
- Runtime protections: Local-operator trust checks and transport-tier policies enforce network-level boundaries.
- Cryptographic hardening: HMAC-SHA256 with timestamp and nonce validation prevents replay attacks and credential leakage.
- Safe defaults: Startup validators in
backend/auth.pyrefuse to launch without strong secrets or with dangerous debug configurations enabled.
Frequently Asked Questions
How does Shadowbroker prevent accidental API key leakage in LLM integrations?
The _verify_openclaw_hmac function explicitly rejects any request containing an Authorization header when HMAC authentication is expected. This prevents developers from accidentally sending OpenAI or other LLM API keys to the Shadowbroker endpoint instead of the intended service.
What is the minimum required length for the Shadowbroker admin key?
According to _validate_admin_startup in backend/auth.py, the admin key must be at least 32 bytes in length. If no key is configured, the system generates a secure random value automatically during the first startup sequence.
Can I run Shadowbroker without authentication for local development?
You can enable insecure mode by setting both ALLOW_INSECURE_ADMIN=True and MESH_DEBUG_MODE=True. However, the _validate_insecure_admin_startup function strictly requires both flags; the service will refuse to start if insecure admin is enabled without debug mode, preventing accidental production deployment of insecure configurations.
How are replay attacks prevented in the OpenClaw authentication flow?
Each OpenClaw request must include a unique nonce in the X-SB-Nonce header. The server maintains an _openclaw_nonce_cache with time-to-live expiration that tracks previously used nonces. Even if an attacker captures a valid HMAC-signed request, the server rejects duplicate nonces, rendering replay attacks ineffective.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →