Is Gmail Free Online Polls & Surveys by cloudHQ safe?
Gmail Polls & Surveys by cloudHQ reads your other signed-in Google account addresses and sends them to cloudHQ.
When Gmail loads, the extension probes mail.google.com/mail/u/0 through u/20 to find every Google account address signed in to the browser. It sends that list, with the current account email, to cloudHQ's servers, and repeats this every two weeks. The other account addresses are not needed to build a poll.
Who publishes itcloudHQ LLC - 19 other listings from the same operator, 7 of them carrying a finding
cloudHQ LLC - 19 other listings from the same operator, 7 of them carrying a finding
What this publisher told the store about itself, and the other listings that told it the same thing.
Same store account
19 other listings published from this account, 171k+ users between them. 7 of them carry a finding.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
cloudHQ Gmail extension sends all signed-in Google addresses to cloudhq.net
Code analysis shows the content script probes /mail/u/0..20 on Gmail and posts all signed-in account addresses to cloudhq.net every two weeks, with no consent prompt in the code path.
- Severity
- High unwanted
- Type
- Unexpected
- CWE
- CWE-359
- Source
- Dynamic sandbox
You open Gmail in a browser with the extension installed.
The extension looks up the addresses of your other signed-in Google accounts and sends them to cloudhq.net.
Repeats about every two weeks.
Account enumeration and upload
Account probe loop
content.js:45860fn_get_switcher_account_emails = function(e, n) { var r = this; if (r.g_switcher_account_emails_index > r.g_switcher_account_emails_max_tries) return ..., void e(); r.g_switcher_account_emails_index++; var i = "https://mail.google.com/mail/u/" + r.g_switcher_account_emails_index + "/?sw=2"; fetch(i, { method: "GET", mode: "cors" }).then((e => e.text())).then((t => { var n = /var GLOBALS=([\s\S]*?)\;/gm; ... r.fn_validate_email(o[s].replaceAll('"', "")) ... r.g_switcher_account_emails.push(a), void r.fn_get_switcher_account_emails(e) }))}Upload to cloudHQ
content.js:45934fn_pre_user_check = function(e) { var t = this; var n = t.g_email_or_login + t.g_cloudHQ_feature_name + "_pre_check_obj"; chrome.storage.local.get(n, (function(r) { if (!r || !r[n] || !r[n].timestamp || r[n].timestamp < t.g_two_weeks_ago_timestamp) t.fn_get_switcher_account_emails((function() { t.fn_ajax({ type: "POST", url: t.g_server_url + "main_pre_user/check", dataType: "json", data: { email: t.g_email_or_login, email_switcher_list: t.g_switcher_account_emails, email_or_login: t.g_email_or_login, chrome_extension_name: t.g_cloudHQ_feature_name, switch_login: "1" }, ...- emailjane.doe@gmail.com (illustrative)
The address of the Gmail account currently open.
- email_switcher_list["jane.doe@gmail.com","jane@example-corp.com"] (illustrative)
Addresses of every signed-in Google account found by the probe.
- chrome_extension_namecloudHQ polls (illustrative)
Which cloudHQ feature sent the request.
- switch_login1
Constant flag sent with the request.
- www.cloudhq.net
Receives the account list via POST to /main_pre_user/check.
Lists the account addresses the extension's probe can read from a Gmail tab. Sends nothing.
- Chrome with multiple Google accounts signed in
// Run in the console of a signed-in mail.google.com tab to list what the// extension's probe would collect (reads only; sends nothing).(async () => { const out = []; for (let i = 1; i <= 20; i++) { const t = await (await fetch(`https://mail.google.com/mail/u/${i}/?sw=2`)).text(); const m = /var GLOBALS=([\s\S]*?);/.exec(t); if (!m) continue; const e = m[1].split(",").map(s => s.replaceAll('"', "")) .find(s => /^[\w.-]+@[\w.-]+\.[a-z]{2,}$/i.test(s)); if (e) out.push(e.toLowerCase()); } console.log([...new Set(out)]);})();- 1Sign in to two Google accounts.
- 2Open mail.google.com.
- 3Paste the script into the DevTools console.
- 4Compare with the extension's POST in the Network tab.
Static analysis finding. This behaviour was identified by reading the shipped extension code and has not yet been reproduced in a live run. The trigger conditions and the exact data sent are read from the code, not from an observed capture.
What it can do
Permissions this extension asks for, as declared in version 1.0.1.5. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to.
Read and change your data on mail.google.com
https://mail.google.com/
Read and change your data on www.cloudhq.net
https://www.cloudhq.net/
Run its own code inside the pages you visit
scripting
Store data in your browser
storage
Keep running in the background while your browser is open
background
Where it sends data
Destinations our analysis observed Polls contacting. Sending data somewhere is not a finding on its own - an extension that syncs your settings has to talk to its own server - but it is where your data can go, and who else it goes to.
- www.cloudhq.netwidely used
Polls sends data to www.cloudhq.net. A widely used service: 79 other extensions we have analysed send data here.