CVE-2026-100227

Signature Forgery
Affects
Apache CXF
in
Apache CXF
No items found.
Versions
<3.6.13, >=4.0.0 <4.1.9, >=4.2.0 <4.2.4

Patch Available.

Exclamation circle icon
Patch Available

This Vulnerability has been fixed in the Never-Ending Support (NES) version offered by HeroDevs.

Overview

Apache CXF is an open-source services framework, maintained by the Apache Software Foundation, for building and consuming web services in Java. It implements the JAX-WS and JAX-RS APIs and supports SOAP, the WS-* standards, RESTful HTTP, and OAuth 2.0 over transports such as HTTP and JMS. Its modules are published as Maven artifacts under org.apache.cxf.

A signature forgery vulnerability (CVE-2026-100227) has been identified in the JAX-RS XML Security module of Apache CXF, which allows attackers to wrap any document signed by a trusted key in unsigned content that the application then treats as signed.

Per OWASP: Software and data integrity failures relate to code and infrastructure that does not protect against integrity violations.

This issue affects multiple versions of Apache CXF.

Details

Module Info

Vulnerability Info

This Medium-severity vulnerability is found in the org.apache.cxf:cxf-rt-rs-security-xml package in multiple versions of Apache CXF. The JAX-RS XML Signature filters XmlSigInHandler and XmlSigInInterceptor, which share AbstractXmlSigInHandler, and the streaming XmlSecInInterceptor verify an XML Signature on the request body but do not make sure that the XML they hand to the application is the XML the signature covers.

In AbstractXmlSigInHandler, the reference check only requires the enveloped-signature transform when the referenced element is the document root, and it ignores any other transform it does not recognize:

Element signedEl = getSignedElement(root, ref);
if (signedEl != null) {
    enveloped = signedEl == root;
} else {
    throwFault("Signature Reference ID is invalid", null);
}
...
for (int i = 0; i < transforms.getLength(); i++) {
    try {
        Transform tr = transforms.item(i);
        if (Transforms.TRANSFORM_ENVELOPED_SIGNATURE.equals(tr.getURI())) {
            envelopedConfirmed = true;
        } else if (c14TransformExpected != null && c14TransformExpected.equals(tr.getURI())) {
            c14TransformConfirmed = true;
        }
    } catch (Exception ex) {
        throwFault("Problem accessing Transform instance", ex);
    }
}

So a reference may point at a child element rather than the root, and transforms that exclude part of the referenced content are accepted. Once the signature value checks out, the handler passes the whole document root to the application, not the signed element:

message.setContent(XMLStreamReader.class,
                   new W3CDOMStreamReader(root));

For an enveloping signature, the body handed on is simply the first element of the first ds:Object, which need not be the element the reference points at:

Element objectNode = getNode(envelopingSigElement, Constants.SignatureSpecNS, "Object", 0);
...
Element node = DOMUtils.getFirstElement(objectNode);

The streaming XmlSecInInterceptor has the same gap: when a signature is required it only checks that a signature value was processed somewhere in the request, not that the root element is the signed one.

if (signatureRequired) {
    Event requiredEvent = SecurityEventConstants.SignatureValue;
    if (!isEventInResults(requiredEvent, incomingSecurityEventList)) {
        ...
    }
}

An attacker who holds any document signed by a trusted key can therefore keep the signed element (so the signature still verifies) and wrap it in, or place next to it, unsigned content of their choosing. The application then reads that unsigned content as if it were signed, defeating the integrity and origin guarantees the signature was meant to give.

Mitigation

Only recent versions of Apache CXF are community-supported. Older lines are End-of-Life and will not receive public updates to address this issue.

Users of the affected components should apply one of the following mitigations:

  • Upgrade to a currently supported Apache CXF release line (3.6.x or later) that contains the fix.
  • Leverage a commercial support partner like HeroDevs for post-EOL security support.

Credits

  • Guanping Zhang (finder)
Vulnerability Details
Severity
Level
CVSS Assessment
Low
>=0 <4
Medium
>=4 <6
High
>=6 <8
Critical
>=8 <10
Medium
ID
CVE-2026-100227
PROJECT Affected
Apache CXF
Versions Affected
<3.6.13, >=4.0.0 <4.1.9, >=4.2.0 <4.2.4
NES Versions Affected
Published date
October 14, 2026
≈ Fix date
October 14, 2026
Category
Signature Forgery
Vex Document
Download VEXHow do I use it?
Sign up for the latest vulnerability alerts fixed in
NES for Apache CXF
Rss feed icon
Subscribe via RSS
or

By submitting the form I acknowledge receipt of our Privacy Policy.

Thanks for signing up for our Newsletter! We look forward to connecting with you.
Oops! Something went wrong while submitting the form.