Lỗ hổng wp2shell WordPress (mã hiệu CVE-2026-63030) vừa bùng nổ đang là mối đe dọa hàng đầu đối với hàng triệu website WordPress trên toàn cầu. Đây là lỗ hổng RCE (Remote Code Execution) cho phép kẻ tấn công chiếm quyền điều khiển server mà không cần đăng nhập. Tuy WordPress đã phát hành bản vá 7.0.2 / 6.9.5 / 6.8.6, nhưng việc chỉ bấm nút nâng cấp Core là chưa đủ để dọn dẹp các tài khoản ngầm và webshell đã bị chèn từ trước.
Bài viết này chia sẻ quy trình thực chiến giúp bạn rà soát, dọn dẹp sạch sẽ mã độc và nâng cấp an toàn cho hàng loạt máy chủ Linux (CyberPanel, cPanel, DirectAdmin) mà không gây gián đoạn dịch vụ.
Lỗ hổng wp2shell WordPress là gì và tại sao nâng cấp thôi là chưa đủ?
Lỗ hổng Lỗ hổng wp2shell WordPress xảy ra ở lớp REST API cho phép hacker thực thi mã từ xa. Ngay sau khi PoC xuất hiện, các đợt quét tự động trên toàn thế giới đã chèn tài khoản Admin ẩn và webshell vào các trang chưa kịp vá.
Nhiều quản trị viên lầm tưởng rằng chỉ cần bấm nút “Update WordPress” là xong. Thực tế, bản nâng cấp của WordPress chỉ vá lỗ hổng đầu vào, chứ không xóa các file webshell hay tài khoản rác đã bị tạo trong Database. Nếu không dọn sạch các dấu vết này, hacker vẫn có thể truy cập trở lại bất kỳ lúc nào.

