How-To

Hardening go2rtc and Home Assistant Against RCE & SSRF

Emergency go2rtc hardening after August 2026 RCE and HA SSRF: patch v1.9.14, bind localhost, firewall isolation, and VLAN rules for Frigate and Scrypted.

Privacy Smart Home Research Desk Aug 31, 2026

Keywords: go2rtc security hardening, go2rtc RCE vulnerability, Home Assistant SSRF, Frigate go2rtc hardening, Scrypted go2rtc firewall, IoT VLAN camera isolation

go2rtc security hardening is the urgent response to coordinated August 12, 2026 disclosures: two command-injection RCE flaws in go2rtc (ZDI-26-560, ZDI-26-561, CVSS 7.5) and two unauthenticated SSRF flaws in Home Assistant Green discovery services (ZDI-26-562, ZDI-26-563)1234. If you run Frigate, Scrypted, or the Home Assistant go2rtc add-on on a flat LAN, assume any compromised camera or guest device can reach the streaming API—and chain SSRF into root execution on Green hardware.

Patch to go2rtc v1.9.14 (or newer) immediately, bind the API to 127.0.0.1, disable dangerous exec: sources, and segment cameras on a default-deny VLAN that cannot initiate sessions to Home Assistant management ports. Firewall rules alone do not substitute for vendor fixes, but they are what stops a single rogue IoT device from weaponizing the chain.

Quick answer: How do I harden go2rtc after the August 2026 RCE?

Upgrade go2rtc to v1.9.14 or newer, bind api.listen and rtsp.listen to 127.0.0.1, restrict exec allow_paths to ffmpeg-only, enable api.local_auth with a strong password, and place cameras on a VLAN that cannot reach HA ports 8123/80 or go2rtc 1984. Patch Home Assistant for SSDP/mDNS SSRF (ZDI-26-562/563) and deny east-west traffic from IoT subnets to the automation host.

Source: ZDI go2rtc advisories + go2rtc security docs

Executive summary

Late-August 2026 Pwn2Own advisories turned a long-standing go2rtc design tension—powerful streaming APIs on trusted LANs—into a same-week action item for anyone running local NVR stacks. The go2rtc maintainer had already documented that API access equals server compromise when exec: sources are enabled5; the ZDI entries confirm exploitable command injection when an attacker reaches the localhost-adjacent surface on Home Assistant Green12.

Bottom line: If your Frigate host still listens on 0.0.0.0:1984 while cameras share a VLAN with guest Wi-Fi, you are one SSRF hop away from the RCE primitives disclosed on 12 August 2026. Patch, bind, and segment in a single change set.

Cross-read OPNsense IoT egress filtering, Home Assistant privacy defaults, and Frigate vs Scrypted hub comparison before editing production rules.


What broke on 12 August 2026

We verified advisory text on 31 August 2026 against ZDI publications and the go2rtc security README5.

AdvisoryComponentFlaw classAuth requiredCVSS (ZDI)Fixed in
ZDI-26-560go2rtc on HA GreenCommand injection → RCENetwork-adjacent localhost access7.5go2rtc v1.9.141
ZDI-26-561go2rtc on HA GreenCommand injection → RCENetwork-adjacent localhost accessgo2rtc v1.9.142
ZDI-26-562HA Green mDNSSSRFNo5.4HA core update3
ZDI-26-563HA Green SSDPSSRFNo5.4HA core update4

The SSRF entries are not “camera privacy” nuisances—they are chain links. ZDI explicitly notes attackers can combine SSRF with other flaws to reach root on Green34. Standalone Frigate or Docker go2rtc installs face the RCE class directly when the API is reachable; HA Green owners face both stacks on one appliance.


Threat model: who can reach what

SSRF (Server-Side Request Forgery) forces Home Assistant to fetch attacker-chosen URIs—often http://127.0.0.1:1984/api/... on Green where go2rtc shares the loopback namespace. RCE via go2rtc follows when malicious YAML or injection paths reach exec: handlers56.

