Is Engage AI - ChatGPT for Social Media safe?
Engage AI sends LinkedIn cookies and profile details to Engage AI backend endpoints.
The extension reads LinkedIn cookies, stores the combined cookie string in Chrome sync storage, and sends it with email and profile fields to Engage AI servers. When generating a post, it sends the prompt text to an Azure OpenAI chat-completions endpoint using an API key embedded in the service worker.
Who publishes itEngage AI - no other listings under this identity
Engage AI - 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
Azure OpenAI key embedded in post-generation code
The service worker sends your post-generation prompt to an Azure OpenAI chat-completions endpoint.
Verification found the request uses an Azure OpenAI API key embedded in the worker, so the key and prompt travel together in that request.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-522
- Source
- Dynamic sandbox
You ask the extension to generate a social-media post.
The service worker sends your prompt to Azure OpenAI with an embedded API key.
- Azure OpenAI API keyapi-key=<redacted>
A service credential is included so the Azure OpenAI endpoint accepts the request. The value is redacted here because it is a live key.
- Your prompt textWrite a LinkedIn post about our product launch (illustrative)
The text you enter for post generation is sent to the chat-completions endpoint.
- Token limit500
The request also tells the remote service how much generated text to return.
- Accept
- application/json
- api-key
- <redacted>
- Content-Type
- application/json;charset=UTF-8
The service worker builds the Azure OpenAI request
Readable equivalent of the same request path
background.jsif (message.message == "generate post") { (async function generatePost(payload) { const body = { messages: [ { role: "system", content: payload.prompt } ], temperature: 0.7, top_p: 0.95, frequency_penalty: 0, presence_penalty: 0, max_tokens: payload.tokens, stop: null }; const request = { method: "POST", headers: { Accept: "application/json", "Content-Type": "application/json;charset=UTF-8", "api-key": "<redacted>" }, body: JSON.stringify(body) }; return fetch( "https://eai.openai.azure.com/openai/deployments/test/chat/completions?api-version=2024-02-15-preview", request ); })(payload) .then((response) => response.json().then((json) => { const generatedText = json.choices[0].message.content.replace(/\n|\r/g, " " ); sendResponse({ message: generatedText }); }) ) .catch((error) => { sendResponse({ message: error }); }); return true;}- eai.openai.azure.com
Azure OpenAI chat-completions endpoint that receives the prompt text and an API key header for generated-post requests.
Where it sends data
Destinations our analysis observed Engage AI - ChatGPT for Social Media 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.
- eai.openai.azure.com
Engage AI - ChatGPT for Social Media sends data to eai.openai.azure.com. No other extension we have analysed sends data here.
- server1.engage-ai.co
Engage AI - ChatGPT for Social Media sends data to server1.engage-ai.co. No other extension we have analysed sends data here.
- server3.engage-ai.co
Engage AI - ChatGPT for Social Media sends data to server3.engage-ai.co. No other extension we have analysed sends data here.