Mình vừa đọc alert về CVE-2026-10195, lỗ hổng Remote Code Execution trong plugin FS-Poster — plugin tự động đăng bài lên mạng xã hội khá phổ biến. Điểm đáng lo nhất: kẻ tấn công chỉ cần tài khoản Subscriber, mức quyền thấp nhất trong WordPress, là có thể chạy lệnh tùy ý trên server của bạn qua tham số đường dẫn FFmpeg. Nếu site bạn đang dùng FS-Poster bản 8.0.1 trở xuống và mở đăng ký thành viên, đây là trường hợp cần xử lý ngay trong 24 giờ.
![]()
FS-Poster dính lỗi gì và nguy hiểm đến mức nào?
Lỗi nằm ở tổ hợp hai yếu tố: tham số cấu hình đường dẫn FFmpeg không được lọc đầu vào, và một số endpoint REST API của plugin thiếu hoàn toàn kiểm tra quyền. Kết quả là người dùng đã đăng nhập ở mức Subscriber có thể chèn shell metacharacter như ;, &&, | vào tham số này. Plugin đưa thẳng giá trị đó vào hàm exec() của PHP, và lệnh của kẻ tấn công chạy với quyền của web server, thường là www-data. Từ đó, dump file wp-config.php, cài web shell hay thâm nhập sâu hơn vào hosting đều khả thi.
Làm sao kiểm tra site có đang bị ảnh hưởng?
Bạn kiểm tra bằng WP-CLI cho nhanh. SSH vào server rồi chạy lệnh sau để xem phiên bản FS-Poster đang cài:
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html plugin list --status=active | grep fs-posterHoặc kiểm tra trực tiếp trong file phiên bản:
grep -i "Version" /var/www/yourdomain.com/public_html/wp-content/plugins/fs-poster/fs-poster.php | head -2Qui tắc đơn giản: bản 8.0.1 trở xuống đều bị ảnh hưởng. Nếu plugin đang bật nhưng bạn không dùng tính năng đăng mạng xã hội, tốt nhất là gỡ hẳn thay vì chỉ tắt — file vẫn nằm đó và vẫn có thể bị khai thác qua các hook còn sót.
Cách vá FS-Poster an toàn trong 5 phút?
Nâng cấp lên bản mới hơn 8.0.1 ngay. Nếu có staging thì test trước 2 phút, còn không thì backup rồi update trực tiếp vì đây là bản vá bảo mật, rủi ro ngừng kinh doanh do thiếu vá lớn hơn nhiều so với rủi ro conflict:
# Backup trước khi nhấn nút
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html db export /root/backup-pre-fsposter.sql
# Cập nhật plugin
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html plugin update fs-posterSau khi update, vào Settings của FS-Poster kiểm tra lại đường dẫn FFmpeg còn đúng không, vì đây chính là chỗ bị lỗi. Đồng thời xem lại danh sách user:
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html user list --role=subscriber --fields=ID,user_login,user_registered,last_activityBất kỳ account Subscriber lạ nào đăng ký gần đây mà bạn không nhận diện được, khóa ngay bằng lệnh wp user update <ID> --role=no_role rồi đổi mật khẩu admin.
Tại sao Subscriber lại đủ quyền khai thác lỗ hổng?
Đây là điểm nhiều người chủ quan nhất. Cả Admin lẫn Subscriber đều có nonce hợp lệ khi đăng nhập, và endpoint REST API bị lỗi chỉ kiểm tra “đã đăng nhập chưa” chứ không kiểm tra capability. Với các site cho phép open registration — mở đăng ký để nhận comment, thành viên hay download — bất kỳ ai cũng tự tạo tài khoản Subscriber miễn phí rồi tiến hành tấn công. Vì vậy bước mitigations quan trọng thứ hai sau khi vá là tắt open registration nếu không thực sự cần:
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html option update users_can_register 0
sudo -u www-data wp --path=/var/www/yourdomain.com/public_html option update default_role subscriberRà soát dấu vết tấn công trong log như thế nào?
Kể cả đã vá, bạn vẫn nên quét log xem có ai khai thác trước đó chưa. Tìm các POST request vào REST API của FS-Poster có chứa shell metacharacter:
# Nginx
grep -E "POST /wp-json/fs-poster" /var/log/nginx/access.log | grep -E "%3B|%26%26|%7C|\;&&"
# Apache
grep -E "fs-poster" /var/log/apache2/access.log | grep POST | grep -iE "ffmpeg|path"Những dấu hiệu đáng lo: request từ user thường xuyên ẩn trong đám traffic REST API bình thường, request chứa chuỗi ffmpeg hoặc path dài bất thường, file lạ mới xuất hiện trong wp-content/uploads/. Nếu phát hiện dấu vết, bạn cần xử lý theo quy trình bị hack đầy đủ: đổi tất cả mật khẩu, regenerate secret key trong wp-config.php, và quét malware toàn site thay vì chỉ gỡ file lạ.
Mình đánh giá thế nào về đợt lỗi này?
Nói thẳng: lỗi kiểu "tham số đường dẫn nhị phân đưa thẳng vào exec()" là sai lầm cổ điển mà mình nghĩ không nên xuất hiện ở một plugin thương mại năm 2026. Nhưng thực tế tháng 8 vừa rồi đã có cả loạt CVE CVSS 9+ như GiveWP, Elementor Pro, Gravity Forms, nên FS-Poster không bất ngờ. Bài học rút ra cho mình là chạy quy trình rà soát plugin định kỳ bằng WP-CLI, giống runbook 10 phút mình đã chia sẻ trong bài rà soát 6 lỗ hổng WordPress tháng 8/2026. Checklist đơn giản: tắt open registration, cập nhật plugin trả phí đều đặn, và quét log mỗi tuần. Ba việc này chặn được phần lớn kịch bản tấn công thực tế.
Nếu bạn đang lo site mình nằm trong tầm ngắm, đọc thêm bài hướng dẫn xử lý Elementor Pro RCE để có quy trình rà soát dấu vết tấn công chung cho mọi lỗ hổng RCE tương tự.