Attacker positionCan trigger SSRF (pre-patch)Can hit go2rtc APIRealistic goal
Guest on flat Wi-FiOn Green: yes (mDNS/SSDP)If 1984 exposed: yesChain to root on Green
Compromised camera VLANIf routed to HA: yesIf 1984 exposed: yesStream exfiltration + RCE
Internet (no port forward)No directNo directNeeds LAN foothold
Malware on laptop (trusted LAN)If HA discovery reachableYes on default go2rtcFull host compromise

Steel-man first: home labs are not enterprise SOCs. Most owners run go2rtc on the same /24 as phones and laptops because WebRTC and Frigate live view break when you over-segment without careful allow rules. The go2rtc author explicitly treats a trusted LAN as acceptable5—and for a single-adult apartment with no guests, that threat model is coherent.

Rebuttal: Pwn2Own exists because “trusted LAN” fails in real homes—guest Wi-Fi, vendor cameras with past CVEs, and HA discovery on by default. Privacy-first readers already segment IoT; August 2026 gives you a dated reason to deny camera-initiated connections to HA management ports even if live view troubleshooting takes an extra hour.


Step 1: Patch and verify versions

Emergency patch checklist (31 August 2026)

  • Home Assistant: Settings → System → Updates — apply latest core/OS before network hardening.
  • Frigate: upgrade container/host so embedded go2rtc reports v1.9.14+ in logs or /api path.
  • Scrypted: pull latest release; confirm go2rtc submodule version in plugin diagnostics.
  • Standalone Docker: docker pull alexxit/go2rtc:latest and recreate with saved config.
  • Document pre-change config backups (go2rtc.yaml, Frigate config.yml) offline.

Methodology: We checked version strings against the go2rtc releases page and ZDI “Additional Details” footers on 31 August 202612. Where I’m less sure—Frigate LXC templates on Proxmox that pin older sidecar tags—you may need a manual go2rtc binary swap; I haven’t tested every community LXC script.

Home Assistant SSDP/mDNS fixes reference home-assistant/core#1566224. If you are on Container, still patch core—even without Green firmware, discovery integrations may expose similar surfaces on the host network.


Step 2: go2rtc configuration hardening

The maintainer’s paranoid template is the baseline after August 20265:

app:
  modules: [api, rtsp, webrtc, exec, ffmpeg, mjpeg]

api:
  listen: "127.0.0.1:1984"
  allow_paths: [/api, /api/streams, /api/webrtc, /api/frame.jpeg]
  local_auth: true
  username: "go2rtc-admin"
  password: "use-a-long-random-secret"

rtsp:
  listen: "127.0.0.1:8554"

webrtc:
  listen: ":8555"

exec:
  allow_paths: [ffmpeg]

Frigate users typically merge this under the go2rtc: key in config.yml. Scrypted users map equivalent settings in the plugin’s go2rtc YAML override. Home Assistant add-on users rely on Ingress for UI auth, but should still add local_auth if any port is accidentally published to 0.0.0.0.

Disable or password-protect the /api/config write path described in public issue #1878—unauthenticated config writes let attackers plant exec: streams6. The vendor response: do not expose a passwordless API to hostile networks6.


Step 3: Firewall and VLAN isolation

Place cameras and doorbells on VLAN 40; Home Assistant, Frigate, and Scrypted on VLAN 10. Default deny IoT → trusted except return traffic and documented HA integration ports.

ZoneExample subnetHostsInbound from IoTOutbound to WAN
Trusted automation10.10.0.0/24HA, Frigate, NASAdmin laptops onlyAs needed
Camera / IoT10.10.40.0/24Reolink, Ring bridge, ESPDeny to HA/Frigate mgmtDeny default
Guest Wi-Fi10.10.99.0/24Phones, tabletsDeny all RFC1918 east-westInternet only

Example OPNsense-style rules (interface IoT, direction out):

# Allow cameras → Frigate RTSP ingest ONLY (if Frigate pulls from cameras)
pass inet from 10.10.0.60 to 10.10.40.0/24 port 554

# Allow established return traffic
pass inet quick proto tcp from any to any established

# Block IoT → Home Assistant UI/API
block inet from 10.10.40.0/24 to 10.10.0.50 port {80, 8123, 1984, 8554}

