Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to crawlseo application
-
DeliveryAdd site domain resolving to internal IP
-
ExploitTrigger crawl via API
-
ExecutionSSRF reaches internal service or metadata
-
ImpactRead harvested page data via results API
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated crawlseo account with permission to add or edit a site/domain and trigger a crawl (PR:L); it is not exploitable by an unauthenticated outsider. No non-default configuration is needed - the flaw is in the default crawler engine's isPrivateIp() allowlisting, which failed to block RFC 6598 CGNAT, RFC 6890, TEST-NET-1/2/3 and several reserved IPv6 ranges, and in the engine not pinning the pre-flight-validated address for the outbound connection (enabling DNS rebinding). The attacker-controlled target must resolve to the desired internal/restricted address, and to reach cloud metadata the crawlseo instance must itself be deployed somewhere that can route to 169.254.169.254 or internal hosts. Limiting factors: required authentication, and the data returned to the attacker is restricted to the page's title, description, headings, status code and links rather than arbitrary response content. |
| Impact | This is a medium-severity SSRF (CVSS 4.0 base 5.3, vector AV:N/AC:L/AT:N/PR:L/UI:N) whose impact is confined to subsequent-system confidentiality (SC:L) with no integrity or availability effect (VI:N/VA:N/SI:N/SA:N) and no impact on the crawlseo host itself (VC:N). The attack vector is network and complexity is low, but PR:L means an attacker must first hold an authenticated application account that can add a site and trigger a crawl, which materially narrows the exposure versus an unauthenticated SSRF. No EPSS score was supplied, so exploitation probability cannot be quantified here, and the vulnerability is NOT present in the CISA KEV catalog, so there is no evidence of active exploitation; a public PoC reference exists (a gist) but it is not verified as working exploit code. The vendor-assigned priority is 'this_month' rather than act_now/emergency, which is consistent with a real-but-not-urgent issue. The genuine concern is reachability of cloud metadata (169.254.169.254) and internal services, which in some environments can expose credentials; however, the data returned to the attacker is limited to the fetched page's title, description, headings, status code and links, so exfiltration of raw metadata content is constrained by whatever the crawler's HTML parser extracts rather than returning arbitrary response bodies - defenders should weigh this limiting factor rather than treating it as a full read-anything SSRF. Net: a legitimate patch-this-cycle item for anyone running crawlseo with multi-tenant or lower-trust authenticated users, not a drop-everything emergency. |
| Exploit ScenarioDerived | An authenticated crawlseo user registers a site whose domain resolves to an internal or restricted address (or uses DNS rebinding to flip the answer after validation), then triggers a crawl so the engine fetches a cloud metadata endpoint such as 169.254.169.254 or an internal service. The attacker then reads the harvested title, description, headings, status code and links through the crawl results API to perform internal reconnaissance. A public PoC reference (a gist) exists but is not verified as working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Server-side request forgery in crawlseo before 0.2.4 lets an authenticated user with site-edit and crawl-trigger permission point the crawler at internal services and cloud metadata endpoints by registering a domain whose DNS answer falls in a reserved range or is rebound after validation. The crawler's isPrivateIp() blocklist omits RFC 6598 CGNAT, RFC 6890, TEST-NET-1/2/3 and several reserved IPv6 ranges, and the pre-flight-validated address is not pinned to the outbound socket, so a TOCTOU DNS-rebinding answer is accepted at connect time. Exfiltration is constrained to what the crawl results API returns for the fetched page (title, description, headings, status code and links), making this a reconnaissance-grade leak of subsequent-system data with no integrity or availability impact; no confirmed working exploit code is public at time of analysis, though a researcher gist describing the issue is referenced.
RemediationAI
Vendor-released patch: crawlseo 0.2.4 - upgrade to that release (https://github.com/crawlseo/crawlseo/releases?page=1#release-v0.2.4), which rewrites the blocklist to cover RFC 6598 CGNAT, RFC 6890, TEST-NET-1/2/3, IPv4-translated SIIT, local-use NAT64, Teredo, benchmarking, documentation and deprecated site-local ranges, and funnels both the pre-flight check and pinnedLookup through a single lookup(hostname, { all: true }) helper so the validated address set is pinned for the outbound connection rather than re-resolved, closing the DNS-rebinding TOCTOU. Reviewers can audit the exact change in commit 76e4e693. If the upgrade cannot be scheduled immediately, the interim option is to narrow who holds crawl-trigger and site-edit rights, since the attack is only reachable from an authenticated account that can add or edit a domain and start a crawl - the trade-off is that this removes legitimate crawl functionality for those users and does not repair the underlying blocklist or address-pinning gap, so it is a stopgap only. Deployments that can route to 169.254.169.254 or internal hosts from the crawlseo instance should treat the window before upgrade as an exposed reconnaissance path.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
CWE-918: the crawler engine in lib/crawler/engine.ts implements an address allowlisting routine, isPrivateIp(), backed by a table of [network, prefix] pairs, plus a pinnedLookup LookupFunction handed to the HTTP client so the resolved address is meant to be reused for the actual connection. Two defects combined. First, the table was incomplete: as shown in commit 76e4e693, 192.0.0.0/24 (IETF protocol assignments), 192.0.2.0/24, 198.51.100.0/24 and 203.0.113.0/24 (TEST-NET-1/2/3), ::ffff:0:0:0/96 (IPv4-translated SIIT, which embeds an IPv4 address), 64:ff9b:1::/48 (local-use NAT64), 2001::/32 (Teredo), 2001:2::/48 (benchmarking), 3fff::/20 (documentation) and fec0::/10 (deprecated site-local) were missing alongside RFC 6598 100.64.0.0/10 CGNAT, so a domain resolving into those ranges passed validation. Second, the pre-flight check called Node's dns.lookup() in single-address form while the connection performed its own resolution, so a name that answered with a public address at check time could answer with 127.0.0.1 or 169.254.169.254 at connect time - a classic TOCTOU DNS-rebinding window. The fix refactors a publicAddresses() helper that calls lookup(hostname, { all: true }) and rejects the name if any returned record is private or reserved, and applies the same rule both to the pre-flight check and to pinnedLookup, so the validated answer set is the one the connection uses; the accompanying tests assert refusal when a name gains a private record after the pre-flight check.
Know when Crawlseo gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
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
Authenticated user supplies the crawl target (PR:L); the reserved-range bypass is trivial (AC:L); SSRF reads limited internal data across a trust boundary, so S:C with confidentiality-only impact (C:L).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
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.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
EUVD-2026-108164
GHSA-rvhf-6hhm-xg6w
NVD
CVE.org
EPSS
Exploit-DB