cve · stored xss

Three Stored XSS CVEs in Deskpro

2021 4 min read r29k

Three stored cross-site scripting vulnerabilities I reported in Deskpro, spanning email templates, file downloads, and profile links.

Deskpro is a widely used helpdesk platform, available both as a cloud product and on-premise. While testing it I found and reported three stored XSS issues, each assigned its own CVE. They share a theme: a low-privileged, or in one case unauthenticated, user can store a JavaScript payload that later executes in another user's session, leading to account takeover or privilege escalation. Here's each one.

CVE-2020-28722

Stored XSS in custom email templates

ComponentCustom email templates
AffectedDeskpro Cloud and on-premise, 2020.2.3.48207 (July 2020)
AccessLow-privileged authenticated user
ImpactJavaScript execution leading to account takeover
VectorSave a custom email template containing an XSS payload
CVE-2021-36695

Stored XSS in the file download feature

ComponentFile download feature
AffectedDeskpro Cloud and on-premise, 2021.1.6 (June 2021)
AccessAny authenticated non-admin user
ImpactJavaScript execution leading to privilege escalation
VectorCreate a file-download link with the payload javascript:alert(1)
CVE-2021-36696

Stored XSS in profile social links

ComponentSocial media links on the profile
AffectedDeskpro Cloud and on-premise, 2021.1.6 (June 2021)
AccessUnauthenticated user
ImpactJavaScript execution in the victim's session, leading to privilege escalation
VectorAdd a profile social link with the payload javascript:alert(1)

The common thread

All three come down to the same root cause: fields that accept links never sanitized the javascript: URI scheme. Whether it's an email template, a file-download link, or a social link on a profile, letting javascript:alert(1) be saved and later rendered is enough to run arbitrary script in a victim's context. The fix is identical across all three: validate and normalize URLs on the server, reject dangerous schemes like javascript:, and escape user-supplied content before it's rendered.


Video PoCs are available for each issue. Questions or feedback? Reach me on Twitter @R29k_. Thanks for reading.

more writeups
Account Takeover via Chained IDORs Wayback Machine to Account Takeover SSTI to Local File Read
← all writeups