VYPR
Critical severityNVD Advisory· Published Oct 25, 2023· Updated Sep 10, 2024

XWiki Platform web templates vulnerable to reflected XSS in the create document form if name validation is enabled

CVE-2023-45136

Description

XWiki Platform is a generic wiki platform offering runtime services for applications built on top of it. When document names are validated according to a name strategy (disabled by default), XWiki starting in version 12.0-rc-1 and prior to versions 12.10.12 and 15.5-rc-1 is vulnerable to a reflected cross-site scripting attack in the page creation form. This allows an attacker to execute arbitrary actions with the rights of the user opening the malicious link. Depending on the rights of the user, this may allow remote code execution and full read and write access to the whole XWiki installation. This has been patched in XWiki 14.10.12 and 15.5-rc-1 by adding appropriate escaping. The vulnerable template file createinline.vm is part of XWiki's WAR and can be patched by manually applying the changes from the fix.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
org.xwiki.platform:xwiki-platform-web-templatesMaven
>= 12.0-rc-1, < 14.10.1214.10.12
org.xwiki.platform:xwiki-platform-web-templatesMaven
>= 15.0-rc-1, < 15.5-rc-115.5-rc-1

Affected products

1

Patches

1
ba56fda17515

XWIKI-20962: Escape template provider errors during document creation

https://github.com/xwiki/xwiki-platformMichael HamannJun 5, 2023via ghsa
2 files changed · +52 2
  • xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/createinline.vm+4 2 modified
    @@ -68,9 +68,11 @@
       <div class="box errormessage">
         #set($allowedSpaces = $createAllowedSpaces)
         #if ($allowedSpaces.size() == 1)
    -      $services.localization.render('core.create.template.allowedspace.inline', [$templateProvider, $allowedSpaces.get(0)])
    +      $escapetool.xml($services.localization.render('core.create.template.allowedspace.inline', [$templateProvider,
    +        $allowedSpaces.get(0)]))
         #else
    -      $services.localization.render('core.create.template.allowedspaces.inline', [$templateProvider, $allowedSpaces.toString()])
    +      $escapetool.xml($services.localization.render('core.create.template.allowedspaces.inline', [$templateProvider,
    +        $allowedSpaces.toString()]))
         #end
       </div>
     #end
    
  • xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/CreateInlinePageTest.java+48 0 modified
    @@ -20,6 +20,7 @@
     package org.xwiki.web;
     
     import java.util.List;
    +import java.util.stream.Stream;
     
     import javax.inject.Inject;
     
    @@ -28,6 +29,8 @@
     import org.jsoup.nodes.Element;
     import org.junit.jupiter.api.BeforeEach;
     import org.junit.jupiter.api.Test;
    +import org.junit.jupiter.params.ParameterizedTest;
    +import org.junit.jupiter.params.provider.MethodSource;
     import org.xwiki.template.TemplateManager;
     import org.xwiki.test.page.PageTest;
     import org.xwiki.velocity.VelocityManager;
    @@ -118,4 +121,49 @@ void testDocumentAlreadyExistsError() throws Exception
                 DOCUMENT_REFERENCE, viewURL, editURL);
             assertEquals(expectedMessage, errormessage.text());
         }
    +
    +    /**
    +     * Test that when there is an exception about the template provider not allowing the chosen space, the allowed
    +     * spaces are correctly escaped.
    +     */
    +    @ParameterizedTest
    +    @MethodSource("allowedSpacesProvider")
    +    void templateProviderRestrictionErrorEscaping(List<String> allowedSpaces) throws Exception
    +    {
    +        String provider = "\"provider</div>";
    +        this.request.put("templateprovider", provider);
    +        String template = "template</div>";
    +
    +        // Set "createException" to an XWikiException to simulate a template provider restriction error.
    +        Object[] args = { template, DOCUMENT_REFERENCE, DOCUMENT_REFERENCE };
    +        XWikiException exception = new XWikiException(XWikiException.MODULE_XWIKI_STORE,
    +            XWikiException.ERROR_XWIKI_APP_TEMPLATE_NOT_AVAILABLE,
    +            "Template {0} cannot be used in space {1} when creating page {2}", null, args);
    +        this.velocityManager.getVelocityContext().put(CREATE_EXCEPTION_VELOCITY_KEY, exception);
    +        // Set the allowed spaces to a list containing some HTML.
    +        this.velocityManager.getVelocityContext().put("createAllowedSpaces", allowedSpaces);
    +
    +        // Render the template.
    +        Document document = Jsoup.parse(this.templateManager.render(CREATE_INLINE_VM));
    +        Element errormessage = document.getElementsByClass(ERROR_MESSAGE_CLASS).first();
    +        assertNotNull(errormessage);
    +
    +        String expectedMessage;
    +        if (allowedSpaces.size() == 1) {
    +            expectedMessage = String.format("core.create.template.allowedspace.inline [%s, %s]",
    +                provider, allowedSpaces.get(0));
    +        } else {
    +            expectedMessage = String.format("core.create.template.allowedspaces.inline [%s, %s]",
    +                provider, allowedSpaces);
    +        }
    +        assertEquals(expectedMessage, errormessage.text());
    +    }
    +
    +    static Stream<List<String>> allowedSpacesProvider()
    +    {
    +        return Stream.of(
    +            List.of("allowedSpace</div>"),
    +            List.of("allowedSpace1</div>", "allowedSpace2</div>")
    +        );
    +    }
     }
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.