{"id":"CVE-2026-115411","kind":"vulnerability","aliases":["CVE-2026-115411"],"related":[],"title":"crawlseo: SSRF lets authenticated users reach internal hosts and metadata","description":"crawlseo before version 0.2.4 contains a server-side request forgery vulnerability in its crawler engine where isPrivateIp() fails to block reserved IP ranges such as RFC 6598 Carrier-Grade NAT, RFC 6890, TEST-NET ranges and certain IPv6 addresses, and additionally fails to pin the validated address for the actual outbound connection, allowing a TOCTOU DNS rebinding bypass. An authenticated attacker can add a malicious domain that resolves to an internal or restricted address, trigger a crawl to reach internal services or cloud metadata endpoints like 169.254.169.254, and retrieve the fetched page's title, description, headings, status code and links through the crawl results API, enabling internal network reconnaissance.","summary":"crawlseo before 0.2.4 fails to block reserved IP ranges and does not pin the validated address for outbound requests, so DNS rebinding can bypass the check. An authenticated user can make the crawler fetch internal services or cloud metadata endpoints and read titles, headings, status codes and links back through the crawl results API.","severity":"medium","cvss":5.3,"epss":0.00214,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cloud","crawlseo","node.js","package","self-hosted"],"not_affected_if":["fixed-target-crawls","no-internal-network-path"],"how_to_check":"- Check the installed crawlseo version with `npm ls crawlseo` or the package's lockfile entry\n- Confirm whether crawl jobs accept user-supplied domains with `grep -ri crawlseo` in your application code","fix":"- Upgrade crawlseo to `0.2.4` or later\n- Until upgraded, block crawl targets that resolve to private, CGNAT (100.64.0.0/10) or link-local addresses at the network egress layer","status":"open","published_at":"2026-10-22T14:17:39+00:00","first_seen_at":"2026-10-23T21:57:31+00:00","triaged_at":"2026-10-25T04:20:20+00:00","updated_at":"2026-10-25T04:20:20+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-25T04:20:20Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade crawlseo to `0.2.4` or later\n- Until upgraded, block crawl targets that resolve to private, CGNAT (100.64.0.0/10) or link-local addresses at the network egress layer","reach":"internet","title":"crawlseo: SSRF lets authenticated users reach internal hosts and metadata","impact":"medium","summary":"crawlseo before 0.2.4 fails to block reserved IP ranges and does not pin the validated address for outbound requests, so DNS rebinding can bypass the check. An authenticated user can make the crawler fetch internal services or cloud metadata endpoints and read titles, headings, status codes and links back through the crawl results API.","category":"package","nicknames":[],"who_cares":["crawlseo","node.js","self-hosted","cloud"],"confidence":0.7,"needs_auth":"yes","worst_case":"internal services and cloud metadata readable via crawl results","analyst_note":"Confirm the affected package and version range from the NVD entry at https://nvd.nist.gov/vuln/detail/CVE-2026-115411 and whether the fix is only in 0.2.4.","how_to_check":"- Check the installed crawlseo version with `npm ls crawlseo` or the package's lockfile entry\n- Confirm whether crawl jobs accept user-supplied domains with `grep -ri crawlseo` in your application code","needs_analyst":true,"not_affected_if":["fixed-target-crawls","no-internal-network-path"],"who_is_affected":"Applications that run crawlseo on user-supplied domains are exposed, particularly self-hosted SEO or site-audit tools running inside a cloud VPC where metadata endpoints are reachable. Deployments that only crawl fixed, trusted domains or run crawlseo with no network path to internal services can skip it.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000684,"input_tokens":3515,"output_tokens":665,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-115411':13A,16A '-2026':12A,15A '0.2.4':26B,81C '169.254.169.254':167C '6598':105C '6890':111C 'actual':130C 'add':143C 'addit':121C 'address':39B,119C,127C,154C 'allow':133C 'api':77B,185C 'attack':141C 'authent':4A,51B,140C 'back':72B 'block':29B,98C 'bypass':47B,138C 'carrier':107C 'carrier-grad':106C 'certain':117C 'check':49B 'cloud':17B,61B,163C 'code':69B,178C 'connect':132C 'contain':82C 'crawl':75B,157C,183C 'crawler':56B,92C 'crawlseo':1A,18B,24B,78C 'cve':11A,14A 'descript':175C 'dns':44B,136C 'domain':146C 'enabl':186C 'endpoint':63B,165C 'engin':93C 'fail':27B,96C,122C 'fetch':57B,171C 'forgeri':88C 'grade':108C 'head':67B,176C 'host':8A,23B 'intern':7A,58B,151C,160C,187C 'ip':31B,100C 'ipv6':118C 'isprivateip':95C 'let':3A 'like':166C 'link':71B,180C 'make':54B 'malici':145C 'metadata':10A,62B,164C 'nat':109C 'net':114C 'network':188C 'node.js':19B 'outbound':41B,131C 'packag':20B 'page':172C 'pin':36B,124C 'rang':32B,101C,115C 'reach':6A,159C 'read':65B 'rebind':45B,137C 'reconnaiss':189C 'request':42B,87C 'reserv':30B,99C 'resolv':148C 'restrict':153C 'result':76B,184C 'retriev':169C 'rfc':104C,110C 'self':22B 'self-host':21B 'server':85C 'server-sid':84C 'servic':59B,161C 'side':86C 'ssrf':2A 'status':68B,177C 'test':113C 'test-net':112C 'titl':66B,174C 'toctou':135C 'trigger':155C 'user':5A,52B 'valid':38B,126C 'version':80C 'vulner':89C","nicknames":[],"mitigations":[],"who_affected":"Applications that run crawlseo on user-supplied domains are exposed, particularly self-hosted SEO or site-audit tools running inside a cloud VPC where metadata endpoints are reachable. Deployments that only crawl fixed, trusted domains or run crawlseo with no network path to internal services can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-22T14:17:39+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:L/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-115411","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-115411","severity":null,"published_at":"2026-10-22T14:17:39+00:00","modified_at":"2026-10-22T16:53:20+00:00","first_seen_at":"2026-10-23T21:57:31+00:00","fetched_at":"2026-10-23T22:29:02+00:00","note":null},{"source":"epss","external_id":"CVE-2026-115411","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-115411","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-24T07:15:51+00:00","fetched_at":"2026-10-24T07:15:51+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"}