Is AI Social Media Post Generator - LinkedIn™ safe?
AI Social Media Post Generator is high risk. When the AI writing feature gets a ChatGPT response, the extension builds an analytics event with your question and the response, routed to its Aliyun Log endpoint. Replay couldn't reach this path (login required); fields are code-derived.…
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
ChatGPT prompts and responses sent to Aliyun analytics
When the AI writing feature gets a ChatGPT response, the extension builds an analytics event with your question and the response, routed to its Aliyun Log endpoint.
Replay couldn't reach this path (login required); fields are code-derived.
- Severity
- High unwanted
- Type
- Unexpected
- CWE
- CWE-200
- Source
- Dynamic sandbox
You use the extension's AI writing feature for LinkedIn text.
The prompt can include text you typed or selected from the LinkedIn page.
After the response finishes, the extension prepares an analytics event containing the prompt and response text.
The event type is 240245 in the extension code.
- Your submitted questionTranslate the following content to English: Thanks everyone for joining today's product launch (illustrative)
This is the text you asked the AI writer to process, which may include content copied from LinkedIn or text you drafted.
- Generated responseThank you to everyone who joined today's product launch. We are excited to share what comes next. (illustrative)
This is the AI-written output returned to the extension after generation completes.
- Completion event type240245
This labels the analytics event as the completion path for the AI writing feature.
- AI provider modeChatGPT
This says which ChatGPT integration path handled your request.
- LinkedIn page contexthttps://www.linkedin.com/feed/ (illustrative)
The background script adds LinkedIn profile and page context when it builds the analytics record.
No response body was captured for the completion event; the dynamic test could not pass the LinkedIn login requirement.
- Content-Type
- application/x-protobuf
- x-log-apiversion
- 0.6.0
The completion handlers attach the full prompt and response to event 240245
Readable GPT3 completion path
js/content-script.js:28212-28225const t = chrome.runtime.connect({ name: S["e"] }), e = t => { t.text ? this.responseText = t.text : t.error ? (Object(_["e"])(240080, Object(k["a"])(), { error: t.error, provider_type: S["n"].GPT3 }), this.setResponseDone(!0), t.errorMessage.code === S["b"] ? this.showTimeoutError = !0 : this.portListenError = t.errorMessage) : "DONE" === t.event && (console.debug("done"), this.setResponseDone(!0), Object(_["e"])(240245, Object(k["a"])(), { question: this.fullQuestion, response: this.responseText, provider_type: S["n"].GPT3 })), this.loading = !1 };t.onMessage.addListener(e), this.port = t, this.listener = eReadable ChatGPT completion path
js/content-script.js:28254-28261else if (t.event && "DONE" === t.event.newValue) { console.debug("done"), this.setResponseDone(!0); const t = await Object(W["i"])(); Object(_["e"])(240245, Object(k["a"])(), { question: t, response: this.responseText, provider_type: S["n"].ChatGPT })}Readable helper that stores and returns the ChatGPT question
js/content-script.js:33594-33610function d(t) { return new Promise(e => { chrome.storage.local.set({ ask_for_chatgpt_text: t }, (function() { e(!0) })) })}function h() { return new Promise(t => { chrome.storage.local.get("ask_for_chatgpt_text", (function(e) { let n = e.ask_for_chatgpt_text ? e.ask_for_chatgpt_text : ""; t(n) })) })}The background script routes the event to Aliyun Log Service
Readable Aliyun project configuration
js/background.js:23155-23162const h = { host: "us-west-1.log.aliyuncs.com", project: "extension-us", logstore: "scrm-gpt-linkedin", time: 1, count: 1 }, u = new n.a(h)Readable analytics event construction
js/background.js:23201-23228async function M(...t) { let e = await Object(a["c"])(), r = await w(), i = await v(), n = await Object(s["p"])(), h = await Object(s["q"])(), f = ""; void 0 != t[1] && (f = t[1]); let c = await o["storage"].local.get(["platform", "browserType", "language", "userAgent"]), l = { event_source: 24, event_type: t[0], install_time: r, event_time: Math.floor(Date.now() / 1e3), log_version: "v1", uuid: e, linkedin_profile: f, linkedin_url: h, user_email: n, version: i, platform: c.platform ? c.platform : "", browser_type: c.browserType ? c.browserType : "", language: c.language ? c.language : "", user_agent: c.userAgent ? c.userAgent : "" }; if (t[2]) for (let o in t[2]) l[o] = t[2][o]; u.send(l)}Readable network sender
js/background.js:6971-7003key: "logger",value: async function(t = !1) { var e = !1 !== t && t.length > 0 ? t : []; if (0 !== e.length) { var r = "https://" + this.project + "." + this.host + "/logstores/" + this.logstore + "/track"; try { var i = JSON.stringify({ __logs__: e }); let t = new Headers({ "x-log-apiversion": "0.6.0", "x-log-bodyrawsize": i.length }); if (this.compress) { t.append("x-log-compresstype", "lz4"); var n = f.from(i), o = u.encodeBound(i.length), s = f.alloc(o), a = u.encodeBlock(n, s); s = s.slice(0, a), fetch(r, { method: "POST", headers: t, body: s }).then(t => t) } else { let e = new Blob([i], { type: "application/x-protobuf" }); t.append("Content-Type", "application/x-protobuf"), fetch(r, { method: "POST", headers: t, body: e }).then(t => t) } } catch (h) { console.log(h) } }}- extension-us.us-west-1.log.aliyuncs.com
Aliyun Log Service endpoint for the extension's scrm-gpt-linkedin logstore.
ChatGPT questions route through extensiondock.com in AI mode.
The extension's built-in AI mode routes your ChatGPT question through extensiondock.com instead of OpenAI.
The request to extensiondock.com/v2/chatgpt/question-stream includes the question text and authentication parameters.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-200
- Source
- Dynamic sandbox
The user submits a question while the extension's GPT3 provider mode is active.
The extension routes the question text through extensiondock.com/v2/chatgpt/question-stream.
- Your AI prompt textWrite a LinkedIn post about a product launch (illustrative)
The text you submit to the extension's built-in AI mode is included in the outgoing request.
Dynamic analysis confirmed the content-script-to-background handoff and the POST request that sends the question text to the extensiondock.com question-stream endpoint.
Extension fetches remote config that changes runtime behavior.
On install, the extension contacts linkedradar.com for remote config, repeating every six hours.
It sends an extension ID; returned config keys are stored in Chrome local storage, letting feature access change without an update.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-829
- Source
- Dynamic sandbox
The user installs the extension.
The extension fetches remote configuration from linkedradar.com and stores returned feature keys locally.
{ "extension_id": 45}- Extension storage datapaid_functional_verification; drainage
Remote configuration keys are saved in Chrome local storage and used to control access restrictions and feature availability.
+1 more finding not shown
What it can do
Permissions this extension asks for, as declared in version 1.4.7. 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 linkedin.com
*://*.linkedin.com/*
Read and change your data on openai.com
*://*.openai.com/*
Read and change your data on linkedradar.com
*://*.linkedradar.com/*
Store data in your browser
storage
Act on the current tab, but only after you click the extension
activeTab
Add items to the right-click menu
contextMenus