[CVE-2025-65237] USSD Gateway Reflected Cross-Site Scripting

Technical information about the CVE-2025-65237 in OpenCode USSD GW application.

Description

Reflected Cross-Site Scripting in the USSD Gateway application offered by OpenCode Systems allows the user who has an access to the vulnerable function to execute JavaScript code against the victim. https://www.cve.org/CVERecord?id=CVE-2025-65237

Application Details

  • Name: USSD Gateway

  • Vendor: OpenCode Systems

  • Version: OC Release 5 - Version 6.13.11

Technical Details

  • Vulnerable Endpoint: /occontrolpanel/index.php?w=ocussdgw&m=sessions&a=list_sessions_a

  • Vulnerable Parameter: flt_sessid

  • Payload Sample: flt_sessid=6"><svg/onload=alert("poc%20XSS")>

Exploitation

This vulnerability is a chain of 2 vulnerabilities to convert self XSS to reflected XSS. The server assign cookies to the user after being logged in without specifying the SameSite value to Lax allowing the attacker to convert the request from GET to POST to bypass the CSRF verification parameter in the POST body.

The original request shows the vulnerable parameter in the POST body and contains CSRF verification parameter as well.

An attempt was made to remove the CSRF verification parameter's value or delete the whole parameter because it's now self XSS and can't be shared with different users, but the server rejected the request as shown below

It was noticed that the server is assigning the cookies to the user without adding Lax value for the SameSite parameter. This allows us to convert the request from POST to GET and remove the CSRF verification parameter to make a vulnerable URL can be shared with different users.

For more information about the SameSite types and bypasses, browse the following labs https://portswigger.net/web-security/csrf/bypassing-samesite-restrictions

By Changing the request from POST to GET and remove the verification parameter's value for the CSRF or even the whole parameter and send it again, the server accepted the request and the vulnerable parameter's value is being reflected in the response.

Nuclei Template

You can use this template for an easy detection.

Last updated