CVE-2026-71495 Security Alert: CRITICAL Vulnerability

Urgent: CVE-2026-71495 requires immediate attention.

· 7 min read

Executive Summary

CVE-2026-71495 is a critical server-side request forgery (SSRF) flaw in Wanderer, a self-hosted trail database. In vulnerable deployments, an unauthenticated attacker can send a crafted request to POST /api/v1/trail/download and force the server to fetch attacker-chosen URLs. Because the handler passes the user-controlled url field directly to event.fetch() and returns the response, the issue can expose internal services, cloud metadata endpoints, and other network destinations.

This is especially dangerous for solo developers and small teams running Wanderer alongside databases, admin panels, or internal tools on the same network. Even without confirmed in-the-wild exploitation, the severity is CRITICAL (CVSS 10) and the blast radius can include secret leakage, internal reconnaissance, and denial of service. The issue is fixed in Wanderer 0.20.0.

Immediate Action

  • Upgrade immediately to Wanderer 0.20.0 or later. If you cannot patch right away, take the service offline or isolate it from internal networks until fixed.
  • Block unauthenticated access to /api/v1/trail/download at your reverse proxy or firewall if you need a short-term containment measure.
  • Set PUBLIC_PRIVATE_INSTANCE=true if your deployment supports it and this aligns with your intended access model.
  • Restrict outbound network access from the Wanderer container/host to prevent requests to internal IP ranges, metadata services, and sensitive backends.
  • Review logs for unusual POSTs to /api/v1/trail/download and unexpected outbound requests to internal hosts such as db:8090, search:7700, or cloud metadata addresses.
  • See the vendor advisory: Vendor advisory / release notes

Affected Versions

  • wanderer@<0.20.0 vulnerable when PUBLIC_PRIVATE_INSTANCE is not set to true.
  • wanderer@0.20.0 and later are reported fixed.
  • If you are unsure of your deployment mode, treat the instance as vulnerable until verified.

Resolution Guide

JavaScript / Node.js

# npm
npm install wanderer@0.20.0

# yarn
yarn add wanderer@0.20.0

# pnpm
pnpm add wanderer@0.20.0

Python (if packaged through a wrapper or deployment script)

# pip
pip install --upgrade wanderer==0.20.0

# pipx
pipx upgrade wanderer

Java (if your stack consumes a bundled service or container image, update the image/tag rather than a library)

# Maven/Gradle users should update the service artifact or container reference to 0.20.0+
# Example placeholder:
# com.example:wanderer-service:0.20.0

Linux package managers (if you deploy from a distro package or internal repo)

# apt
sudo apt update
sudo apt install --only-upgrade wanderer

# yum/dnf
sudo yum update wanderer
# or
sudo dnf upgrade wanderer

Docker

# Pull the fixed image tag
docker pull wanderer:0.20.0

# Example compose change
image: wanderer:0.20.0

Hardening examples

# Set the instance mode explicitly if appropriate
PUBLIC_PRIVATE_INSTANCE=true

# Example reverse proxy rule: block the vulnerable endpoint until patched
location = /api/v1/trail/download {
    deny all;
}

Minimal code fix pattern (for maintainers reviewing the patch)

// BAD: attacker-controlled URL passed directly to fetch
const resp = await event.fetch(body.url);

// GOOD: validate and restrict destination before fetch
const allowed = new Set(["https://trusted.example.com"]);
const url = new URL(body.url);

if (!allowed.has(url.origin)) {
  return new Response("Blocked", { status: 400 });
}

const resp = await event.fetch(url.toString());

Detection & Verification

Check your version

# If installed via container or binary, check the running tag/version
docker ps --format '{{.Image}} {{.Names}}'
wanderer --version 2>/dev/null || true

Search configuration for the risky mode

grep -R "PUBLIC_PRIVATE_INSTANCE" -n .env* config* docker-compose* 2>/dev/null

Look for the vulnerable handler in source or vendor bundles

grep -R "trail/download" -n .
grep -R "event.fetch(.*url" -n .

Dependency and image checks

# npm audit / package lock review
npm audit
npm ls wanderer

# Container image inspection
docker image inspect wanderer:0.20.0 | head

Verify the fix

# Confirm the service rejects or sanitizes arbitrary URLs
curl -i -X POST https://YOUR-HOST/api/v1/trail/download \
  -H 'Content-Type: application/json' \
  --data '{"url":"http://169.254.169.254/latest/meta-data/"}'

A patched instance should not return fetched internal content. It should reject the request, sanitize the destination, or require a trusted allowlist. Also confirm that your deployment no longer allows outbound access to internal ranges from the Wanderer process.

Risk and Impact

This flaw can let an unauthenticated attacker make your Wanderer server act like a proxy into your private network. The most likely outcomes are exposure of internal service data, cloud metadata theft, and reconnaissance of ports and hosts that should never be reachable from the internet.

For small teams, the blast radius can be larger than it looks: one compromised app can reveal database credentials, internal dashboards, API keys, or infrastructure details that help an attacker move deeper. If the service has broad network reach, this can also be used for repeated requests that degrade performance or trigger denial of service.

Keep reading