Is AudioTTS - Simple Text to Speech Downloader safe?
AudioTTS - Simple Text to Speech Downloader is high risk. On supported AI or text-to-speech pages, AudioTTS inserts page scripts that call license.baabullah.my.id for telemetry. The call uses JSONP, so the response loads as JavaScript inside the same page as the extension's code.
Who publishes itbaabullah - 3 other listings from the same operator, none carrying a finding
baabullah - 3 other listings from the same operator, none carrying a finding
What this publisher told the store about itself, and the other listings that told it the same thing.
Same store account
3 other listings published from this account, 305 users between them, none of them carrying a finding.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
JSONP telemetry runs server-supplied JavaScript
On supported AI or text-to-speech pages, AudioTTS inserts page scripts that call license.baabullah.my.id for telemetry.
The call uses JSONP, so the response loads as JavaScript inside the same page as the extension's code.
What actually happens
You use AudioTTS on a supported text-to-speech page.
The shipped call sites are in the Google and Azure text-to-speech flows.
The extension asks license.baabullah.my.id for telemetry using JSONP.
A JSONP response is loaded as a script, so server-supplied JavaScript can run in the page where the extension inserted its helper code.
Fields placed in the /stat query string
- Selected speech serviceGoogle
Shows which supported text-to-speech service you were using when the telemetry call was made.
- Text length markerlen_1024
Shows the size of the text submitted to the text-to-speech workflow, without including the text itself in this code path.
Captured request
Verification evidence records the JSONP request shape. This GET path has no request body.
The code that does this
The page-script injection and JSONP telemetry path
Readable effect of loadScript
contentscript.jsfunction loadExtensionScriptIntoPage(file, callback) { const script = document.createElement('script'); script.src = chrome.runtime.getURL(file); script.onload = function () { this.remove(); if (callback != null) { callback(); } }; (document.head || document.documentElement).appendChild(script);}Readable effect of logStatistic
library.jsconst telemetryBaseUrl = 'https://license.baabullah.my.id';function callbackStat(data) {}function sendJsonpTelemetry(engine, message) { if (logstat) { $.ajax({ url: telemetryBaseUrl + '/stat?' + 'engine=' + encodeURIComponent(engine) + '&message=' + encodeURIComponent(message), jsonp: 'callbackStat', dataType: 'jsonp' }); }}Readable effect of callbackConfig
library.jsfunction applyRemoteConfiguration(data) { const valid = validateMembership(); const clientid = getUniqueID(); const token = getToken(); GLOBAL_CONFIG = data.CONFIG; logstat = GLOBAL_CONFIG.LOGSTAT; timeout1 = GLOBAL_CONFIG.TIMEOUT1; timeout2 = GLOBAL_CONFIG.TIMEOUT2; timeout3 = GLOBAL_CONFIG.TIMEOUT3; GLOBAL_MESSAGE = data.MESSAGES; EXCEED_MESSAGE = data.MESSAGES.EXCEED_MESSAGE.replaceAll('%CLIENTID%', clientid); if (valid) { jQuery('#banner_google_' + valid).html(data.MESSAGES.MEMBER_GOOGLE_BANNER.replaceAll('%CLIENTID%', clientid).replaceAll('%TOKEN%', token)); jQuery('#banner_azure_' + valid).html(data.MESSAGES.MEMBER_AZURE_BANNER.replaceAll('%CLIENTID%', clientid).replaceAll('%TOKEN%', token)); } else { jQuery('#banner_google_' + valid).html(data.MESSAGES.NONMEMBER_GOOGLE_BANNER.replaceAll('%CLIENTID%', clientid).replaceAll('%TOKEN%', token)); jQuery('#banner_azure_' + valid).html(data.MESSAGES.NONMEMBER_AZURE_BANNER.replaceAll('%CLIENTID%', clientid).replaceAll('%TOKEN%', token)); }}Readable Google telemetry call
web-gstatic.jsif (this.i === 0) { try { sendJsonpTelemetry('Google', 'len_' + text.length); } catch (error) { console.log(error); }}Readable Azure telemetry call
web-azure.jsif (i === 0) { try { sendJsonpTelemetry('Azure', 'len_' + this.completeSsml.length); } catch (error) { console.log(error); }}External host reached by the JSONP telemetry path
- license.baabullah.my.id
Receives the /stat JSONP request and supplies the JavaScript response for callbackStat.