PHP2Shell: GitLab membantu mengenal pasti dan membaiki kelemahan
GitLab tidak terjejas oleh PHP2Shell (CVE-2026-109618 dan CVE-2026-109619). Aplikasi GitLab tidak ditulis dalam PHP dan tidak menjalankannya untuk melayan permintaan web, dan Pasukan Keselamatan kami tidak menemui bukti kesan terhadap infrastruktur yang diurus oleh GitLab. GitLab.com, GitLab Self-Managed, dan GitLab Dedicated tidak terjejas.
PHP ialah bahasa pengaturcaraan yang digunakan secara meluas, berjalan pada pelayan web dan menyokong platform popular seperti WordPress, Drupal, dan Magento, maka kecacatan pada PHP sendiri boleh menjejaskan banyak laman web dan aplikasi. Pada 21 Oktober 2026, Projek PHP telah membetulkan dua kecacatan pelaksanaan kod jarak jauh yang kritikal dalam PHP, yang secara bersama dikenali sebagai PHP2Shell (CVE-2026-109618 dan CVE-2026-109619). Projek PHP menilai kedua-duanya 9.2 pada CVSS v4.0. Kecacatan tersebut berada dalam enjin PHP, bukan dalam sebarang framework, pustaka, atau kod aplikasi, maka tiada pembetulan pada peringkat aplikasi. Mana-mana pelayan web yang menjalankan PHP terjejas, termasuk NGINX dan Apache. Projek PHP telah mengesahkan kerentanan tersebut pada Apache dengan mod_php, di mana permintaan tanpa pengesahan boleh mencapai pelaksanaan kod jarak jauh sebelum sebarang kod aplikasi dijalankan.
Naik taraf setiap pelayan dan container yang menjalankan PHP untuk melayan permintaan web kepada PHP 8.5.12, 8.4.27, 8.3.36, atau 8.2.35, atau kepada pakej yang ditambal oleh pengagih anda sekarang.
Panduan ini ditujukan untuk pasukan keselamatan dan platform yang mempunyai projek PHP di GitLab. Panduan ini merangkumi versi yang telah dibetulkan bagi setiap branch dan pengagihan PHP, cara menggunakan ciri GitLab untuk mencari projek PHP merentas kumpulan anda, cara menjejak pembetulan, dan cara memeriksa tanda-tanda penggodaman.
Naik taraf runtime PHP pada setiap hos dan dalam setiap imej container kepada versi yang telah dibetulkan. Kemas kini framework, kemas kini Composer, pengesahan input, dan pengesahan identiti tidak membantu, kerana PHP mengendalikan permintaan sebelum kod aplikasi dijalankan.
Jika PHP anda berasal daripada pakej pengagihan, naik taraf pakej tersebut. Versi pakej yang telah dibetulkan setakat 22 Oktober:
Sumber: pengjejak keselamatan Ubuntu, Debian, Alpine, dan Red Hat, setakat 22 Oktober 2026.
Ubuntu, dan Red Hat untuk pakej 7.4 dan 8.0 miliknya, mengekalkan nombor versi upstream yang lama dan membuat backport bagi pembetulan tersebut. Bandingkan versi pakej, bukan php -v. Mulakan semula setiap proses yang menjalankan PHP selepas naik taraf.
Bina semula imej kontena anda. Jika imej anda menggunakan tag terapung bagi imej php rasmi, seperti php:8, php:8.3, php:8.3-apache atau php:latest, bina semula dengan docker build –pull dan sebarkan semula. Imej yang menetapkan versi tampalan, seperti php:8.3.35-apache, perlu ditukar tag kepada versi yang telah dibetulkan terlebih dahulu. Imej yang dibina berdasarkan turunan seperti wordpress atau drupal hanya menerima pembaikan itu selepas penyenggara mereka menerbitkan imej yang dikemas kini, jadi periksa imej upstream sebelum anda membina semula.
Cari projek PHP merentasi kumpulan GitLab anda
Mana-mana projek yang menjalankan PHP untuk mengendalikan permintaan web memerlukan versi yang telah dibetulkan, termasuk yang mudah dilupakan, seperti papan pemuka dalaman, laman pemasaran, atau imej kerja CI. Mencarinya memerlukan dua perspektif: carian statik terhadap apa yang diisytiharkan oleh repository anda dan apa yang terkandung dalam imej anda, serta inventori masa berjalan terhadap apa yang benar-benar berjalan. GitLab merangkumi perspektif statik dengan tiga ciri. Gunakan mengikut urutan ini.
1. Pengimbasan kontena
Pengimbasan kontena melaporkan kerentanan dalam pakej sistem pengendalian, jadi ia mengesan PHP yang dipasang dengan apt, apk, atau dnf, dan melaporkan dua CVE tersebut sebaik sahaja ia sampai ke pangkalan data kerentanan pengimbas. Untuk mengaktifkannya bagi sesuatu projek, tambahkan templat ke .gitlab-ci.yml:
include:
- template: Security/Container-Scanning.gitlab-ci.yml
Anda juga boleh menggunakan dasar pelaksanaan imbasan peringkat kumpulan untuk mengaktifkan pengimbasan kontena bagi setiap projek dalam kumpulan secara serentak. Apabila dasar diaktifkan, kali berikutnya pipeline dijalankan, ia akan dijalankan dengan pengimbasan kontena. Hasil pengimbasan kontena untuk cabang lalai boleh disemak dalam Laporan Kerentanan selepas pengimbas selesai.
Selain itu, anda boleh menyediakan dasar kelulusan Merge Request dengan pengimbasan kontena. Dengan kelulusan Merge Request yang digunakan, jika perubahan kod mengandungi PHP2Shell, dasar tersebut akan menyekat merge tanpa kelulusan daripada pihak yang dipilih.
Pengimbasan kontena hanya mengesan PHP yang dipasang sebagai pakej. PHP yang dikompil daripada sumber, termasuk imej php rasmi, tidak mempunyai rekod pakej, jadi sesuatu projek boleh lulus pengimbasan kontena dan masih menjalankan PHP yang mempunyai kerentanan. Carian kod merangkumi kekurangan tersebut.
2. GitLab Orbit
GitLab Orbit mengindeks projek, saluran, temuan keselamatan, dan kod sumber anda, termasuk PHP, ke dalam graf yang boleh ditanya, supaya anda boleh meminta ejen menyemak keseluruhan kumpulan. Dengan Orbit diaktifkan pada kumpulan peringkat tertinggi, ejen boleh menyenaraikan setiap projek yang mengandungi kod PHP, termasuk projek yang menyusun PHP atau menggunakan imej php rasmi, yang tidak dikesan oleh pengimunan kontena. Orbit belum menghuraikan Dockerfile (isu cadangan ciri #1416), jadi gunakan senarai itu untuk menetapkan skop carian kod dalam langkah seterusnya, yang mengesahkan imej asas dan versi dalam setiap projek. Anda juga boleh meminta Orbit menyatakan projek mana yang mempunyai temuan terbuka bagi CVE-2026-109618 atau CVE-2026-109619 setelah imunan dijalankan. Orbit mengindeks cabang lalai sahaja dan berada dalam beta untuk Premium dan Ultimate di GitLab.com dan GitLab Self-Managed.
3. Carian kod
Carian kod tepat boleh menemui dua jenis fail yang menunjukkan projek PHP. Jalankan carian ini pada kumpulan peringkat tertinggi dengan mod ungkapan biasa diaktifkan (togol .* di sebelah kanan kotak carian):
- Imej asas kontena: Carian ini mencari setiap fail yang dikesan oleh GitLab sebagai Dockerfile. Pola itu sepadan dengan mana-mana imej yang nama atau tag-nya mengandungi php, jadi ia juga menemui terbitan seperti wordpress, frankenphp, atau bitnami/php-fpm. Jangka beberapa positif palsu yang boleh anda kecualikan dengan membaca hasil: lang:Dockerfile ^FROM.*php
- Projek Composer: Carian ini menemui projek yang menggunakan PHP walaupun ia tidak mempunyai Dockerfile, atau apabila Dockerfile mengambil imejnya daripada argumen bina seperti FROM $BASE_IMAGE:
file:composer\.json$
Carian kod tepat merangkumi cabang lalai sahaja. Pada GitLab.com, ia diaktifkan secara lalai untuk pelan berbayar. Pada instans GitLab Self-Managed, pentadbir mesti memasang Zoekt terlebih dahulu. GitLab Dedicated tidak menyokong carian kod tepat.
Untuk setiap hasil, sahkan versi. Anda boleh menyemak baris FROM php:
4. Bandingkan dengan inventori masa jalan anda
Container scanning dan code search menunjukkan apa yang diisytiharkan dan dibina oleh projek anda, bukan apa yang berjalan. PHP boleh berjalan di luar projek GitLab anda, contohnya pada pelayan web dengan mod_php atau PHP-FPM yang hanya didayakan dalam konfigurasi mereka, pada hos yang dikonfigurasi secara manual, atau dalam container yang masih berjalan dalam cluster tanpa pipeline aktif. Bandingkan hasil statik dengan inventori beban kerja anda yang sedang berjalan daripada alat pengurusan konfigurasi (Ansible, Puppet, Chef, dll.), cloud, atau alat inventori VM. Untuk Kubernetes, container scanning operasi mengimbas imej yang berjalan dalam cluster anda, dengan pengesanan package-only yang sama seperti container scanning. Anggap setiap PHP runtime yang muncul dalam hanya satu daripada dua pandangan sebagai jurang untuk disiasat.
Lakukan remediation pada skala besar dengan GitLab Duo Agent Platform
GitLab Duo boleh menjalankan langkah penemuan di atas untuk anda, merentas semua projek anda, melalui Orbit dan code search. Dari situ, biarkan agent melakukan kerja berulang, manakala manusia kekal pada review dan merge.
Automasi pembaikan. Gunakan Agentic Chat untuk mencipta epic dengan satu issue bagi setiap projek terjejas dan tugaskan Developer Flow kepada setiap satu. Flow tersebut membuka merge request yang mengemas kini base image tag atau package kepada versi yang diperbaiki. Flow trigger pada Assign event memulakan flow itu sebaik sahaja issue ditugaskan. Dayakan review automatik dengan Code Review Flow untuk mendapatkan review pertama yang mengikuti arahan review tersuai anda. Semak dan merge setiap merge request, kemudian tutup issue sebaik versi yang diperbaiki diimplementasikan.
Laksanakan penguatkuasaan dengan polisi. Merge request approval policy daripada Langkah 1 menyekat sebarang perubahan yang memperkenalkan semula versi PHP yang terdedah tanpa kelulusan, dan scan execution policy memastikan container scanning didayakan dalam setiap projek supaya regresi muncul dalam laporan kerentanan.
Carian menemui calon, tetapi jurutera keselamatan atau platform masih perlu menyemak setiap padanan, menyelesaikan CI includes, dan membezakan apa yang kod nyatakan daripada apa yang sebenarnya berjalan. Contoh agent skill daripada pasukan GitLab Developer Advocacy mengendalikan kerja ini. Ia berjalan pada GitLab Duo Agent Platform dan dengan agent yang menggunakan GitLab MCP server atau glab CLI, seperti Claude Code, Codex, dan Cursor.
Kemahiran ini memeriksa imej kontena, kerja CI, pakej OS, pemboleh ubah pengurusan konfigurasi, pin Composer, dan persekitaran. Ia mengembalikan jadual dapatan bersumber yang mengandungi bukti penerapan dan kelomang terbuka. Kemahiran ini bersifat baca sahaja: Ia tidak membuat sebarang perubahan, dan merge request pembetulan kekal sebagai langkah berasingan yang disemak. Ia tidak dapat mengesahkan apa yang berjalan pada hos yang tidak dapat diaksesnya, jadi sahkan perkara tersebut secara terus. Sesuaikan kemahiran ini dengan persekitaran anda sendiri sebelum anda menggunakannya.
GitLab Duo CLI menggunakan kemahiran PHP2Shell. Projek demo ini sengaja dibuat rentan untuk menunjukkan pembetulan yang berjaya dengan GitLab Duo CLI.
Semak pengkompromian
Laporan tentang eksploitasi berbeza-beza. Penyelidik keselamatan melaporkan percubaan eksploitasi pada 17 Oktober 2026, sebelum pendedahan awam, dan laporan eksploitasi selanjutnya menyusul selepas keluaran tersebut. Projek PHP tidak mengenal pasti sebarang eksploitasi yang berfungsi pada masa keluaran. Jika pelayan berhadapan internet menjalankan versi PHP yang rentan, semak lognya bermula dari 17 Oktober 2026 ke atas untuk:
- Permintaan multipart yang diikuti ralat had memori atau respons HTTP 500 yang berulang
- Kuki respons PHPSESSID yang luar biasa besar atau cacat
- Penyambungan semula worker PHP yang tidak dapat dijelaskan, atau proses shell yang dimulakan oleh worker PHP
- Fail yang tidak dijangka pada pelayan web PHP, sambungan keluar daripada worker PHP, atau entri cron yang tidak dijangka
Eksploitasi yang berjaya boleh mengembalikan HTTP 200 dan membiarkan worker terus berjalan, jadi ketiadaan ralat tidak dapat menafikan kemungkinan pengkompromian. Jika anda menemui tanda eksploitasi, asingkan pelayan dan mulakan penyiasatan insiden. Sepanjang yang mungkin, tangkap memori, cakera, dan log sebelum menampal dan memulakan semula. Memulakan semula worker PHP mungkin memadamkan bukti. CVE-2026-109619 juga boleh mendedahkan memori proses, walaupun penggodam tidak berjaya melaksanakan kod. Pusingkan sebarang kelayakan, token, atau kunci yang boleh dibaca oleh proses PHP.
Nota: Pengimbas mungkin menandakan imej pengimbasan kebergantungan Gemnasium (gemnasium:6), yang tidak disokong lagi sejak GitLab 17.9, kerana PHP yang disertakan bersamanya. Ia hanya digunakan sebagai alat baris arahan dan tidak pernah mengendalikan permintaan HTTP, jadi ia tidak boleh dieksploitasi, dan versi yang telah dibetulkan telah pun dikeluarkan di bawah tag yang sama.
Garis masa
Sumber Rujukan:
- Artikel asal: GitLab Blog
- Diterjemah daripada artikel asal ke Bahasa Melayu oleh AI Editorial – haqis.com