Summary
defaultChangePassword.jsp in Silverpeas through 6.4.6 reflects the Login and DomainId request parameters into HTML attribute values without context-appropriate output encoding. Because the page is reachable without authentication, a remote attacker can craft a link that executes JavaScript in a victim’s Silverpeas origin.
Technical details
The password-change page writes both request parameters directly into hidden input values:value attribute, allowing the rest of the input to be parsed as markup.
An XSS filter applies to the page, but the relevant rule only rejects script and iframe elements:
svg and img, pass this blocklist. Output encoding is therefore required even with the filter enabled.
Reproduction
1. Inject markup through Login
No Silverpeas account is required. Open the following URL, replacing <target> with the test instance:
DomainId.

XSS through the Login parameter

XSS through the DomainId parameter

The injected SVG element in the server response
2. Extract an API token from an authenticated session
The vulnerable page itself is public. If the victim is already signed in, injected JavaScript runs with access to the victim’s Silverpeas origin. The profile page exposes the user’s API token in the DOM, so the payload can request that page, extract the token, and send it to an attacker-controlled endpoint:API-token extraction from an authenticated administrator session
Impact
The attacker does not need a Silverpeas account. JavaScript executes in the application origin after a victim opens the crafted link. For an authenticated administrator, the exposed API token allows the attacker to authenticate to the API and perform administrative actions, including creating or taking over accounts.Remediation
Upgrade to Silverpeas 6.4.7 or later. The direct fix is to encodeLogin and DomainId for an HTML attribute context before rendering them. Expanding the XSS blocklist can provide additional filtering, but it does not replace contextual output encoding.

