Skip to content
The Injection_
LIVE
LIVElast sweep next in--:--:--

[ RSS ][ JSON ][ llms.txt ]

Trawl: a hex IPv6 address sends its MCP scraper to loopback

Trawl's private-address filter missed hex IPv4-mapped IPv6 addresses, so every spelling of a loopback literal passed it.

· Trawl · Research by Leardian

CVE-2026-122140
MEDVulnerability

Trawl's optional MCP interface classified IPv4-mapped IPv6 addresses written in hex as public, so a caller who supplied a scrape URL could reach loopback and private-range services. Fixed in 1.10.0; 1.5.0 through 1.9.3 are affected.

01What happened

Trawl, a self-hosted web scraper for applications and AI agents, published advisory GHSA-mj45-84p2-v77q on 3 November 2026 for a server-side request forgery flaw in its optional MCP interface. Leardian reported the issue and is credited on the advisory, and the fix shipped in version 1.10.0. The GitHub Advisory Database assigned CVE-2026-122140 the following day.

02How it works

Trawl's outbound URL policy recognized IPv4-mapped IPv6 addresses only in dotted-quad form, so a hex literal such as ::ffff:7f00:1 fell through to the default "not private" answer. The WHATWG URL parser normalizes the dotted form into hex before the filter runs, which means a caller never needed to know the trick: every spelling of a mapped loopback address bypassed the check. Anyone who could supply a scrape target, or make an allowed page redirect, then reached the blocked destination through Trawl's MCP tools.

03Who is affected

Operators running Trawl 1.5.0 through 1.9.3 with the MCP interface turned on are affected, and MCP stays off unless MCP_ENABLED is set to an opt-in value. Trawl says its native /scrape API does not install this validator by default, so the report is scoped to the MCP interface. Trawl reproduced the bypass against a loopback listener it owned, and states it did not test real cloud metadata endpoints or third-party hosts.

04What to do

Update to Trawl 1.10.0, which replaces the textual IPv6 classification with numeric subnet checks using node:net.BlockList and adds connection-time public egress enforcement. Because the advisory scopes the flaw to the opt-in MCP interface, operators who cannot update yet can leave MCP_ENABLED unset.

Sources 3 links, all fetched

  1. 1github.comTrawl Advisory
  2. 2github.comGitHub Advisory DB
  3. 3github.comFix PR 263