{"id":"CVE-2026-61681","kind":"vulnerability","aliases":["CVE-2026-61681","GHSA-fjwv-jf2v-j499","GO-2026-6565"],"related":[],"title":"SSRF via Unsigned UnsubscribeURL in SNS UnsubscribeConfirmation Handler in github.com/hatchet-dev/hatchet","description":"Hatchet is a platform for orchestrating background tasks, AI agents, and durable workflows at scale. Prior to 0.91.1, the SNS UnsubscribeConfirmation handler in internal/integrations/ingestors/sns/sns.go calls http.Get() on payload.UnsubscribeURL after VerifyPayload() even though BuildSignature() excludes UnsubscribeURL, allowing an authenticated Hatchet tenant to replace that field in an otherwise valid AWS-signed message with an internal URL. The server-side request can reach EC2 Instance Metadata Service, internal services, and internal HTTP APIs, potentially exposing IAM credentials or network-accessible data and functionality. This issue is fixed in version 0.91.1.","summary":"The SNS UnsubscribeConfirmation handler in Hatchet makes a server-side HTTP GET to the UnsubscribeURL field, which is not covered by the AWS signature check. An authenticated tenant can point that field at an internal URL, so the Hatchet server fetches it.","severity":"medium","cvss":4.1,"epss":0.00311,"exploited":false,"exploited_at":null,"products":[{"name":"github.com/hatchet-dev/hatchet","fixed":["0.91.2"],"affected":"< 0.91.2","ecosystem":"go"}],"ecosystems":["go"],"tags":["aws-sns","go","hatchet","package","self-hosted"],"not_affected_if":["no-sns-integration"],"how_to_check":"go list -m github.com/hatchet-dev/hatchet (version below 0.91.2 is affected per products field)\nCheck whether the SNS ingestor in internal/integrations/ingestors/sns is in use","fix":"Upgrade github.com/hatchet-dev/hatchet to 0.91.2 (sources conflict: description says fixed in 0.91.1)","status":"open","published_at":"2026-09-21T16:17:09+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","triaged_at":"2026-10-23T21:49:18+00:00","updated_at":"2026-10-23T21:49:18+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-23T21:49:18Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade github.com/hatchet-dev/hatchet to 0.91.2 (sources conflict: description says fixed in 0.91.1)\nUnknown whether a configuration workaround exists","reach":"unknown","impact":"medium","summary":"The SNS UnsubscribeConfirmation handler in Hatchet makes a server-side HTTP GET to the UnsubscribeURL field, which is not covered by the AWS signature check. An authenticated tenant can point that field at an internal URL, so the Hatchet server fetches it.","category":"package","who_cares":["hatchet","self-hosted","aws-sns","go"],"confidence":0.7,"needs_auth":"yes","worst_case":"Server fetches internal URLs, possibly exposing IAM credentials and internal APIs","analyst_note":"Resolve fixed version conflict (0.91.1 in description vs 0.91.2 in products) at https://pkg.go.dev/vuln/GO-2026-6565 and the GHSA-fjwv-jf2v-j499 advisory; confirm whether any config workaround exists.","how_to_check":"go list -m github.com/hatchet-dev/hatchet (version below 0.91.2 is affected per products field)\nCheck whether the SNS ingestor in internal/integrations/ingestors/sns is in use","needs_analyst":true,"not_affected_if":["no-sns-integration"],"user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.001053,"input_tokens":3095,"output_tokens":1487,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-2026':14A,22A,25A '-61681':15A,26A '-6565':23A '/hatchet-dev/hatchet':12A,29A '0.91.1':98C,171C 'access':161C 'agent':90C 'ai':89C 'allow':116C 'api':153C 'authent':66B,118C 'aw':31B,62B,130C 'aws-sign':129C 'aws-sn':30B 'background':87C 'buildsignatur':113C 'call':105C 'check':64B 'cover':59B 'credenti':157C 'cve':13A,24A 'data':162C 'durabl':92C 'ec2':144C 'even':111C 'exclud':114C 'expos':155C 'fetch':80B 'field':55B,71B,124C 'fix':168C 'fjwv':18A 'function':164C 'get':51B 'ghsa':17A 'ghsa-fjwv-jf2v-j499':16A 'github.com':11A,28A 'github.com/hatchet-dev/hatchet':10A,27A 'go':21A,33B 'handler':8A,42B,102C 'hatchet':34B,44B,78B,81C,119C 'host':38B 'http':50B,152C 'http.get':106C 'iam':156C 'instanc':145C 'intern':74B,135C,148C,151C 'internal/integrations/ingestors/sns/sns.go':104C 'issu':166C 'j499':20A 'jf2v':19A 'make':45B 'messag':132C 'metadata':146C 'network':160C 'network-access':159C 'orchestr':86C 'otherwis':127C 'packag':35B 'payload.unsubscribeurl':108C 'platform':84C 'point':69B 'potenti':154C 'prior':96C 'reach':143C 'replac':122C 'request':141C 'scale':95C 'self':37B 'self-host':36B 'server':48B,79B,139C 'server-sid':47B,138C 'servic':147C,149C 'side':49B,140C 'sign':131C 'signatur':63B 'sns':6A,32B,40B,100C 'ssrf':1A 'task':88C 'tenant':67B,120C 'though':112C 'unsign':3A 'unsubscribeconfirm':7A,41B,101C 'unsubscribeurl':4A,54B,115C 'url':75B,136C 'valid':128C 'verifypayload':110C 'version':170C 'via':2A 'workflow':93C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-21T16:17:09+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:N/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"govuln","external_id":"GO-2026-6565","url":"https://pkg.go.dev/vuln/GO-2026-6565","severity":null,"published_at":"2026-10-01T20:23:38+00:00","modified_at":"2026-10-07T14:10:24+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","fetched_at":"2026-10-23T19:13:08+00:00","note":null},{"source":"epss","external_id":"CVE-2026-61681","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-61681","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-23T19:13:43+00:00","fetched_at":"2026-10-23T19:13:43+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-61681","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-61681","severity":null,"published_at":"2026-09-21T16:17:09+00:00","modified_at":"2026-09-24T23:17:13+00:00","first_seen_at":"2026-10-23T19:35:23+00:00","fetched_at":"2026-10-23T19:35:23+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}