.claude/skills/openclaw-ssrf-localhost-plugins/SKILL.md
Fix OpenClaw SSRF guard blocking channel plugins (BlueBubbles, etc.) from reaching localhost or private/LAN IP servers. Use when: (1) gateway.err.log shows "blocked URL fetch (bluebubbles-api) reason=Blocked hostname or private/internal/special-use IP address", (2) `openclaw health` reports BlueBubbles as "failed (unknown)", (3) after upgrading OpenClaw to 2026.3.28+ or 2026.4.x. The SSRF guard doesn't distinguish between agent-initiated web_fetch and plugin internal HTTP calls.
npx skillsauth add Dbochman/dotfiles openclaw-ssrf-localhost-pluginsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
OpenClaw 2026.3.28 introduced SSRF protection that blocks all HTTP requests to localhost, 127.0.0.1, private IPs (10.x, 172.16-31.x, 192.168.x), and other special-use addresses. This affects channel plugin internal API calls (BlueBubbles, Home Assistant, local LLM servers, etc.) even though those URLs are admin-configured in openclaw.json, not user-controllable.
gateway.err.log shows:
[security] blocked URL fetch (bluebubbles-api) target=http://localhost:1234/api/v1/ping
reason=Blocked hostname or private/internal/special-use IP address
openclaw health reports the channel as failedAdd "allowPrivateNetwork": true to the channel config in openclaw.json:
{
"channels": {
"bluebubbles": {
"enabled": true,
"serverUrl": "http://localhost:1234",
"allowPrivateNetwork": true,
...
}
}
}
This is a per-channel setting that exempts that channel's internal HTTP client from
the SSRF guard. It does NOT affect agent-initiated web_fetch or browser tool calls.
launchctl kickstart -k gui/$(id -u)/ai.openclaw.gatewaygateway.log — should show BlueBubbles server macOS X.X and
BlueBubbles Private API enabled (successful connection)gateway.err.log — no more "blocked URL fetch" lines after restartopenclaw health — should show BlueBubbles: okallowPrivateNetwork (camelCase), validated in the channel schematools
Use exact configured Reolink cameras through the local Home Hub for availability and power status, fresh stills, visual commentary, protected Dylan/Julia/household sharing, and reversible spotlight control. Supports trusted owner tasks and explicitly scoped proactive automations; not for Nest or Ring cameras, arbitrary recipients, recordings, account changes, or raw camera APIs.
data-ai
Privately manage Dylan and Julia's household plant inventory and care history by physical location, bed, and exact Flower Cam view. Use for confirmed plant onboarding from camera conversations, camera- or bed-filtered inventory, record corrections, individual or whole-bed care, and private filtered exports. Pair with reolink-camera when an owner asks about plants visible in Flower Cam images.
testing
Inspect and control the physically secured Reachy Mini at Crosstown through ClawBody. Use for requests to check Reachy, look around, express an emotion, play any official emotion or dance preset, speak proactively, mute or unmute its microphone, stop movement, or describe what its camera sees.
tools
Handle Reachy/iMessage handoffs, selective durable memory, forgetting, and diagnostics; automatic context comes from the gateway plugin.