Skip to content

Zoom: XSS in Zoom.us Signup Flow

High
sirdarckcat published GHSA-fpgp-vrmv-v8f2 Jul 7, 2020

Package

zoom.us

Affected versions

<2020.04.08

Patched versions

2020.07.07

Description

Summary

Zoom.us did not sanitize the name of the user on the federated signup flow. This allowed an attacker to execute arbitrary JavaScript on a victim's browser in the context of https://zoom.us/ when opening a malicious link.

Severity

Calculated as High by Google (source). The attacker needs to convince a victim to visit a malicious link, then the exploit can log the victim back in as the real user, and gain access to the victim's Zoom.us account. This could allow an attacker to do anything the victim can do through the website.

Proof of Concept

The victim had to visit a URL of the form: https://zoom.us/signin/term?token=...&type=2.

In order to construct such a URL, the attacker had to:

  1. Visit the following URL while being logged-in with the attacker's account (the attacker's account needs to have the xss payload on its name): https://accounts.google.com/o/oauth2/v2/auth?response_type=code&access_type=offline&client_id=849883241272-ed6lnodi1grnoomiuknqkq2rbvd2udku.apps.googleusercontent.com&scope=profile%20email&redirect_uri=https%3A%2F%2Fzoom.us%2Fgoogle%2Foauth&state=https%3A%2F%2Fzoom.us%2Fgoogle%2Foauth
  2. That URL would then redirect to: https://zoom.us/google/oauth?state=https%3A%2F%2Fzoom.us%2Fgoogle%2Foauth&scope=email+profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&code=..CODE..
  3. That URL would then redirect to https://zoom.us/signin/term?token=...TOKEN..&type=2

The last URL in step (3) could then be sent to unsuspecting victims, which would then trigger the XSS.

Additional Analysis

OAuth flow

Usually an attack like this would be prevented by a CSRF token in the state parameter of the OAuth web flow, but Zoom.us did not contain any unpredictable tokens, so exploitation was straightforward.

User interaction

If the victim was an active Zoom.us user, then the attack required no user interaction. If the victim was not an active Zoom user, then the victim had to pass the "age check" before the XSS could trigger.

Screenshot 2020-07-10 at 09 23 33

XSS payload in name

To put a payload in a Google account name an attacker can use a service account, a premium GSuite account through an API, or a legacy GMail account.

The proof of concept provided to Zoom used GSuite.
Screenshot 2020-04-08 at 09 50 48

@totallyunknown provided a screenshot with a legacy GMail account.
xss payload screenshot

Severity

High

CVE ID

No known CVE

Weaknesses

No CWEs

Credits