MEDIUM 5.9

CVE-2026-58501: Zeep SOAP Client forbid_external Bypass Vulnerability

Zeep, a popular Python library for consuming SOAP web services, has a configuration bypass vulnerability affecting versions 4.0.0 through 4.3.2. The library includes a security setting called forbid_external designed to prevent risky automatic fetching of external resources during WSDL and XSD parsing, but this setting is not actually enforced. An attacker can bypass this protection by crafting malicious SOAP schema documents that include references to external XML resources. When a vulnerable application parses these documents, Zeep will automatically fetch attacker-controlled URLs over HTTP or HTTPS without respecting the forbid_external setting, potentially exposing sensitive information or enabling further attacks. The issue is resolved in version 4.3.3.

Source data · NVD / CISA · public domain

CVSS
3.1 · 5.9 MEDIUM · CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
Weaknesses (CWE)
CWE-918
Affected products
1 configuration(s)
Published / Modified
2026-07-08 / 2026-07-10

NVD description (verbatim)

Zeep is a Python SOAP client. From 4.0.0 before 4.3.3, Settings.forbid_external is defined but not enforced when parsing WSDL or XSD documents, allowing transitive xsd:import, xsd:include, wsdl:import, and lxml entity or DTD references to fetch attacker-chosen HTTP or HTTPS URLs. This issue is fixed in version 4.3.3.

3 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability stems from incomplete implementation of the forbid_external security control in Zeep's WSDL and XSD document parser. While the setting is defined in the codebase, validation logic fails to check it when processing xsd:import, xsd:include, wsdl:import directives, and lxml entity or DTD expansion directives. This allows an attacker to include references to attacker-controlled resources in schema documents. When a vulnerable Zeep instance parses such documents—whether directly or transitively through imported schemas—it will resolve and fetch these external references regardless of the forbid_external configuration. The underlying cause is CWE-918 (Server-Side Request Forgery), where the application makes network requests on behalf of the user without proper authorization or validation controls.

Business impact

Organizations using Zeep to consume untrusted or third-party SOAP services face potential data exfiltration and reconnaissance risks. If an attacker can influence WSDL or XSD content consumed by an application—either by compromising a SOAP service provider, performing man-in-the-middle interception, or submitting malicious schema references—Zeep will fetch attacker-chosen URLs from the server running the application. This can be exploited for information disclosure (reading server responses, testing internal network connectivity, probing internal services), credential harvesting, or as a pivot point for further exploitation. The impact is elevated if the Zeep client runs on a server with access to sensitive internal resources or if it processes schemas from multiple external sources.

Affected systems

Python applications using Zeep library versions 4.0.0 through 4.3.2 are affected. This includes any deployment where Zeep is integrated to consume SOAP web services. Systems are at risk only if they parse WSDL or XSD documents from sources an attacker can influence or intercept. Applications that consume only trusted, internally-controlled SOAP services and never parse external schema documents have lower immediate risk, but configurations should still be verified. Verify your installed version by checking your Python environment or requirements file; the fix is available in Zeep 4.3.3 and later.

Exploitability

Exploitation requires that an attacker either control or influence the WSDL/XSD content that a Zeep client parses. The CVSS vector indicates network-based attack (AV:N) but with high complexity (AC:H), reflecting that successful exploitation depends on attacker ability to supply malicious schema content and knowledge of the target application's network environment. Exploitation does not require authentication or user interaction. The attack is not currently tracked in the CISA Known Exploited Vulnerabilities catalog, suggesting active exploitation in the wild has not yet been widely reported, though the technical barrier to exploitation is relatively low for attackers with schema control.

Remediation

Update Zeep to version 4.3.3 or later, which enforces the forbid_external setting correctly. Before patching, review SOAP service integrations to identify which are consuming external or untrusted schemas. For high-risk integrations, consider temporarily disabling or restricting access to the Zeep client until patches can be deployed. Additionally, ensure forbid_external is explicitly set to true in Zeep configuration for any client handling external schemas, and verify that the patched version actually enforces this setting in your environment. Monitor for suspicious outbound connections from application servers during and after remediation.

Patch guidance

Update the zeep package to version 4.3.3 or any version released after the fix. Use `pip install --upgrade zeep>=4.3.3` or update your requirements.txt/pyproject.toml and re-install. Verify the patched version is active in your Python environment by running `python -c "import zeep; print(zeep.__version__)"`. After patching, redeploy affected applications and confirm they restart cleanly with the new version. No breaking changes are expected in the patch; the fix corrects a configuration enforcement bug without API changes.

