PHP2Shell: Apa Kau Kena Buat Dengan Server WordPress Kau

Dua bug kritikal dalam PHP boleh bagi orang luar jalankan kod di server tanpa login, dan dah mula diserang. Ini cara semak server WordPress kau dan apa yang patut dibuat.

Pada 21 Oktober, pasukan PHP keluarkan patch kecemasan untuk dua bug yang kini dikenali sebagai PHP2Shell. Dua-dua boleh bagi orang luar jalankan kod di server tanpa perlu login, dan ada yang mula mencuba sejak hari patch keluar. WordPress jalan atas PHP, jadi website kau terlibat walaupun kau tak pernah tulis satu baris PHP pun.

Biasanya bila ada isu keselamatan WordPress, kita update plugin atau theme. Kali ni plugin dan theme tak ada kena-mengena. Yang perlu diupdate ialah PHP di server.

Iklan

Ringkasnya

  • Update PHP kepada 8.5.12, 8.4.27, 8.3.36 atau 8.2.35, ikut cawangan yang kau guna, kemudian restart PHP.
  • Kalau kau guna hosting terurus, tanya host sama ada dah patch. Banyak host besar dah siap atau sedang buat.
  • Kalau PHP kau 8.1 atau lebih lama, PHP tak keluarkan patch rasmi. Guna pakej backport daripada vendor kau, atau naik taraf.

Apa sebenarnya yang rosak

Dua-dua bug ada dalam enjin PHP sendiri, dan keduanya diberi skor 9.2 daripada 10 (CVSS v4.0), tahap kritikal. Butiran rasmi ada dalam arkib berita php.net.

CVE-2026-109618 berlaku bila PHP kehabisan memori di tengah-tengah menyediakan satu request. Sebahagian data dalaman jadi separuh siap, tapi bila PHP bersihkan request tu, dia anggap data itu sah. CVE-2026-109619 pula pasal state dalaman yang masih tinggal selepas memorinya dibebaskan. Request seterusnya pada worker yang sama boleh terguna state lama tu.

Penyerang tak perlukan akaun atau password. Request ke website kau pun dah cukup untuk mencetuskannya.

Kenapa WordPress pun kena

Bug ni dalam enjin PHP, jadi ia tak kira kau guna WordPress, Drupal, Joomla atau skrip buatan sendiri. PHP-FPM, Apache dengan mod_php, php-cgi, LiteSpeed dan FrankenPHP semuanya terlibat. Pasukan PHP anggap mod_php paling berisiko sebab serangan boleh berjalan sebelum kod aplikasi sempat dimuatkan.

WordPress.org sendiri kata tiada update WordPress yang diperlukan untuk dua bug ni (menurut Codeable). Menekan butang update dalam dashboard tak akan membantu.

Wiz Research pula mendakwa mereka berjaya menunjukkan serangan tanpa login pada imej WordPress, Drupal dan Joomla yang terkini (catatan Wiz). Dakwaan itu belum diulang pihak lain, jadi anggap ia petunjuk sahaja.

Dah ada orang serang ke?

Ada. Butiran bug ni bocor pada 20 Oktober, sehari sebelum patch keluar. watchTowr melaporkan nampak serangan pada hari patch keluar, dan menurut mereka CISA memasukkan CVE-2026-109618 dalam senarai KEV (senarai bug yang diketahui sedang diserang) pada 26 Oktober. Patchstack pula menulis serangan masih berterusan. Sumber-sumber ni tak sepakat tentang masa yang tepat, jadi aku tak letak jam di sini.

Macam mana nak semak server kau

Di dashboard WordPress, pergi ke Tools, Site Health, tab Info, kemudian buka bahagian Server. Versi PHP kau ada di situ. Bandingkan dengan senarai di atas.

Ada satu benda yang boleh mengelirukan. Sesetengah host patch PHP tanpa menukar nombor versi, dan Codeable menyebut contoh hosting berasaskan CloudLinux yang masih menunjuk 8.5.11 walaupun dah dipatch. Kalau versi kau nampak lama, tanya host dulu sebelum panik.

Kalau kau urus VPS sendiri, update pakej PHP daripada distro kau dan restart semua worker PHP. Langkah restart tu disebut dalam panduan watchTowr.

Kalau belum boleh patch

