Skip to main content

Endatix EUVDEUVD-2026-112410

| CVE-2026-61529 MEDIUM
Server-Side Request Forgery (SSRF) (CWE-918)
2026-10-28 security-advisories@github.com
4.7
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Find public enabled form
  2. Delivery
    Post submission with internal URL in file content
  3. Exploit
    JSON stored verbatim after well-formedness check
  4. Execution
    Staff downloads submission files
  5. Persist
    Server issues unvalidated GET to internal target
  6. Impact
    Response zipped for viewer, exposure blind/observational

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

The target form must have both IsPublic and IsEnabled set (the normal state of a published intake form), and if reCAPTCHA v3 is configured the anonymous submission must pass it. The outbound request fires only when a staff member holding the submissions.view permission invokes POST /forms/{formId}/submissions/{submissionId}/files, so exploitation is second-order and gated on victim staff interaction (UI:R) that the attacker cannot trigger directly. Only file objects whose content begins with http:// or https:// reach the network sink; data: URIs and raw base64 content are decoded locally and are not exploitable. Exploitation is blind: the fetched body is delivered into the staff viewer's ZIP, not to the attacker, so confirmation relies on observable request behavior (status, timing, connection success) or information the viewer exposes. The server must also have network reachability to the targeted internal/link-local/metadata address for the SSRF to yield useful results.

Impact

This is a genuine but second-order, moderate-risk SSRF (CWE-918), not a drop-everything emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N, base 4.7) is internally consistent with the mechanism: the attacker-facing step (anonymous POST of a submission) is network-reachable, low-complexity, and unauthenticated (PR:N), but the dangerous outbound fetch only fires when a staff member with submissions.view later downloads the submission's files (UI:R), making this blind/stored and dependent on a victim action the attacker cannot force. The S:C (scope change) and C:L are well-justified: the server can be coerced to reach cloud metadata (169.254.169.254), loopback, link-local, and internal services otherwise unreachable from the internet (authority-boundary crossing), but the response is placed in the staff viewer's ZIP rather than returned to the attacker, so disclosure is indirect/observational. No EPSS score and no KEV status were supplied; absence of these is not evidence of safety, but there is no signal of active exploitation. The vuln.today decision label is this_month (not act_now/emergency), aligning with a real-but-not-critical priority. A public PoC reference exists in the GHSA advisory (a step-by-step walkthrough); it is not verified as working exploit code. Net: a real issue worth patching on a normal priority cycle, elevated for internet-facing deployments running public intake forms, tempered by the required staff interaction and blind data return.

Exploit ScenarioDerived

An unauthenticated attacker locates a public, enabled Endatix intake form and submits JSON containing a file object whose content field is an internal URL such as http://169.254.169.254/latest/meta-data/iam/security-credentials/, which is stored verbatim after only a well-formedness check (passing reCAPTCHA v3 first if configured). When a staff member with submissions.view later downloads that submission's files, the server issues an unvalidated HttpClient.GetAsync to the attacker-chosen internal address and places the response in the staff viewer's ZIP. A public PoC reference exists in the GHSA advisory; it is not verified as working exploit code, and exploitation is blind, with success inferred from timing, reachability, or what the viewer surfaces.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 28, 2026

Blind, second-order server-side request forgery in Endatix 0.6.0 and earlier lets unauthenticated attackers plant HTTP/HTTPS URLs inside the file objects of a public form submission, which the server later fetches from its own network position when a staff member with submissions.view downloads that submission's files. The stored JSON is only checked for well-formedness, and SubmissionFileExtractor passes the attacker-supplied content string straight to HttpClient.GetAsync with no scheme, host, or resolved-IP validation, so internal services, loopback, link-local and cloud metadata endpoints (169.254.169.254) become reachable through the Endatix server; the fetched body lands in the staff viewer's ZIP rather than being returned to the attacker, so disclosure is blind or observational. Exploitation is gated on a public and enabled form, a passing reCAPTCHA v3 challenge when configured, and a staff file-download action the attacker cannot trigger directly; a public PoC walkthrough exists in the vendor advisory but is not verified as working exploit code, and there is no confirmed active exploitation (CISA KEV) at time of analysis.

RemediationAI