Dấu vết nhận diện mã độc wp2shell trên Server
Khi kiểm tra máy chủ, mã độc wp2shell thường để lại 3 nhóm dấu vết đặc trưng sau đây:
- Tài khoản Admin ẩn trong Database: Các username có tiền tố
wpsvc_,wp2_,w2s_,wp_admin_hoặc email có đuôi@wp2shell.*,@wordpress-svc.internal,@wordpress-noreply.net. - Webshell ngụy trang Plugin: Các thư mục nằm trong
wp-content/plugins/có tên kèm chuỗi hex ngẫu nhiên nhưmedia-optimization-core-8ed2ad,security-headers-manager-2a70a3chứa file PHP nhỏ khai thác qua tham số?c=. - File ẩn trong mu-plugins: Các file PHP nằm tại
wp-content/mu-plugins/(nhưwp-fixplugin.php) chạy ngầm để tự động tạo lại tài khoản Admin rác mỗi khi bị xóa.
Quy trình 4 bước rà soát & dọn dẹp wp2shell hàng loạt
Bước 1: Quét nhanh tài khoản ngầm bằng MySQL Root
Thay vì chạy WP-CLI nạp môi trường PHP tốn tài nguyên, việc truy vấn trực tiếp vào MySQL Root giúp bạn quét hàng trăm trang web chỉ trong 2-3 giây mà không lo lỗi phân quyền:
for dir in /home/*/public_html; do
if [ -f "$dir/wp-config.php" ]; then
domain=$(basename $(dirname "$dir"))
dbname=$(grep -E "DB_NAME" "$dir/wp-config.php" | cut -d'"' -f4)
prefix=$(grep -E "table_prefix" "$dir/wp-config.php" | cut -d'"' -f2)
[ -z "$prefix" ] && prefix="wp_"
if [ ! -z "$dbname" ]; then
result=$(mysql --batch --skip-column-names -e "USE \`$dbname\`; SELECT CONCAT('ID: ', u.ID, ' | User: ', u.user_login, ' | Email: ', u.user_email) FROM \`${prefix}users\` u JOIN \`${prefix}usermeta\` m ON u.ID = m.user_id WHERE m.meta_key = '${prefix}capabilities' AND m.meta_value LIKE '%administrator%' AND (u.user_login REGEXP '^w2s_|^wp_admin_|^wp2_|^wpsvc_|^wp2shell' OR u.user_email REGEXP '\\.invalid|\\.local$|internal|wp2shell|shellcode');" 2>/dev/null)
if [ ! -z "$result" ]; then
echo "=== ⚠️ Phát hiện Admin mã độc trên $domain (DB: $dbname) ==="
echo "$result"
fi
fi
fi
done
Bước 2: Sử dụng công cụ chính thức wp2shell-scan để cách ly Webshell
Công cụ wp2shell-scan chính thức từ InstaWP giúp bạn đưa các file webshell bị phát hiện vào thư mục cách ly (Quarantine) và đổi lại mã muối SALT bảo mật:
curl -fsSLO https://raw.githubusercontent.com/InstaWP/wp2shell-scan/main/wp2shell-scan.sh
chmod +x wp2shell-scan.sh
./wp2shell-scan.sh --path /home/domain-bi-dinh.com/public_html --clean --yes
Bước 3: Khắc phục phân quyền & Nâng cấp WordPress Core chuẩn SysAdmin
Trên các máy chủ CyberPanel hoặc LiteSpeed, lệnh sudo -u thường bị lỗi thiếu mysqli do /usr/bin/php bị giới hạn. Chúng ta cần chỉ định trực tiếp phiên bản LiteSpeed PHP (như lsphp81) để nâng cấp an toàn dưới quyền user:
for dir in /home/*/public_html; do
if [ -f "$dir/wp-config.php" ]; then
domain=$(basename $(dirname "$dir"))
owner=$(stat -c '%U' "$dir")
echo "=========================================="
echo "🔄 Updating: $domain (User: $owner)"
echo "=========================================="
mkdir -p "$dir/wp-content/upgrade"
chown -R "$owner:$owner" "$dir/wp-content/upgrade"
chmod 755 "$dir/wp-content/upgrade"
sudo -u "$owner" /usr/local/lsws/lsphp81/bin/php /usr/bin/wp core update --path="$dir" --skip-plugins --skip-themes 2>&1 | grep -viE "<|translation|bản dịch"
fi
done
Bước 4: Kiểm tra lại phiên bản sau khi nâng cấp
Cuối cùng, chạy đoạn script kiểm tra nhanh phiên bản toàn bộ website để đảm bảo 100% trang web đã lên bản WordPress 7.0.2 an toàn:
for dir in /home/*/public_html; do
if [ -f "$dir/wp-config.php" ]; then
domain=$(basename $(dirname "$dir"))
version=$(grep '$wp_version =' "$dir/wp-includes/version.php" 2>/dev/null | cut -d'"' -f2)
printf "%-35s : %s\n" "$domain" "${version:-N/A}"
fi
done
Những lưu ý quan trọng tránh tái nhiễm mã độc
Dọn dẹp hệ thống đang chạy mới chỉ là một nửa chặng đường. Bạn cần thực hiện thêm các lưu ý sau để bảo vệ website toàn diện:
- Làm sạch cả file Backup/Snapshot: Nếu bạn restore từ bản backup được tạo trong thời gian website bị nhiễm, hệ thống sẽ bị dính mã độc trở lại ngay lập tức. Hãy dùng cờ
--sql backup.sqlđể kiểm tra file backup trước khi restore. - Tránh quét nhầm tài khoản thật: Không nên dùng từ khóa
shellchung chung khi quét SQL vì sẽ bị quét nhầm các tài khoản người dùng hợp lệ có tên tiếng Anh như Shelley, Shelly, Shellie. - Liên hệ dịch vụ chuyên nghiệp: Nếu hệ thống lớn có nhiều server phức tạp, hãy sử dụng giải pháp dịch vụ Digital Marketing của DPS.MEDIA và tối ưu hạ tầng để được hỗ trợ bảo mật hệ thống toàn diện nhất.
Ý kiến bạn đọc (9)
Đăng nhập để bình luận
Đăng nhập nhanh 1-chạm bằng Google để chia sẻ ý kiến của bạn về bài viết.
Bằng cách đăng nhập, bạn đồng ý với điều khoản và chính sách cộng đồng.
Chưa có bình luận nào. Hãy là người đầu tiên chia sẻ cảm nghĩ!
Đăng nhập / Tạo tài khoản
Đăng nhập với Google để gửi bình luận và tương tác cùng cộng đồng.
Tiếp tục là đồng ý với điều khoản sử dụng và chính sách bảo mật của DPS Media.