Ada beberapa pelarasan yang boleh kurangkan risiko. Pasukan PHP dan Patchstack sendiri menegaskan ia tak menjadikan server selamat, jadi patch tetap satu-satunya penyelesaian penuh.

  • Matikan session upload progress dalam php.ini atau pool PHP-FPM, kemudian restart semua worker: session.upload_progress.enabled = 0
  • Untuk bug pertama, PHP cadangkan memory_limit=-1 yang diset di peringkat admin supaya aplikasi tak boleh override, bersama post_max_size yang dihadkan (Patchstack beri contoh 8M tanpa upload dan 32M dengan upload). Nampak songsang, tapi bug ni bermula bila PHP kehabisan memori.
  • Hadkan saiz request, bilangan medan dan multipart di web server atau proxy.
  • Kalau kau guna Cloudflare, pastikan managed rules ditetapkan ke Block dan bukan Log sahaja.

Jangan install plugin pembaiki tak rasmi atau tampal snippet yang kau jumpa di forum. Bug ni dalam PHP, jadi plugin WordPress tak boleh menampalnya.

Kalau kau urus server sendiri dan memang tak boleh update, WordPress.org dan NCSC UK mencadangkan membawa site offline buat sementara (menurut Codeable).

Dua lagi CVE yang boleh mengelirukan

CVE-2026-115560 ialah advisory berasingan daripada PHP pada 23 Oktober, pasal fungsi session upload progress. Ia perlukan gabungan syarat yang sempit: session.serialize_handler ditetapkan kepada php_binary atau php_serialize dalam konfigurasi, aplikasi menukarnya kepada php semasa runtime dengan ini_set sebelum session_start, dan upload progress masih hidup. Advisory penuh akan keluar bersama bugfix release seterusnya. Sementara tu PHP cadangkan upload progress dimatikan, iaitu setting yang sama di atas. Codeable menulis WordPress tak menggunakan ciri ni.

CVE-2026-87902 ialah bug dalam teras WordPress sendiri, berasingan daripada dua bug PHP tadi. Ia melibatkan WordPress 4.7.0 hingga 7.1.1 dan dibaiki dalam 7.1.2. Menurut HKCERT, exploit awam dah wujud dan bug ni sedang diserang. Syaratnya khusus: tema yang aktif ada direktori peringkat atas yang namanya bermula dengan page-, dan wujud fail PHP yang boleh dibaca oleh akaun web server. Kalau WordPress kau 7.1.2 atau lebih baru, bug ni dah dibaiki di server kau.

Tanda-tanda yang patut dilihat

watchTowr tak menyediakan senarai indicator of compromise. Patchstack dan Wiz menyenaraikan beberapa petunjuk, dan keduanya menegaskan petunjuk ni bukan bukti serangan:

  • request multipart yang pelik, diikuti ralat memory limit atau HTTP 500 yang berulang
  • cookie PHPSESSID yang luar biasa besar atau rosak
  • worker PHP yang restart tanpa sebab yang jelas

Kalau kau syak server dah kena, anggap ia mungkin telah terkompromi dan tukar kredential yang disimpan di situ.

Server aku macam mana

Aku semak server blog ni pada 29 Oktober. PHP untuk web ialah 8.3.36, versi yang dah dipatch, dan ia jalan melalui LiteSpeed, salah satu SAPI yang disenaraikan terlibat. Setting session.upload_progress.enabled sudah 0. WordPress pula 7.1.4, dan PHP untuk command line pun 8.2.35, juga dah dipatch.

Itu cuma pengesahan versi dan setting. Aku tak boleh nampak sama ada host ada perlindungan tambahan di peringkat server.

Iklan

Senarai tindakan

  1. Semak versi PHP di Site Health, atau tanya host.
  2. Update ke versi yang dah dipatch, kemudian restart PHP.
  3. Kalau belum boleh update, matikan session upload progress dan hadkan saiz request.
  4. Pastikan WordPress 7.1.2 atau lebih baru.
  5. Kalau kau guna PHP 8.2, rancang naik taraf. Sokongan keselamatan untuk 8.2 tamat pada 31 Disember 2026.

Sumber

Maklumat ni masih berubah. Advisory penuh untuk CVE-2026-115560 belum diterbitkan ketika aku tulis ni.

Helmi

Helmi

Pengguna WordPress sejak 2003, kerja dalam MarOps & Automation. Aku catat apa-apa yang aku rasa nak tulis di sini.

Tentang aku →

Untuk yang baru nak mula

Nak Belajar WordPress?

Aku ajar dari zero.

Tinggalkan Komen

Email kau tak akan dipaparkan. Kalau ada soalan pasal kes sendiri, cerita sikit detail — lagi senang aku jawab.