Vendor-released patch: 0.7.0 - upgrade Endatix to v0.7.0 (https://github.com/endatix/endatix/releases/tag/v0.7.0), which corresponds to commit 795b8aed71060f11da39971b9130130f5ef49362 and PR 824. After upgrading, URL re-fetching is fail-closed and only proceeds when the stored URL host matches the configured Azure Blob StorageOptions HostName and the path matches the canonical {UserFilesContainerName}/s/{formId}/{submissionId}/{fileName} form for the submission being downloaded, so the storage settings must actually be configured: the documentation warns to use the public blob hostname that Hub writes into submission JSON (not a Private Link DNS name unless respondents see it), and notes that misconfiguring HostName to an internal host is operator error. If Azure Blob is not configured, all URL fetches are rejected outright while data: URIs and raw base64 content continue to work, a viable interim posture if URL-based file answers are not needed. The fixed version also disallows credentials in URLs and stops following HTTP redirects (AllowAutoRedirect = false), so redirect-based bypasses are closed. As defense in depth the vendor recommends outbound egress policy restricting the API workload to legitimate destinations - Azure Storage service tags or regional blob IP ranges, the storage account public endpoint or Private Endpoint subnets under Private Link - while denying RFC1918, loopback and link-local targets including 169.254.169.254 except where explicitly required for platform health, implemented via Azure Firewall application rules, NSG egress restrictions or equivalent controls; the trade-off is that over-broad egress rules will break legitimate storage fetches and platform health probes, so scope them to the storage endpoints actually in use.

Affected VersionsENISA

endatix < 0.7.0

Affected Packages

euvd endatix fix: 0.7.0

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

Endatix is a self-hosted ASP.NET Core form/survey platform exposing a headless API built on minimal-API endpoints. The anonymous POST /forms/{formId}/submissions endpoint (Create.cs, AllowAnonymous) accepts a JsonData payload whose only validation is a ValidJsonString rule in BaseSubmissionRequest.cs, so arbitrary nested objects are persisted verbatim. On the staff side, POST /forms/{formId}/submissions/{submissionId}/files (Permissions(Actions.Submissions.View)) routes to GetFilesHandler, which parses the stored JSON and calls ISubmissionFileExtractor. In SubmissionFileExtractor.cs, IsFileObject matches any object carrying name, type and content; the content string is then branched three ways - an http:// or https:// prefix goes to ExtractFromUrlAsync, a data: prefix goes to ExtractFromDataUri, and anything else is treated as raw base64. The latter two decode in-process with Convert.FromBase64String and touch no network, while the URL branch creates a client via IHttpClientFactory and issues GetAsync with no allow-list, no host check, no private/loopback/link-local filtering and no DNS-rebinding guard. This is the classic CWE-918 pattern: an unvalidated user-controlled destination driving server-side egress, made second-order by the storage step. The upstream fix (commit 795b8aed, PR 824, release v0.7.0) makes URL fetches fail-closed, requiring the URL host to match the configured Azure Blob StorageOptions HostName and the canonical path {UserFilesContainerName}/s/{formId}/{submissionId}/{fileName} for the current request, restricting to http/https with no embedded credentials, and disabling auto-redirect (AllowAutoRedirect = false); the extractor signature gains formId so the path can be checked.

Know when the next one hits your stack

  • 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

Vendor (github) PRIMARY 4.7 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N
vuln.today AI 4.7 MEDIUM

Anonymous network-reachable submission (PR:N, AV:N, AC:L); fetch requires a staff download (UI:R); pivot to internal authority (S:C) with blind, indirect disclosure (C:L) and no integrity or availability impact.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Oct 28, 2026 - 20:34 EUVD

DescriptionCVE.org

Endatix is a self-hosted form and survey management platform with a headless API. Prior to 0.7.0, the anonymous POST /forms/{formId}/submissions endpoint stores attacker-controlled JsonData after checking only that the JSON is well formed. A file object with name, type and content fields can contain an HTTP or HTTPS URL. When a staff member with submissions.view permission invokes POST /forms/{formId}/submissions/{submissionId}/files, GetFilesHandler passes the stored data to SubmissionFileExtractor in src/Endatix.Infrastructure/Features/Submissions/SubmissionFileExtractor.cs, which calls HttpClient.GetAsync without validating the destination URL, host or resolved IP addresses against internal address ranges. This permits stored, second-order server-side GET requests to internal services, cloud metadata, loopback and link-local addresses from the server's network position. The form must have IsPublic and IsEnabled set, and an anonymous submission must pass reCAPTCHA v3 when configured. The fetched response is placed in the staff viewer's ZIP, not returned directly to the attacker, so disclosure to the attacker is blind or indirect through observable request behavior or information exposed by the viewer. No integrity or availability impact is asserted; data: and raw-base64 content are decoded locally without network requests. This issue is fixed in version 0.7.0.

Threat Intelligence Overview

Prevalence
Low
niche self-hosted open-source form platform, limited enterprise footprint
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

24
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +24
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy