A microcontroller side project got a CVE for letting its `http_request` helper fetch whatever URL you hand it
rt-claw is a zevorn-authored, OpenClaw-inspired embedded AI-assistant runtime targeted at ESP32-class microcontrollers — think 'ChatGPT-on-a-dev-board' with tool-use, memory, and networking baked in. CVE-2026-16125 sits in the same claw/services/tools/net.c code path as the sibling advisories (16200/16201/16204), specifically the claw_net_get / claw_net_post helpers exposed to the LLM tool-invocation layer. Because those helpers accept an attacker-influenced URL with no allow-listing, the device can be coaxed into issuing HTTP requests to arbitrary hosts — the textbook CWE-918 SSRF shape. All versions up to and including 0.2.0 are affected; no fixed release exists as of disclosure.
The vendor-blessed CVSS 7.3 / HIGH is generous. Yes, the vector is AV:N/AC:L/PR:N/UI:N — unauthenticated network reach — but every metric that matters is C:L/I:L/A:L, because the *thing* being exploited is a solder-your-own hobby board, not an enterprise fleet. Score-inflation on GitHub-hosted micro-projects is standard; the practitioner-relevant read here is that this is a *product-fit* HIGH masquerading as an *enterprise-risk* HIGH. If you don't ship rt-claw firmware, this CVE does not belong in your Monday queue.
3 steps from start to impact.
Reach an rt-claw HTTP interface
curl or a crafted chat prompt is sufficient tooling — no exploit weaponization is required, this is a design flaw.- rt-claw ≤ 0.2.0 firmware flashed on a reachable ESP32
- Network path to the device's chat/tool endpoint
- Devices sit on home Wi-Fi or lab benches, not enterprise DMZs
- No default-deploy pattern in corporate environments
Coerce claw_net_get / claw_net_post to fetch an internal URL
net_get/net_post with a URL parameter. Attacker submits a prompt or direct tool call requesting http://169.254.169.254/, http://192.168.1.1/, or an internal service address. net.c performs no scheme/host validation, no allow-list check, and no metadata-endpoint block. The ESP32 issues the request from its position on the LAN.- Prompt injection or direct tool-invoke access
- Internal target reachable from the device's network segment
- ESP32 devices are rarely dual-homed onto sensitive infrastructure segments
- No cloud metadata service exists on an ESP32 — the classic AWS/GCP SSRF pivot doesn't apply
Exfiltrate the response
- Response body small enough to fit in the model context window
- Tiny buffers on ESP32-class hardware truncate most useful responses
- Confidentiality-only — no write, no code exec
The supporting signals.
| In-the-wild exploitation | None observed. No campaign, no honeypot hits, no CTI vendor reporting. |
|---|---|
| Public PoC | No dedicated PoC repo. Trivial to reproduce — call the exposed net_get tool with any URL. |
| EPSS | 0.00288 (~0.3%) — bottom-tier exploitation likelihood |
| KEV status | Not listed and no realistic path to listing |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L → vendor 7.3. Unauth network reach but only Low impact triads. |
| Affected versions | zevorn rt-claw ≤ 0.2.0 (all releases to date) |
| Fixed version | None published. Vendor has not responded to the advisory chain (16125/16196/16200/16201/16204). |
| Exposure / install base | Hobbyist ESP32 firmware. No Shodan/Censys fingerprint — devices sit behind NAT on home networks. Enterprise install base effectively zero. |
| Disclosed | 2026-07-18 via VulDB / GitHub Advisory Database (unreviewed) |
| Sibling CVEs | CVE-2026-16200 (authz), CVE-2026-16201 (info disclosure, same net.c), CVE-2026-16204 (code injection in tool_run_script_execute) — the code-injection sibling is the one to actually care about if you *do* run rt-claw |
noisgate verdict.
The single decisive downgrade factor is installed base: rt-claw is a hobbyist ESP32 firmware with no enterprise deployment footprint — no Shodan fingerprint, no vendor procurement path, no CMDB presence. A CVSS 7.3 on software your fleet does not run is a paperwork event, not a risk event.
Why this verdict
- Installed-base collapse: rt-claw is a personal-project ESP32 runtime. Even generous estimates put enterprise deployment at effectively 0%, far below any exposure threshold that would justify HIGH.
- Role multiplier: low-value only. Deployment role spectrum is (a) hobbyist bench, (b) home-lab automation, (c) — nothing. There is no high-value canonical role (no IdP, no hypervisor, no CI runner, no DC) where this bug is *in* the trust-critical component. The role floor does not lift the verdict.
- Impact ceiling is C:L/I:L/A:L by vendor's own vector — SSRF against an ESP32 gives you a tiny-buffered LAN probe, not credential theft, not RCE, not domain takeover.
- No detection or KEV pressure: EPSS 0.00288, no KEV, no observed exploitation, no PoC campaign. Nothing is forcing this up the queue.
- Reachability requires internal LAN position because devices sit behind residential NAT. Any attacker positioned to talk to your ESP32 already has better targets on the same segment.
Why not higher?
Nothing about this bug touches an enterprise trust plane. The vendor CVSS 7.3 assumes the affected asset is worth defending like a server; it isn't. Without KEV, without a mass-exploitation vector, and without a domain/tenant/fleet blast radius, MEDIUM or HIGH would over-allocate scarce patch cycles.
Why not lower?
IGNORE is only appropriate when the software provably does not exist in your environment. Because rt-claw *can* be flashed onto ESP32 devices by curious engineers or lab teams and can be pointed at internal URLs from a corporate IoT VLAN, LOW keeps it visible as backlog hygiene for asset-inventory teams.
What to do — in priority order.
- Inventory ESP32 / embedded-AI firmware in labs and OT segments — Ask hardware and IoT-lab teams whether anyone has flashed
rt-claw,openclaw, orpicoclawvariants. This is not a CMDB item today. No mitigation SLA at LOW — fold into your standard 365-day remediation window. - Segment IoT / hobbyist VLANs from management and metadata endpoints — Any SSRF-capable device on the same segment as router admin pages, printer web UIs, or cloud metadata IPs (169.254.169.254) is a pivot risk regardless of this specific CVE. Enforce egress ACLs from IoT segments to RFC1918 management ranges.
- If rt-claw is in use, disable or allow-list the
net_get/net_posttools in the LLM tool schema — Recompile the firmware with the network tools removed from the tool registry, or wrap them with a hostname allow-list. This is a source-level change — no vendor patch to consume. - Prioritize the sibling CVE-2026-16204 (code injection) over this one — If you run rt-claw at all, the
tool_run_script_executecode-injection sibling is a materially worse bug than the SSRF and should drive the remediation decision.
- WAF rules — the affected device typically has no WAF in front of it and the attack path is prompt-driven, not HTTP-signature-driven
- EDR / AV — no coverage for ESP32 firmware; commercial agents don't run there
- Vulnerability scanner content (Nessus/Qualys/Rapid7) — no plugin exists and none is likely to ship for a hobby project
Crowdsourced verification payload.
Run on any Linux auditor workstation with network reach to the suspected device. Invoke as ./check-rtclaw.sh 192.168.1.42 — no privileges required. The script probes for the rt-claw HTTP surface and version-strings the firmware banner.
#!/usr/bin/env bash
# noisgate check for CVE-2026-16125 — zevorn rt-claw SSRF via claw_net_get/claw_net_post
# Usage: ./check-rtclaw.sh <device-ip> [port]
set -u
TARGET="${1:-}"
PORT="${2:-80}"
if [[ -z "$TARGET" ]]; then
echo "usage: $0 <device-ip> [port]" >&2
exit 2
fi
BANNER=$(curl -sS --max-time 5 "http://${TARGET}:${PORT}/" 2>/dev/null || true)
INFO=$(curl -sS --max-time 5 "http://${TARGET}:${PORT}/info" 2>/dev/null || true)
BLOB="${BANNER}${INFO}"
if [[ -z "$BLOB" ]]; then
echo "UNKNOWN: no HTTP response from ${TARGET}:${PORT}"
exit 3
fi
if echo "$BLOB" | grep -qiE 'rt-?claw|zevorn|openclaw'; then
VER=$(echo "$BLOB" | grep -oiE 'rt-?claw[/ ]?v?[0-9]+\.[0-9]+(\.[0-9]+)?' | head -1 | grep -oE '[0-9]+\.[0-9]+(\.[0-9]+)?')
if [[ -z "$VER" ]]; then
echo "VULNERABLE: rt-claw fingerprint present, version undetermined (assume ≤ 0.2.0)"
exit 1
fi
# naive semver compare vs 0.2.0
if printf '%s\n0.2.0\n' "$VER" | sort -V | tail -1 | grep -qx "0.2.0"; then
echo "VULNERABLE: rt-claw ${VER} (≤ 0.2.0, no fixed release)"
exit 1
else
echo "UNKNOWN: rt-claw ${VER} — no known fix, treat as vulnerable pending vendor advisory"
exit 3
fi
fi
echo "PATCHED: no rt-claw fingerprint on ${TARGET}:${PORT}"
exit 0
If you remember one thing.
rt-claw is a hobbyist ESP32 AI-assistant firmware with no enterprise procurement footprint. Per the noisgate mitigation SLA, LOW carries no mitigation deadline — go straight to the noisgate remediation SLA 365-day window and handle it as backlog hygiene. Monday morning: (1) ask hardware/IoT-lab teams whether anyone has flashed rt-claw or its openclaw/picoclaw cousins on lab benches, (2) confirm IoT/lab VLANs cannot egress to management ranges or cloud metadata IPs, and (3) if any instance is found, prioritize the sibling CVE-2026-16204 (code injection) over this SSRF — that one actually matters. Do not preempt higher-severity queue items for this CVE.Sources
- GitHub — zevorn/rt-claw project
- OffSeq Threat Radar — CVE-2026-16201 (sibling info-disclosure in same net.c)
- OffSeq Threat Radar — CVE-2026-16200 (authz sibling)
- OffSeq Threat Radar — CVE-2026-16204 (code-injection sibling)
- OffSeq Threat Radar — CVE-2026-16196 (Sipeed PicoClaw SSRF, adjacent codebase)
- CWE-918: Server-Side Request Forgery (MITRE)
- GitHub Advisory Database (unreviewed advisories index)
- CISA KEV Catalog (confirm non-listing)
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.