Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify exposed screenshot endpoint
-
DeliverySubmit internal/rebinding url parameter
-
ExploitBypass host validation via DNS rebinding
-
ExecutionBrowser renders internal resource
-
ImpactExfiltrate internal data via screenshot
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 the Appwrite Browser Screenshot Service (the Avatars screenshot endpoint backed by the headless 'browser' container) to be deployed and reachable, running version ≤2.3.0 before the 2.4.0 fix. The attacker supplies a malicious 'url' parameter; because the headless browser resolves the hostname itself, pre-patch validation can be bypassed via DNS rebinding to reach internal services or cloud metadata endpoints. The CVSS vector states PR:N (unauthenticated), but operators should confirm whether their deployment gates this endpoint behind an API key or project session, which would meaningfully limit exploitation. Impact is bounded to confidentiality-style disclosure via the rendered screenshot; no integrity or availability effect is indicated. |
| Impact | This is a genuine but moderate-priority issue. The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) indicates a network-reachable, low-complexity, unauthenticated vulnerability, which raises exposure, but the impact is deliberately narrow: only VC:L (low confidentiality) with no integrity (VI:N) or availability (VA:N) and no subsequent-system impact (SC/SI/SA:N), yielding a score of 6.9 (Medium). No EPSS score, no CISA KEV listing, and no vendor-confirmed exploit code are present in the data, so exploitation is 'no public exploit identified at time of analysis' - note that a linked third-party GitHub issue (godzeo/vulhub/issues/2) exists but does not itself confirm weaponized POC. The signals are internally consistent rather than conflicting: an SSRF that is remotely triggerable but limited to low-confidence information disclosure. The main caveat is the authentication context - the vector asserts PR:N (unauthenticated), yet Appwrite avatar/screenshot endpoints typically operate within a project/API context, so defenders should verify whether an API key or session is required in their deployment; if so, real-world risk is lower than PR:N implies. The source-code evidence (DNS-rebinding mitigation and cloud-metadata header handling added in the fix) suggests the practical upside for an attacker - reaching internal services or cloud metadata - may exceed the modest VC:L rating, warranting prompt patching despite the Medium score. |
| Exploit ScenarioDerived | A remote attacker calls the Browser Screenshot Service endpoint with a crafted 'url' parameter pointing at an internal address (or a public domain that DNS-rebinds to one such as 169.254.169.254 or an internal service name), causing the server-side headless browser to fetch and render that internal resource. The returned screenshot can leak internal web interfaces or cloud metadata content back to the attacker. No public exploit is identified at time of analysis, though the attack is low-complexity and network-triggerable per the CVSS vector. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 11, 2026
Server-side request forgery in Appwrite 2.3.0 and earlier allows remote attackers to make the Browser Screenshot Service (exposed through the Avatars screenshot endpoint and its 'url' parameter) fetch arbitrary attacker-chosen URLs, reaching internal services or cloud metadata endpoints; because the headless browser resolves the hostname itself, the pre-patch hostname validation can be bypassed via DNS rebinding. Per the CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N), exploitation is unauthenticated over the network with confidentiality-only impact (score 6.9), and the independent assessment rates this a genuine but moderate-priority issue bounded to information disclosure through the rendered screenshot. No public exploit was identified at time of analysis, and exploitation requires the screenshot endpoint to be deployed and reachable; the vendor-released fix is Appwrite 2.4.0 (patch commit 393255e7302ae5503331d45802e2eee01c6a47fe, PR 13995).
RemediationAI
Upgrade to Appwrite 2.4.0 (vendor-released patch; commit 393255e7302ae5503331d45802e2eee01c6a47fe, PR https://github.com/appwrite/appwrite/pull/13995, release https://github.com/appwrite/appwrite/releases/tag/2.4.0), which validates the 'url' parameter with the new PublicURL validator and moves the headless browser container onto an isolated 'browser' network with public DNS resolvers only. If immediate upgrade is not possible, apply the deployment portion of the patch as a compensating control: detach the browser container from the appwrite network and attach it to a dedicated network whose DNS is restricted to public resolvers (1.1.1.1/8.8.8.8), so internal hostnames such as redis or appwrite-mariadb cannot be resolved - the trade-off is that any legitimate reliance on internal name resolution from the browser container will break. Additionally, block egress from the browser container to link-local and private ranges, especially 169.254.169.254, and enable IMDSv2-style protections on cloud instances; restricting browser egress to an allowlist of expected external hosts is more effective but will cause legitimate screenshot requests for unlisted sites to fail. If the Avatars screenshot feature is not needed, disable it entirely, and where possible require an API key or valid project session on the avatars endpoints - noting that the assessed CVSS vector is PR:N (unauthenticated), so operators should confirm whether their own deployment actually gates these routes, since that gate meaningfully limits exposure. Because exploitation depends on attacker-influenced DNS, running the browser container with a resolver that does not honor attacker-controlled rebinding (or pinning resolution for the validated host) reduces risk, though the primary fix remains upgrading to 2.4.0.
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
This is a classic CWE-918 server-side request forgery rooted in a validation/resolution mismatch (a time-of-check-to-time-of-use gap). Appwrite's Avatars screenshot endpoint (src/Appwrite/Platform/Modules/Avatars/Http/Screenshots/Get.php) accepted a user-supplied 'url' parameter and passed it through the PHP-level PublicHostname validator, which checked that the hostname resolved to a publicly routable address. The actual fetch, however, is performed by a separate headless Chromium 'browser' container that performs its own DNS resolution, so an attacker controlling DNS (rebinding) could return a public IP during validation and an internal IP (e.g. redis, appwrite-mariadb, or the 169.254.169.254 cloud metadata service) at fetch time, or simply point the browser at internal service names. The fix introduces a new Appwrite\Network\Validator\PublicURL class (extends Utopia\Validator\URL, additionally requiring a known public domain or public IP literal validated via Utopia\Domains\Domain::isKnown() and PublicHostname) and applies it consistently across the Screenshots, Image, and Favicon avatar endpoints. Critically, the patch also changes docker-compose.yml to place the browser container on a dedicated 'browser' network, removes its attachment to the appwrite network, and pins its DNS to public resolvers (1.1.1.1, 8.8.8.8) so it cannot resolve internal service names - an architectural egress restriction that complements the input validation. The stack is PHP/Utopia-based, consistent with the PHP and SSRF tags.
Know when Appwrite 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:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Remotely and unauthenticated-triggerable low-complexity SSRF (AV:N/AC:L/PR:N/UI:N) yielding limited internal-resource disclosure (C:L) with no integrity or availability impact.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
DescriptionCVE.org
A weakness has been identified in Appwrite up to 2.3.0. This vulnerability affects the function PublicHostname of the file src/Appwrite/Platform/Modules/Avatars/Http/Screenshots/Get.php of the component Browser Screenshot Service. This manipulation of the argument url causes server-side request forgery. The attack can be initiated remotely. Upgrading to version 2.4.0 is able to resolve this issue. Patch name: 393255e7302ae5503331d45802e2eee01c6a47fe. You should upgrade the affected component.
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.
Appwrite up to v1.2.1 was discovered to contain a Server-Side Request Forgery (SSRF) via the component /v1/avatars/favic
In Appwrite CLI before 3.0.0, when using the login command, the credentials of the Appwrite user are stored in a ~/.appw
Cross-site Scripting (XSS) - Stored in GitHub repository appwrite/appwrite prior to 1.0.0-RC1. Rated medium severity (CV
Argument injection in Appwrite before 2.0.0 allows an authenticated user holding the functions.write or sites.write perm
Appwrite <= v1.4.13 is affected by a Server-Side Request Forgery (SSRF) via the '/v1/avatars/favicon' endpoint due to an
Webhook signature bypass in the appwrite/templates github-issue-bot (≤ 1.1.2) allows any unauthenticated network caller
EUVD-2026-97127
GHSA-cfw6-h8vp-h745
NVD
CVE.org
EPSS
VulDB
Exploit-DB