CVE-2026-57527 Overview
CVE-2026-57527 is an insecure deserialization vulnerability in the Zed Attack Proxy (ZAP) ViewState add-on before version 4. The flaw resides in the JSFViewState.decode() method, which base64-decodes the javax.faces.ViewState HTTP response parameter and passes the bytes directly to ObjectInputStream.readObject(). No deserialization filter, allowlist, or type restriction is applied. An attacker who controls a web server proxied through ZAP can embed a malicious serialized Java object in a response. When the ZAP Desktop UI renders the ViewState panel, the object is deserialized inside the ZAP Java Virtual Machine (JVM), producing arbitrary code execution on the tester's workstation.
Critical Impact
Arbitrary code execution inside the ZAP JVM on the security tester's host whenever they proxy through a malicious server and open the ViewState panel.
Affected Products
- OWASP ZAP ViewState add-on versions before 4
- ZAP desktop installations that have the ViewState add-on installed
- Any ZAP workflow that proxies traffic from an attacker-controlled JSF web server
Discovery Timeline
- 2026-06-24 - OWASP ZAP publishes blog post disclosing the vulnerability
- 2026-06-26 - CVE-2026-57527 published to NVD
- 2026-06-26 - Last updated in NVD database
Technical Details for CVE-2026-57527
Vulnerability Analysis
The ZAP ViewState add-on inspects JavaServer Faces (JSF) ViewState fields observed in proxied HTTP responses and displays their decoded contents in a Desktop UI panel. The decoder accepts the base64 payload straight from the wire and reconstructs Java objects with ObjectInputStream.readObject(). Because Java native deserialization instantiates arbitrary classes present on the classpath, gadget chains available inside the ZAP JVM can be triggered to execute code. This is a textbook [CWE-502] Deserialization of Untrusted Data flaw.
The attack requires user interaction: the tester must proxy the malicious response through ZAP and load the ViewState panel. Once triggered, the payload runs with the privileges of the ZAP process, giving the attacker access to intercepted traffic, saved sessions, stored credentials, and the underlying operating system.
Root Cause
The JSFViewState.decode() method lacks any input validation on deserialized types. ObjectInputStream is invoked without a setObjectInputFilter() allowlist, without a subclass override of resolveClass(), and without pre-validation of the byte stream. Any serializable class reachable on the classpath can therefore be constructed during deserialization.
Attack Vector
An attacker hosts or compromises a web application that a ZAP user proxies during testing. The response includes a crafted javax.faces.ViewState value containing a base64-encoded gadget chain. When the ZAP operator inspects the response in the ViewState panel, deserialization executes the payload inside the ZAP JVM. Refer to the VulnCheck Security Advisory and the OWASP ZAP Blog Post for technical details.
Detection Methods for CVE-2026-57527
Indicators of Compromise
- Unexpected child processes spawned by the ZAP Java process (java.exe or java) such as shells, cmd.exe, powershell.exe, or /bin/sh.
- Outbound network connections initiated by the ZAP JVM to unfamiliar hosts shortly after loading a target application in the proxy.
- Presence of ViewState add-on versions prior to 4 in the ZAP add-ons directory.
Detection Strategies
- Hunt for base64-encoded Java serialized object markers (rO0AB) inside javax.faces.ViewState values captured by network sensors or proxies.
- Alert on ZAP JVM processes executing scripting interpreters, writing to autorun locations, or loading unusual native libraries.
- Correlate ZAP session activity with subsequent host process creation events to surface exploit attempts.
Monitoring Recommendations
- Log and review all add-on versions installed on tester workstations and flag ViewState add-on installations below version 4.
- Monitor endpoint telemetry from workstations used for penetration testing, where security tooling itself is a high-value target.
- Track egress traffic from testing hosts and validate destinations against the current engagement scope.
How to Mitigate CVE-2026-57527
Immediate Actions Required
- Upgrade the ZAP ViewState add-on to version 4 or later on every ZAP installation in the environment.
- Restart ZAP after the upgrade so the previous add-on classes are unloaded from the JVM.
- Avoid proxying untrusted or unknown web applications with ZAP until the patched add-on is in place.
Patch Information
The fix is released as ViewState add-on viewstate-v4. The maintainer commit ac6c3f9 removes the direct ObjectInputStream.readObject() call path so that untrusted ViewState bytes are no longer deserialized. See the GitHub Release Tag, the GitHub Pull Request, and the GitHub Commit Record for the source changes.
Workarounds
- Uninstall the ViewState add-on from ZAP until version 4 can be deployed.
- Do not open the ViewState panel for responses originating from untrusted targets.
- Run ZAP inside a disposable virtual machine or container to constrain the blast radius if exploitation occurs.
# Verify installed ZAP add-on versions and remove vulnerable ViewState add-on
ls ~/.ZAP/plugin/ | grep -i viewstate
rm ~/.ZAP/plugin/viewstate-release-*.zap
# Then update via ZAP Marketplace to viewstate-v4 or newer
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

