Is Voicy - Voice to Text Powered by AI safe?
Voicy uploads user-triggered microphone recordings with the current site hostname to its transcription API.
When a user starts recording from an input field or shortcut, Voicy records microphone audio and sends it to apipishi.usevoicy.com for transcription, translation, or AI processing. The upload includes the current page hostname, an anonymous identifier, and optional language settings; the extension also generates a browser fingerprint used as a tracking identifier for userapi.usevoicy.com calls.
Who publishes itKourosh Ghaffari - no other listings under this identity
Kourosh Ghaffari - no other listings under this identity
What this publisher told the store about itself, and the other listings that told it the same thing.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Voicy ships one shared API key hardcoded in the extension for every install
Voicy's background script assembles one API key from four text fragments and uses it on every transcription request.
The key is identical in every install, so anyone can extract it from the shipped code and call Voicy's backend with it.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-522
- Source
- Dynamic sandbox
You click the Voicy microphone on a page and speak to transcribe audio.
The extension attaches a fixed API key, the same one shipped in every install, and uploads your recording to Voicy's transcription server.
The key never varies between users or installs.
background.js assembles the key and hands it out to any caller
Key assembled from string fragments
const VOICY_API_KEY = [ "61d62a10", "-cede-4c74", "-bfa5-ea57", "ac17d521",].join("");// VOICY_API_KEY === "61d62a10-cede-4c74-bfa5-ea57ac17d521"Key handed out to whichever page asks
if (message.action === "getKoalaFarts") { sendResponse({ farts: VOICY_API_KEY }); return true;}Key attached to the outbound upload
fetch(uploadUrl, { method: "POST", headers: { "x-api-key": message.key }, body: formData,});content.js collects the key on load and carries it into every recording
Key requested when the page loads
chrome.runtime.sendMessage({ action: "getKoalaFarts" }, (response) => { apiKey = response.farts;});Key sent back to background.js with the recording
chrome.runtime.sendMessage({ action: "processAudio", audio: recordingDataUrl, key: apiKey, url: uploadUrl, hostname: window.location.hostname,}, (response) => { // handle transcription result});- apipishi.usevoicy.com
Voicy's transcription backend. Receives the uploaded audio and the fixed x-api-key header sent by every install.
Reassembles the API key from the same string fragments shipped in background.js, showing the key is retrievable directly from the extension's own code.
- Node.js 14+
// Reassembles the Voicy API key from the fragments shipped in background.js.const fragments = ["61d62a10", "-cede-4c74", "-bfa5-ea57", "ac17d521"];const apiKey = fragments.join("");console.log(apiKey);console.log(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(apiKey) ? "well-formed key" : "unexpected format");- 1Save as voicy-key-extract.js.
- 2Run node voicy-key-extract.js.
- 3Confirm it prints the same key found in background.js.
What it can do
Permissions this extension asks for, as declared in version 1.9.1. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to. The current listed version is 2.3.0, which we have not unpacked yet.
Read and change your data on every site you visit
http://*/*
Read and change your data on every secure site you visit
https://*/*
Read and change your data on googleapis.com
https://*.googleapis.com/*
Read and change your data on api.usevoicy.com
https://api.usevoicy.com/*
Schedule its own background tasks
alarms
Store data in your browser
storage
See the address and title of every tab you have open
tabs
Sign you in with your Google account
identity
Run hidden pages in the background
offscreen
Run its own code inside the pages you visit
scripting
Show a panel beside the page
sidePanel
Where it sends data
Destinations our analysis observed Voicy - Voice to Text Powered by AI 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.
- apipishi.usevoicy.com
Voicy - Voice to Text Powered by AI sends data to apipishi.usevoicy.com. No other extension we have analysed sends data here.
- userapi.usevoicy.com
Voicy - Voice to Text Powered by AI sends data to userapi.usevoicy.com. No other extension we have analysed sends data here.