Detection guidance

Monitor outbound HTTP and HTTPS connections from Python application servers running Zeep, especially to unexpected destinations or internal IP ranges. Check application logs and proxy/firewall logs for requests originating from Zeep processes to external or suspicious URLs during SOAP client initialization or schema parsing operations. Audit current Zeep installations: use `pip show zeep` or examine requirements files to identify instances below version 4.3.3. Review SOAP service configurations to identify which applications consume external schemas and assess whether forbid_external is explicitly enabled. If available, enable HTTPS inspection and DNS logging to catch potential data exfiltration attempts via external schema references.

Why prioritize this

Although assigned MEDIUM severity (CVSS 5.9) and not yet in the known exploited vulnerabilities catalog, this issue should be prioritized for rapid patching because: (1) the exploit mechanism is straightforward for any attacker controlling or intercepting SOAP schema content; (2) applications consuming external SOAP services are increasingly common in enterprise integrations; (3) data exfiltration via SSRF can be silent and difficult to detect; (4) the fix is a simple version bump with no known breaking changes. Prioritize applications consuming schemas from third-party providers or over untrusted network paths first, then remediate all remaining instances as part of regular patch cycles.

Risk score, explained

The CVSS 5.9 MEDIUM score reflects high confidentiality impact (H) balanced against high attack complexity (H) and network-only attack surface (AV:N/AC:H). The complexity is elevated because successful exploitation depends on the attacker's ability to supply or influence WSDL/XSD content to the target application. However, in scenarios where an organization consumes untrusted third-party SOAP services or operates on networks vulnerable to interception, the practical risk is elevated. No integrity or availability impact is scored, limiting the severity ceiling. Organizations should apply their own risk context: applications on high-trust networks consuming only internal schemas may defer patching slightly, while those consuming external schemas should treat this as HIGH priority locally.

Frequently asked questions

How can I tell if my application is vulnerable?

Check if you are using Zeep versions 4.0.0 through 4.3.2. Run `pip show zeep` to determine your installed version. Then review your application code to see if it parses WSDL or XSD documents from external sources, third-party providers, or untrusted network paths. Applications that only consume internally-controlled SOAP services have lower risk, but should still be patched. Enable forbid_external in your Zeep configuration and verify after patching that external resource fetching is actually blocked.

What is the forbid_external setting supposed to do?

The forbid_external configuration option in Zeep is designed to prevent the SOAP client from automatically fetching external XML resources referenced in WSDL or XSD schemas. When enabled, it should block xsd:import, xsd:include, wsdl:import directives and external entity references that point to URLs. This protects against SSRF and information disclosure attacks. Prior to version 4.3.3, this setting was defined but not enforced—the application would ignore it and fetch external resources anyway. After upgrading to 4.3.3, the setting is properly honored.

Could this be exploited to compromise my server or install malware?

The primary attack vector is information disclosure: an attacker can cause your server to make HTTP/HTTPS requests to attacker-chosen URLs and potentially read the responses, revealing server configuration, internal IP addresses, or service banners. Depending on your application logic, responses could be logged or stored. The vulnerability does not directly allow remote code execution or file upload, so malware installation would require a secondary vulnerability. However, SSRF can be chained with other attacks—for example, to probe internal services or access cloud metadata endpoints. Patching this issue eliminates this SSRF vector.

Do I need to make code changes or just update the package?

Updating to Zeep 4.3.3 or later is sufficient; no code changes are required. The patch fixes the enforcement of the forbid_external setting without changing the API. After updating, we recommend explicitly setting forbid_external=True in your Zeep client configuration to ensure external schemas are blocked, then testing your integrations to confirm they still work as expected.

This vulnerability intelligence is provided for informational purposes and reflects publicly available information as of the publication date. While SEC.co strives for accuracy, we do not warrant the completeness or fitness of this content for any particular use. Organizations should verify all technical claims, patch versions, and compatibility details against official vendor advisories and their own testing before deploying patches. Risk scores and exploitability assessments are contextual; your organization's actual risk depends on system configuration, network topology, and threat model. Consult with your security team before making remediation decisions. This content is not legal advice and does not constitute professional security guidance. Source: NVD (public-domain), retrieved 2026-08-17. Analysis generated by SEC.co (claude-haiku-4-5).