{"id":"CVE-2026-77067","state":"PUBLISHED","title":"Omnivore Stored Server-Side Request Forgery via the setWebhook Mutation","description":"The setWebhookResolver in packages/api/src/resolvers/webhooks/index.ts stores the caller-supplied url without any address validation, and the file imports no validation helper. When a subscribed event fires, callWebhook in packages/api/src/jobs/call_webhook.ts issues axios.request with that url, the method and Content-Type recorded on the webhook, and a JSON body carrying the event data, so an authenticated user can make the server send repeated attacker-shaped requests to internal endpoints, including link-local metadata addresses. The request is blind: callWebhook discards the result and writes only a success line or the axios error to the server log, so the response is not returned through the API.","publishedAt":"2026-08-20T11:05:51.482Z","updatedAt":"2026-09-24T14:19:37.576Z","severity":{"score":5.3,"label":"Medium","version":"4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N","source":"VulnCheck"},"assigner":"VulnCheck","products":["omnivore-app omnivore"],"affected":[{"vendor":"omnivore-app","product":"omnivore","defaultStatus":"unaffected","versions":[{"version":"0","status":"affected","lessThan":"c4d7d8562e6b9aabb1d8e4dabca268e314baa43a","versionType":"git"}],"repo":"https://github.com/omnivore-app/omnivore"}],"references":["https://github.com/omnivore-app/omnivore/issues/4647","https://github.com/omnivore-app/omnivore/commit/c4d7d8562e6b9aabb1d8e4dabca268e314baa43a","https://github.com/omnivore-app/omnivore/blob/0d66408746788e07cec43928581b2567308ab575/packages/api/src/resolvers/webhooks/index.ts#L108","https://github.com/omnivore-app/omnivore/blob/0d66408746788e07cec43928581b2567308ab575/packages/api/src/jobs/call_webhook.ts#L36","https://github.com/omnivore-app/omnivore","https://www.vulncheck.com/advisories/omnivore-stored-server-side-request-forgery-via-the-setwebhook-mutation"],"weaknesses":["CWE-918"],"ingestedAt":"2026-10-29T20:13:07.220Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/77xxx/CVE-2026-77067.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-77067","state":"PUBLISHED","datePublished":"2026-08-20T11:05:51.482Z","dateUpdated":"2026-09-24T14:19:37.576Z","assignerShortName":"VulnCheck","assignerOrgId":"83251b91-4cc7-4094-a5c7-464a1b83ea10","dateReserved":"2026-08-20T10:50:24.777Z"},"containers":{"cna":{"title":"Omnivore Stored Server-Side Request Forgery via the setWebhook Mutation","descriptions":[{"lang":"en","value":"The setWebhookResolver in packages/api/src/resolvers/webhooks/index.ts stores the caller-supplied url without any address validation, and the file imports no validation helper. When a subscribed event fires, callWebhook in packages/api/src/jobs/call_webhook.ts issues axios.request with that url, the method and Content-Type recorded on the webhook, and a JSON body carrying the event data, so an authenticated user can make the server send repeated attacker-shaped requests to internal endpoints, including link-local metadata addresses. The request is blind: callWebhook discards the result and writes only a success line or the axios error to the server log, so the response is not returned through the API."}],"affected":[{"vendor":"omnivore-app","product":"omnivore","defaultStatus":"unaffected","versions":[{"version":"0","status":"affected","lessThan":"c4d7d8562e6b9aabb1d8e4dabca268e314baa43a","versionType":"git"}],"repo":"https://github.com/omnivore-app/omnivore"}],"references":[{"url":"https://github.com/omnivore-app/omnivore/issues/4647","tags":["issue-tracking"],"name":"GitHub Issue #4647"},{"url":"https://github.com/omnivore-app/omnivore/commit/c4d7d8562e6b9aabb1d8e4dabca268e314baa43a","tags":["patch"],"name":"fix(): fix ssrf via scan feeds and webhooks (#4656)"},{"url":"https://github.com/omnivore-app/omnivore/blob/0d66408746788e07cec43928581b2567308ab575/packages/api/src/resolvers/webhooks/index.ts#L108","tags":["technical-description"],"name":"setWebhookResolver storing the URL unvalidated before the fix"},{"url":"https://github.com/omnivore-app/omnivore/blob/0d66408746788e07cec43928581b2567308ab575/packages/api/src/jobs/call_webhook.ts#L36","tags":["technical-description"],"name":"callWebhook dispatching axios.request to the stored URL"},{"url":"https://github.com/omnivore-app/omnivore","tags":["product"]},{"url":"https://www.vulncheck.com/advisories/omnivore-stored-server-side-request-forgery-via-the-setwebhook-mutation","name":"VulnCheck Advisory: Omnivore Stored Server-Side Request Forgery via the setWebhook Mutation","tags":["third-party-advisory"]}],"metrics":[{"format":"CVSS","cvssV4_0":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"LOW","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"LOW","subAvailabilityImpact":"NONE","baseScore":5.3,"baseSeverity":"MEDIUM"}},{"format":"CVSS","cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:N","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"CHANGED","confidentialityImpact":"NONE","integrityImpact":"LOW","availabilityImpact":"NONE","baseScore":5,"baseSeverity":"MEDIUM"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-918","lang":"en","description":"Server-Side Request Forgery (SSRF)","type":"CWE"}]}],"providerMetadata":{"shortName":"VulnCheck","orgId":"83251b91-4cc7-4094-a5c7-464a1b83ea10","dateUpdated":"2026-09-24T14:19:37.576Z"},"datePublic":"2026-06-17T00:00:00.000Z","credits":[{"lang":"en","value":"geo-chen","type":"finder"}],"x_generator":{"engine":"vulncheck-endgame"}},"adp":[{"title":"CISA ADP Vulnrichment","references":[{"url":"https://github.com/omnivore-app/omnivore/issues/4647","tags":["exploit"]}],"metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2026-08-20T14:48:05.490595Z","id":"CVE-2026-77067","options":[{"Exploitation":"poc"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-08-20T14:48:13.117Z"}}]}}}