Is Slack Custom Emoji Manager safe?
We analyzed Slack Custom Emoji Manager version 1.4.0's actual code and gave it a 78/100 trust score. This is a purpose-aligned Slack emoji manager with…
Bottom line
This is a purpose-aligned Slack emoji manager with medium access risk and no established abuse, but it handles a sensitive Slack credential.
What it can access
It can read and change Slack workspace pages, store workspace settings, and use Slack emoji services, including a temporary Slack credential needed for management [Q1][Q2][Q3][Q6].
Security weaknesses
Handling a temporary Slack credential inside page data creates a meaningful security concern, though requests remain limited to the current Slack workspace [Q3][Q14].
Signs of misuse
No evidence shows tracking, unrelated collection, remote control, or deceptive changes; activity is limited to Slack emoji management [Q7][Q12][Q16][Q17].
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It has content-script access to Slack workspaces, Slack emoji CDN access, local storage, webRequest observation, and a response-header rule.
Requests storage, webRequest, declarativeNetRequest, Slack host access, and a Slack content script. — manifest.json:3
Adds an Access-Control-Allow-Origin response header for emoji.slack-edge.com XHR responses. — rules.json:1-15
Which websites can it run on, and can it read or change what appears on those pages?
It reads Slack page scripts and custom-emoji interface elements to obtain workspace data and add management controls.
Scans inline Slack scripts for boot_data and queries the custom emoji page DOM. — content-scripts/content.js:1
Inserts download, upload, delete, count, and empty-state UI into Slack's emoji page. — content-scripts/content.js:9
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
It extracts the Slack services token, team ID, and version identifier from in-page boot data; no form or message-body collection was found.
Parses api_token, version_uid, and team_id from Slack's inline boot_data script. — content-scripts/content.js:1
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
It stores Slack's local workspace configuration and per-workspace extension display preferences in chrome.storage.local.
Reads localConfig_v2 from Slack localStorage and saves it under the slack key; reads workspace options from extension storage. — content-scripts/content.js:1-9
Reads stored team names, URLs, ordering, last active team, and per-workspace options. — chunks/popup-GhW5Cdc5.js:2
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
It downloads Slack-hosted emoji images and creates a local ZIP through an object-URL download.
Fetches each custom emoji image, adds files and aliases to a ZIP, and clicks a generated download anchor. — content-scripts/content.js:1-9
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
It sends the Slack token, emoji names, aliases, and selected image files only to the current Slack workspace's emoji services; downloads images from Slack's CDN.
Calls relative /api/emoji.list, /api/emoji.add, and /api/emoji.remove endpoints with the extracted token. — content-scripts/content.js:1
Permits cross-origin XHR reads from Slack's emoji CDN. — rules.json:1-15
Does it download or run code, settings, or instructions supplied by a remote server?
No evidence of this behavior was found in the reviewed package.
Remote responses are Slack emoji records and operation results, while behavior remains packaged. — content-scripts/content.js:1-9
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
It automatically initializes on Slack pages and observes completed Slack emoji requests, but uploads, downloads, and bulk removal require user actions.
Registers fixed listeners after the Slack content script sends cem:init. — background.js:1
Attaches click, file-drop, and confirmation handlers to the injected management controls. — content-scripts/content.js:9
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence of this behavior was found in the reviewed package.
Requests no browser-settings permissions. — manifest.json:3
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
No evidence of this behavior was found in the reviewed package.
Retains literal Slack API paths, clear operation structure, and packaged UI selectors. — content-scripts/content.js:1-9
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No evidence of this behavior was found in the reviewed package.
Compatibility code converts a non-function setImmediate callback with new Function; observed application jobs are function callbacks. — content-scripts/content.js:5
Does it track the websites, pages, searches, or links you visit?
No evidence of this behavior was found in the reviewed package.
Derives the Slack workspace name from window.location and later stores Slack localConfig. — content-scripts/content.js:1
Content access is limited to Slack domains. — manifest.json:3
Does it create a persistent ID or browser fingerprint to recognize you?
No evidence of this behavior was found in the reviewed package.
Network calls are limited to Slack emoji APIs, Slack emoji image URLs, and packaged extension files. — content-scripts/content.js:1-9
Does it send cookies, session details, authentication data, or page contents elsewhere?
It reads Slack's services token from page boot data and submits it only to same-workspace Slack emoji services; credential theft was not demonstrated.
Extracts api_token and appends it to Slack emoji list/add/remove requests. — content-scripts/content.js:1
Does it record typing, form entries, clipboard contents, or screenshots?
No evidence of this behavior was found in the reviewed package.
Handles user-selected emoji files and fixed Slack page data, not general input events. — content-scripts/content.js:1-9
Can a website or remote server send commands that make the extension take actions?
No evidence of this behavior was found in the reviewed package.
Accepts only the fixed cem:init runtime message and sends fixed add/remove count messages. — background.js:1
Declares no externally_connectable interface. — manifest.json:3
Does it alter links, referral codes, advertisements, shopping carts, or search results?
No evidence of this behavior was found in the reviewed package.
Inserts packaged controls, changes layout classes, updates the count, and adds an empty-state message. — content-scripts/content.js:9
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
It fetches custom emoji images from Slack's CDN and modifies those XHR response headers so the page access can build a ZIP.
Appends an ACAO header only for emoji.slack-edge.com XMLHttpRequests. — rules.json:1-15
Fetches Slack-provided emoji URLs and writes their bytes into a local ZIP. — content-scripts/content.js:1-9
Can it communicate with software on the computer or services running on localhost?
No evidence of this behavior was found in the reviewed package.
Requests no nativeMessaging permission. — manifest.json:3
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
No evidence of this behavior was found in the reviewed package.
Remote data is parsed as emoji mappings, image bytes, or JSON operation responses. — content-scripts/content.js:1-9
Can ordinary websites access privileged extension features through messaging or exposed files?
No evidence of this behavior was found in the reviewed package.
Handles only cem:init and emits fixed cem:add/cem:remove messages. — background.js:1
Runtime message handling maps only those fixed strings to local count updates. — content-scripts/content.js:9
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Warns that all custom emojis for the workspace will be removed and offers Remove or Cancel. — _locales/en/messages.json:20-34
Starts deletion only from the confirmation button handler. — content-scripts/content.js:9
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
CPU work is limited to UI handling and user-requested ZIP compression. — content-scripts/content.js:1-9
Does it change form fields or where a form sends its information?
No evidence of this behavior was found in the reviewed package.
The packaged dropzone passes selected files directly to the fixed relative Slack emoji.add endpoint. — content-scripts/content.js:5-9