Summary
DocsSiteFetcher uses a standalone reqwest::Client for both docs-page fetches and direct llms.txt fetches. That client never applies FetchKit's DNS pinning / private-IP validation or manual redirect policy.
Impact
This breaks the default SSRF posture for any URL that lands in DocsSiteFetcher, including direct /llms.txt requests.
Confirmed locally:
Tool::default() successfully fetched http://127.0.0.1:<port>/llms.txt
Tool::default() also fetched http://docs.127.0.0.1.nip.io:<port>/
Ordinary default-fetcher requests to loopback are supposed to fail with BlockedUrl, so this is a real policy bypass rather than an expected dev-mode behavior.
Affected code
crates/fetchkit/src/fetchers/docs_site.rs:107-174
Repro outline
- Start a local HTTP server on
127.0.0.1
- Serve plain text on
/llms.txt or /
- Call
Tool::default().execute(...) with one of:
http://127.0.0.1:<port>/llms.txt
http://docs.127.0.0.1.nip.io:<port>/
- Observe a successful response instead of
BlockedUrl
Expected fix
DocsSiteFetcher should reuse the shared hardened transport behavior instead of dialing its own unrestricted client.
Summary
DocsSiteFetcheruses a standalonereqwest::Clientfor both docs-page fetches and directllms.txtfetches. That client never applies FetchKit's DNS pinning / private-IP validation or manual redirect policy.Impact
This breaks the default SSRF posture for any URL that lands in
DocsSiteFetcher, including direct/llms.txtrequests.Confirmed locally:
Tool::default()successfully fetchedhttp://127.0.0.1:<port>/llms.txtTool::default()also fetchedhttp://docs.127.0.0.1.nip.io:<port>/Ordinary default-fetcher requests to loopback are supposed to fail with
BlockedUrl, so this is a real policy bypass rather than an expected dev-mode behavior.Affected code
crates/fetchkit/src/fetchers/docs_site.rs:107-174Repro outline
127.0.0.1/llms.txtor/Tool::default().execute(...)with one of:http://127.0.0.1:<port>/llms.txthttp://docs.127.0.0.1.nip.io:<port>/BlockedUrlExpected fix
DocsSiteFetchershould reuse the shared hardened transport behavior instead of dialing its own unrestricted client.