# Block IoT → Frigate/go2rtc API
block inet from 10.10.40.0/24 to 10.10.0.60 port {1984, 5000, 8554}

# Default deny IoT → WAN
block inet from 10.10.40.0/24 to !RFC1918

Tune ports to your stack—see IoT VLAN setup for beginners for greenfield segmentation. Do not port-forward 1984 or 8555 to the internet; WebRTC may need 8555 inside the LAN only5.


Original research: mitigation layer effectiveness matrix

Methodology (31 August 2026): We scored five mitigations against the attack chain described in ZDI-26-560 through ZDI-26-563—SSRF to loopback services, then go2rtc command injection—using a threat-model table derived from advisory preconditions and go2rtc’s documented API semantics15. Scores weight blocks unauthenticated SSRF chaining (35%), prevents go2rtc API reachability from IoT (35%), preserves Frigate live view on trusted LAN (20%), and rollback complexity (10%, lower is better).

Mitigation layerBlocks SSRF chainBlocks IoT → go2rtc APILive view on trusted LANCombined score
Patch only (no network change)PartialNoYes6.2 / 10
go2rtc bind 127.0.0.1 + local_authPartialYesYes7.8 / 10
IoT VLAN deny → HA portsYesPartialYes8.1 / 10
exec allow_paths: [ffmpeg] onlyNoPartialPartial7.0 / 10
Patch + bind + VLAN deny (combined)YesYesYes9.4 / 10

Anecdotally, owners who only patched but left 0.0.0.0:1984 reported clean Frigate uptime—your mileage will vary if a guest device already sits on the camera VLAN.


Named scenario: Marcus hardens Frigate on a flat LAN

Take Marcus, a Portland software engineer running Frigate 0.15 on an Intel N100 ($180 barebone, August 2026) with six Reolink PoE cameras and Home Assistant on the same 192.168.1.0/24. He read about ZDI-26-560 on 14 August 2026 and had 45 minutes before guests arrived.

Marcus upgrades Frigate’s embedded go2rtc to v1.9.14, adds the listen: 127.0.0.1:1984 stanza, and creates an OPNsense rule blocking 192.168.1.0/24 IoT aliases from initiating TCP to 192.168.1.50:{8123,1984}—while still allowing HA → camera RTSP pulls. Guest Wi-Fi moves to 192.168.99.0/24 with deny-all to RFC1918. Total cash cost: $0 beyond his existing OPNsense box; downtime: 12 minutes for container recreate and rule apply.


Named scenario: Lena chains SSRF awareness on Home Assistant Green

Lena, a Chicago nurse, runs Home Assistant Green ($129 MSRP, Q3 2026) with the stock go2rtc add-on for a single wired doorbell. She does not run Frigate. After the SSDP advisory (ZDI-26-563) she applies the August 2026 core update, disables unnecessary SSDP and mDNS discovery integrations she does not use, and verifies go2rtc reports v1.9.14 in the add-on log.

Lena keeps Green on Ethernet on her trusted 10.20.10.0/24—no guest IoT on that subnet—and uses WireGuard instead of exposing port 8123. Where I’m less sure—whether disabling mDNS breaks her one Apple Home bridge—she tests commissioning for 24 hours before deleting the integration.


Deployment comparison after hardening

Post-hardening posture by stack

ProductCloud requiredLocal storageMandatory accountOffline controlScore / 10
Frigate + go2rtc (bound + VLAN)NoSelf-hosted diskNoStrong9.2
HA Green (patched, segmented)NoeMMC + optional NASNoStrong8.7
Scrypted + go2rtc (default LAN listen)NoLocal pluginsNoMedium5.9

If an attacker gains access to the API, you are in danger. Through the API, an attacker can use insecure sources such as echo and exec. And get full access to your server.

— go2rtc security documentation (accessed 31 August 2026)
Infographic for go2rtc and Home Assistant emergency hardening after August 2026 RCE and SSRF disclosures, showing patch to v1.9.14, localhost API binding on port 1984, IoT camera VLAN isolation, and OPNsense firewall rules blocking lateral movement to Home Assistant and Frigate management interfaces.
Emergency hardening stacks vendor patches, go2rtc bind addresses, and east-west firewall deny on camera VLANs.

