other
- Location
scripts/main.ts:101- Finding
Automatic Disclosure of Sensitive Target URLs to a Third-Party Service
- Content
View full analysis
{ const apiUrl = buildDefuddleApiUrl(targetUrl); const response = await fetch(apiUrl, { headers: { accept: "text/markdown,text/plain;q=0.9,*/*;q=0.1", }, }); if (!response.ok) { throw new Error(`defuddle.md returned ${response.status} ${response.statusText}`); } ``` The fallback is invoked automatically after local capture fails: ```ts } catch (error) { const primaryError = error instanceof Error ? error.message : String(error); console.warn(`Primary capture failed: ${primaryError}`); console.warn("Trying defuddle.md API fallback..."); try { const remoteResult = await fetchDefuddleApiMarkdown(args.url); outputPath = args.output || await generateOutputPath(args.url, remoteResult.title, args.outputDir); ``` ### Technical Analysis The Skill accepts an arbitrary user-supplied URL and, if local browser capture fails, embeds the entire URL into a request sent to the external `defuddle.md` service. The fallback does not require separate user confirmation and does not filter URL credentials, query parameters, fragments, private hostnames, or internal network addresses. URLs may contain sensitive information such as signed query parameters, password-reset tokens, session identifiers, private document identifiers, internal hostnames, or confidential search terms. Although the code does not send captured HTML or browser cookies to `defuddle.md`, sending the full URL can still disclose secrets and browsing intent to that service and its infrastructure logs. This beha ...[truncated 1159 chars]- Remediation
View remediation