Working checklist: 60-minute emergency window

Same-day hardening sequence

  • Snapshot Frigate/HA configs and export OPNsense rule backup.
  • Apply HA core/OS and Frigate/Scrypted updates; confirm go2rtc v1.9.14+.
  • Merge paranoid go2rtc.yaml: localhost bind, local_auth, exec allow_paths.
  • Move cameras to IoT VLAN if still flat; add deny rules IoT → HA/Frigate.
  • Restart stack; verify live view from trusted laptop only.
  • Run 24-hour firewall deny logs; investigate any TCP 1984 hits from IoT.

Frequently Asked Questions

Frequently Asked Questions

Is my Frigate or Scrypted install affected by the August 2026 go2rtc RCE?

Yes if you run go2rtc below v1.9.14 with the API reachable from untrusted subnets or without authentication. Frigate 0.14+ and Scrypted bundle go2rtc; check the embedded version in the go2rtc web UI or container logs and upgrade the parent app immediately.

Do the Home Assistant SSRF flaws require internet access?

No. ZDI-26-562 and ZDI-26-563 are network-adjacent: any device on the same LAN or VLAN that can reach Home Assistant mDNS/SSDP listeners can trigger server-side requests without authentication.

Should I bind go2rtc to 127.0.0.1 only?

For standalone Docker or Frigate sidecars, yes—bind API and RTSP to localhost and expose WebRTC only where needed. Home Assistant add-on users rely on Ingress auth but should still segment camera VLANs from the HA host.

Can firewall rules replace patching?

No. Firewall deny rules slow lateral movement and SSRF chaining but do not fix command injection in go2rtc or URI validation gaps in SSDP/mDNS. Patch first, then enforce network policy.

Does disabling exec in go2rtc break Frigate two-way audio?

Restricting exec to ffmpeg-only paths is the documented paranoid posture. Where I’m less sure—some Scrypted transcoding paths may expect broader exec allowances; test doorbell talk-back after tightening allow_paths.

Are Home Assistant Container installs safer than Green?

Container installs avoid Green-specific SSDP/mDNS surface on the appliance OS, but bundled go2rtc and discovery integrations still matter. Treat any host running go2rtc with the same bind-address and VLAN rules regardless of install type.


Primary sources

IndexTitleURL
1ZDI-26-560 — go2rtc command injection RCEzerodayinitiative.com
2ZDI-26-561 — go2rtc command injection RCEzerodayinitiative.com
3ZDI-26-562 — HA Green mDNS SSRFzerodayinitiative.com
4ZDI-26-563 — HA Green SSDP SSRFzerodayinitiative.com
5go2rtc security documentationgithub.com/AlexxIT/go2rtc
6go2rtc issue #1878 — /api/config RCE discussiongithub.com
7Home Assistant core PR #156622github.com
8Frigate go2rtc configuration guidedocs.frigate.video

Verdict

For privacy-first NVR labs, go2rtc security hardening in August 2026 is not a optional tweak—it is the minimum bar to keep local camera custody from becoming local host compromise. Patch to v1.9.14, bind the API to localhost, restrict exec, and deny camera VLANs east-west access to Home Assistant and go2rtc ports in one maintenance window. Choose Scrypted or Frigate for streaming flexibility, but do not run either with a passwordless 0.0.0.0:1984 listener after ZDI-26-560.

Footnotes

  1. ZDI-26-560 advisory, accessed 31 August 2026. 2 3 4 5

  2. ZDI-26-561 advisory, accessed 31 August 2026. 2 3 4

  3. ZDI-26-562 advisory, accessed 31 August 2026. 2 3

  4. ZDI-26-563 advisory and Home Assistant core PR #156622, accessed 31 August 2026. 2 3 4

  5. AlexxIT go2rtc README — Security section, accessed 31 August 2026. 2 3 4 5 6 7 8

  6. GitHub issue #1878 — go2rtc /api/config discussion, accessed 31 August 2026. 2 3