Sumber dicenthang tanggal 22 Oktober 2026. Pemirsa A: Operator aplikasi PHP, responder keamanan, lan insinyur sing njaga bangunan PHP khusus.
Artikel iki ngringkes sabab, orane katrangan saka impact, proses ndandani formal, langkah mitigasi sauntara lan implementasine patch resmi kerentanan PHP2Shell. Teks utama dikutip nggunakake angka kayata S1; kabeh pranala sumber kadhaptar ing lampiran ing mburi teks. Fragmen konfigurasi minangka cithakan penyebaran, sing kudu diatur adhedhasar versi nyata, kapasitas bisnis, lan hubungan warisan konfigurasi.
TL;DR: Langkah-langkah ndandani lan saran
- Nganyarke ing PHP runtime : upgrade cabang cocog kanggo paling 8.2.35 , 8.3.36 , 8.4.27 utawa 8.5.12 . Kanggo paket distribusi, gunakake versi paket lengkap sing vendor konfirmasi mbenakake loro CVE. S1 S10
- Ganti kabeh proses lawas: miwiti maneh utawa muter saben PHP worker, layanan hosting, lan wadhah sawise nganyarke, lan konfirmasi yen kedadeyan lawas wis metu.
- Verifikasi liwat jalur panjalukan Web sing nyata: priksa Web SAPI, versi paket lengkap, lan conto mlaku. Mriksa
php -vmung ora nemtokake manawa layanan langsung tetep. - Mlakukake mriksa regresi bisnis lan mulihake anggaran sumber daya normal: mlebu test, penanganan sesi, unggahan, impor, lan penanganan kesalahan. Yen watesan memori PHP dibusak sauntara, mulihake budget winates cocok sawise patch.
- Yen upgrade langsung ora mungkin: matesi lalu lintas sing ora dipercaya sadurunge tekan PHP. Ngira-ngira proses upload mateni lan backtraces fatal PHP 8.5 minangka diterangake ing bagean 5. Mitigasi konfigurasi lan aturan WAF duwe jangkoan winates lan ora bisa ngganti upgrade. S1S2S3
1. Ringkesan Kerentanan lan Paukuman Resiko
PHP2Shell ing artikel iki nuduhake loro kerentanan tingkat Critical sing resmi dibeberke dening PHP tanggal 21 Oktober 2026. Loro-lorone ana hubungane karo memori lan panjaluk manajemen siklus urip mesin PHP, nyebabake risiko kode remot ora dieksekusi. S1S2S3
| Proyek | CVE-2026-109618 | CVE-2026-109619 |
|---|---|---|
| jeneng resmi | RCE via OOM corruption | RCE via stale global state |
| masalah inti | Memori sing ora cukup nyebabake lompat ora normal, ninggalake negara sing durung rampung initialization. | Negara global sing isih ana ing buruh nuduhake memori panjaluk sing dirilis. |
| Wektu kedadeyan sing khas | Proses initialization, eksekusi utawa ngresiki panjalukan saiki | Panjaluk sadurunge ninggalake status kasebut, lan panjaluk sabanjure nggunakake sadurunge. |
| Apa OOM minangka syarat sing dibutuhake? | Kagolong mekanisme pemicu inti saka kerentanan | Ora; kesalahan fatal liyane lan resik post-diagnosis uga bisa melu |
| Arah ndandani dhasar | Ngatur Gagal Alokasi kanthi Aman lan Panjaluk Mandhek | Ndandani kepemilikan negara, wektu ngresiki lan inisialisasi awal |
| Syarat pembuangan | kudu didandani | kudu didandani bebarengan |
Basis: Loro buletin keamanan resmi lan kiriman ndandani. S2S3S4
1.1 Pangerten penyebaran kena pengaruh
PHP resmi nganggep kabeh PHP penanganan penyebaran Web panjalukan ing resiko, kalebu PHP-FPM , Apache mod_php , php-cgi , FrankenPHP , lan LiteSpeed . Sing dituduhake mod_php serangan bisa kedaden sadurunge kode aplikasi mlaku, supaya mriksa login, framework middleware, lan validasi upload aplikasi ora bisa nutupi path kasebut. S1
Sampeyan perlu kanggo mbedakake antarane “penyebaran kudu didandani” lan “rantai serangan tartamtu wis rampung kabukten”. Pengumuman CVE-2026-109618: FPM bakal metu saka proses anak sawise panjalukan wiwitan gagal, mblokir jalur reresik mod_php sing cocog sawise gagal wiwitan; Nanging, dalan OOM sawise wiwitan sukses isih ing resiko. Pengumuman kasebut uga nyathet yen eksploitasi FPM lengkap kanggo CVE iki durung ditampilake. Watesan iki ora bisa digunakake kanggo deduce sing FPM aman, utamané CVE-2026-109619 ora bisa digatèkaké. S2S3
Watesan ijin langsung kanggo eksploitasi sukses gumantung marang identitas proses hosting PHP lan sumber daya sing bisa diakses. Umumé, perhatian kudu dibayar kanggo kode situs web, direktori upload, kredensial database, token layanan lan kemampuan akses jaringan internal; “eksekusi kode remot” ora ateges entuk ijin root kanthi alami. Paukuman akibat ing kene adhedhasar model ijin proses, lan dampak nyata kudu dievaluasi bebarengan karo ijin penyebaran.
Skrip CLI siji-wektu biasa ora duwe entri HTTP sing padha; nanging pangolahan sing nangani tugas njaba kanggo dangu ing CLI utawa mode ditempelake isih kudu klebu ing runtime lan persediaan siklus urip. Mung CMS, framework utawa Composer dependensi dianyari lan engine PHP ndasari ora otomatis diganti.
2. Analisis sabab
2.1 Pisanan ngerti rong siklus urip
PHP worker asring nangani pirang-pirang panjalukan kanthi berturut-turut. Memori sing diparengake sajrone panyuwunan bisa diluncurake kanthi seragam ing pungkasan panjaluk, nalika buruh dhewe lan sawetara lapangan global terus ana.
Mulane, mesin kudu njaga rong kendala:
- Kendala wiwitan: Data sing katon ing kode liyane kudu ing negara sing bisa diwaca, dilewati, lan dirusak kanthi aman.
- Kendala siklus urip: yen memori panyuwunan wis dibebasake, kolom sing umure luwih suwe ora kudu terus nambani alamat ing memori kasebut minangka status sing bener.
Loro kendala kasebut cocog karo mode kegagalan utama saka rong klompok kerentanan kasebut. Proses ing ngisor iki minangka deskripsi mekanisme sing nggabungake pengumuman lan kompilasi patch. Ora ateges saben panyebaran nduweni dalan sing bisa digayuh sing padha. S2S3S5
2.2 CVE-2026-109618: OOM ngganggu nganyari status sing durung rampung
Implementasine lawas nggunakake Langsung non-lokal saka jinis longjmp() kanggo nangani OOM, lan path kagayut metu konteks eksekusi saiki liwat zend_bailout(). Bebaya yaiku potongan kode C bisa uga wis nerbitake obyek anyar, array, utawa status panjalukan menyang kode liyane, nanging durung rampung kabeh initialization lapangan; ing wektu iki, apa wae kegagalan alokasi ing wektu sing cocog bisa nyebabake langkah-langkah penutupan normal bakal dilewati. S2
Proses gagal bisa dipérang dadi papat langkah:
- Nggawe utawa nganyari struktur internal request lan nggawe bisa diakses.
- Alokasi memori salajengipun gagal lan OOM micu.
- Aliran eksekusi mlumpat saka fungsi saiki, lan kode sing digunakake kanggo ngrampungake initialization utawa mulihake negara ora dieksekusi.
- Nyuwun ngresiki terus ngolah struktur kasebut lan nganggep konten sing ora bener minangka kolom utawa alamat sing bener.
Masalahe ora kehabisan memori tansah nyebabake RCE. Nanging, memori kekeselen ngganti aliran kontrol lan nglanggar asumsi mesin babagan struktur sing bener. Alokasi sing gagal ora kudu langsung nyangkut struktur sing pungkasane diwaca kanthi salah. S2
Apa panjaluk sing luwih cilik uga bisa entek memori
Jumlah bita ing awak panyuwunan lan panggunaan tumpukan sawise parsing ora padha. Lapangan A bisa uga cocog karo pirang-pirang senar, unsur susunan lan obyek metadata ing PHP; kerumitan struktural input bakal mengaruhi tingkat amplifikasi memori.
Masalah karo macem-macem bagean sing kadhaptar ing woro-woro resmi kalebu: longkangan mriksa ukuran dhisikan nalika kasedhiya dawa pranyatan ilang, nomer header kanggo bagean siji ora cukup winates, lan kontrol file kosong isih gawé metadata, karo jeneng nested nambah beban kerja array. Aplikasi kanggo unwinding, dekoding, utawa reassignment input bisa uga dadi sumber OOM. S2
Loro kesimpulan protèktif bisa dijupuk saka iki:
- Watesan awak njaluk kudu dileksanakake sabisa-bisa sadurunge mlebu PHP, lan dawa maca lan kerumitan struktur kudu dianggep.
- Watesan ukuran file, jumlah file, utawa mung nutup siji portal unggahan ora bisa nutupi kabeh sumber OOM.
Napa otentikasi aplikasi bisa uga kasep
Ing mod_php, awak panyuwunan bisa diurai kanthi otomatis sajrone tahap wiwitan panyuwunan; sanajan wiwitan gagal, reresik request related isih bakal dileksanakake. Mulane, jalur serangan sing dikonfirmasi bisa kedadeyan sadurunge kode aplikasi. Kanggo nyuda cahya ing tataran iki, Watesan kudu diselehake ing proxy mbalikke, server Web, utawa wates liyane sing ndhisiki pangolahan panjalukan PHP. S1S2
2.3 CVE-2026-109619: Memori panyuwunan wis dirilis, referensi global isih urip
Masalah iki kalebu kesalahan, sesi, obyek, utawa status ekstensi: lapangan disimpen ing lokasi akses jangka panjang pekerja, nanging data sing dirujuk ing lapangan kasebut kalebu panyuwunan siji. Sanalika referensi kasebut ora diresiki kanthi bener sadurunge tumpukan panjaluk diluncurake, panjaluk sabanjure bisa uga nemoni kahanan sing dangling, dadi ora bisa digunakake. S3
Analisis resmi mbagi kahanan eksploitasi dadi “produser” lan “konsumen”:
| peran utawa kahanan | tegese | Implikasi kanggo pangayoman |
|---|---|---|
| produser negara | Sijine negara sing diduweni dening panyuwunan iki menyang lokasi sing isih bisa diakses mengko | Kanggo mriksa apa reresik sing cocog wis rampung sawise metu ora normal |
| Status tetep | Ora diresiki, utawa diresiki banjur diisi maneh kanthi operasi sing telat. | Mung ngresiki sapisan ing tahap mateni sadurungé bisa uga ora cukup |
| digunakake maneh buruh | Buruh sing padha terus ngolah panjaluk sabanjure | Multiple buruh mung prabédan jadwal, ora njamin keamanan memori |
| konsumen advance | Waca, uculake utawa temtokake nilai ampas sadurunge negara sing cocog diwiwiti kanthi normal. | Kudu mriksa INI, sesi lan dalan liyane sadurunge initialization |
Kondisi kasebut kudu ditindakake kanthi kombinasi; sembarang log kesalahan dhewe ora mbuktekaken sing kerentanan wis kasil eksploitasi. S3
Ora mbutuhake OOM minangka prasyarat sing dibutuhake
Kesalahan fatal bisa ngganggu publikasi lan pemugaran negara sing dipasangake. Gagal kompilasi utawa parsing, kesalahan sing ora ditemokake, kegagalan require, lan wektu entek eksekusi bisa ninggalake negara tartamtu. Diagnosa non-fatal pungkasan ing reresik uga bisa repopulate informasi kesalahan sing wis dibusak. S3
Mula, ngganti memory_limit dadi tanpa wates ora nutupi set kerentanan iki.
”Sadurunge initialization” kudu dianggep kapisah
Wektu saka rong jinis konsumen sing dikonfirmasi beda-beda:
- Eawal INI diagnostics: Sawetara konfigurasi ditrapake ing panjalukan masalah bebaya, kabar utawa deprecation sadurunge normal executor initialization, lan proses diagnostik bisa ngakses negara kesalahan lawas.
- progres upload sesi: sesi bisa diproses luwih dhisik sajrone proses parsing awak panyuwunan, nanging modul biasa
RINITdurung rampung; ora bisa disimpulake yen path ora ana amarga aplikasi kasebut ora kanthi tegas nelponsession_start(). S3
Ora kabeh INI konfigurasi duwe wektu resiko padha. Konfigurasi tingkat direktori saka mod_php lan ing PHP_VALUE / PHP_ADMIN_VALUE diliwati dening FPM ngarep-mburi kudu dibedakake saka biasa php.ini , FPM pool konfigurasi wiwitan lan FPM .user.ini . Sing terakhir duwe wektu konfigurasi sing beda-beda lan ora bisa diarani konsumen awal sing padha. S3
Mateni display_errors, log_errors, nyuda error_reporting, utawa nggunakake @ mung mengaruhi visibilitas diagnosis; negara internal sing gegandhengan bisa uga wis diakses sadurunge mutusaké apa bakal output log. S3
3. Ndandani versi lan pilihan patch
3.1 Versi resmi upstream sing wis didandani
| Cabang PHP saiki | Versi pisanan sing kalebu fix resmi iki | Saran |
|---|---|---|
| 8.2 | 8.2.35 | Nganyarke menyang versi iki utawa versi sakteruse sing ngemot koreksi sing padha |
| 8.3 | 8.3.36 | Padha ing ndhuwur |
| 8.4 | 8.4.27 | Padha ing ndhuwur |
| 8.5 | 8.5.12 | Padha ing ndhuwur |
| 8.1 lan versi sadurungé | Dhukungan umum hulu wis rampung | Prioritas migrasi menyang cabang sing didhukung; release mriksa short-term utawa LTS Produsèn backport |
Versi lan status dhukungan adhedhasar woro-woro resmi PHP, lan garis dasar wektu yaiku 22 Oktober 2026. S1
Iki ambang mbenakake khusus cabang. Padha ora bisa diganti dening statement sing saben versi ngisor 8.5.12 ngrugekke: versi kayata 8.2.35 lan 8.4.27 ing cabang liyane wis ngemot mbenakake.
3.2 Priksa versi paket distribusi lengkap
Distro asring nambahake keamanan adhedhasar versi hulu sing luwih lawas. Penerimaan uga kudu mriksa versi rilis, sumber repositori, versi paket lengkap lan buletin keamanan.
Contone, versi paket fix Ubuntu 24.04 LTS sing didaftar kanggo Ubuntu USN-8948-1 yaiku:
8.3.6-0ubuntu0.24.04.13
Bagian hulu isih 8.3.6, nanging versi paket lengkap distribusi kasebut kalebu ing pengumuman fix iki. Kesimpulan iki mung ditrapake kanggo distribusi lan sumber paket sing cocog, lan ora bisa digeneralisasi kanggo mbangun sing uga nampilake 8.3.6. S10
3.3 Milih tembelan sing bener
| pemandangan | Rencana prioritas | TCTerms Key kanggo acceptance |
|---|---|---|
| Nggunakake paket distribusi PHP | Instal nganyari keamanan sing dirilis dening pabrikan | Pengumuman kasebut kalebu CVE; versi paket lengkap bener |
| Gunakake wadhah resmi PHP utawa gambar sing digawe dhewe | Nganyari runtime dhasar, mbangun maneh lan nyebarake | Kayata mlaku nggunakake gambar anyar; kabeh salinan lawas wis metu |
| Cabang sing didhukung dhewe | Gunakake versi keamanan resmi cabang iki utawa set tembelan resmi lengkap | Pencocokan cabang, completion dependensi, kompatibilitas ekstensi lan passing regresi |
| Tunduk marang 7.4, 8.0, 8.1 | Utamakan backport vendor; ngevaluasi cabang kode sumber darurat resmi yen perlu | Ngenali owah-owahan prilaku lan jadwal migrasi menyang versi sing didhukung |
Patch resmi wis dirilis, lan koreksi nyata kudu diwiwiti saka patch kasebut. Potongan kode ing Bagean 6 dimaksudake kanggo nggambarake desain lan nyemak sorotan lan ora dadi tembelan lengkap sing bisa ditrapake kanthi mandiri. S1S4S6
4. Proses ndandani formal
4.1 Inventarisasi saka runtime sing bener nangani panjalukan
Disaranake nggawe buku kas singkat kanggo ngrekam paling ora:
- Entri jeneng domain utawa layanan, backend proxy mbalikke, PHP SAPI.
- Cabang PHP, versi paket lengkap utawa gambar digest, mbangun sumber.
- FPM pool, unit layanan nyata, wadhah utawa Pod, jumlah replika.
- Ekstensi, konfigurasi utama lan file konfigurasi tambahan wis dimuat.
- Apa ana versi PHP liyane, salinan penyebaran lawas, utawa portal asal sing bisa diakses langsung?
Iki minangka saran implementasine supaya “diupgrade” bisa cocog karo saben entri lalu lintas sing nyata. Utamané mriksa yen baris printah PHP lan Web PHP nggunakake versi beda, gambar dibangun nanging wadhah lawas isih mlaku, bagéan saka blumbang utawa salinan ora diganti, etc.
4.2 Pilih lan pasang nganyari sing bener
Konfirmasi versi fix miturut Bagean 3, luwih becik nggunakake sumber paket sing dipercaya utawa rantai mbangun sing dikontrol. Cakupan nganyari kudu kalebu komponen sing bener-bener dadi panyuwunan, kayata paket FPM, modul Apache PHP, binar CGI, utawa bangunan layanan sing dipasang PHP.
Sadurunge nganyarke, simpen konfigurasi lan dhaptar paket, lan verifikasi wiwitan lan layanan utama ing lingkungan sing padha karo produksi. Kanggo ekstensi mandiri, priksa kompatibilitas mbangun lan mbukak sing cocog karo versi PHP. Mung milih komitmen sing cocog saka cabang liyane ora njamin manawa kabeh perbaikan wis ditindakake.
4.3 Wiwiti maneh utawa gulung liwat kedadeyan sing mlaku
Nginstal file lan mbukak kode anyar menyang proses iku rong perkara sing beda. Layanan sing cocog kudu diwiwiti maneh, utawa panggantos rolling kudu rampung, lan buruh lawas lan wadhah lawas kudu dikonfirmasi wis metu.
Kanggo mod_php, miwiti maneh proses Apache hosting modul. Layanan sing nampilake PHP mbutuhake proses hosting diganti. Kanggo FPM, ngresiki OPcache ora ngganti nganyari runtime lan pensiun buruh lawas.
Nalika nggunakake ngoper anggun, sampeyan kudu mriksa apa proses generasi lawas isih nangani sambungan dawa utawa panjalukan pinunjul. Cathetan panampa kudu nyakup layanan nyata, versi panyebaran, owah-owahan wektu rampung, lan asil metu saka conto lawas.
4.4 Verifikasi liwat panjalukan Web nyata
Disaranake kanggo nggabungake bukti-bukti ing ngisor iki tinimbang mung ngandelake perintah versi siji:
| bukti | Apa sing bisa dibuktekake | Ora bisa mbuktekake apa-apa piyambak |
|---|---|---|
| Manajer paket utawa metadata gambar | Sumber instalasi lan mbangun lengkap | Lalu lintas wis dialihake menyang conto iki |
| Proses lan status panyebaran | buruh utawa wadhah ngrampungake panggantos | Lawang njaba kudu dituju |
| Asil diagnostik diwatesi diakses liwat portal nyata | Web SAPI nyata lan konfigurasi mlaku | Apa backport release kalebu loro CVE |
| Pengumuman vendor utawa rekaman tembelan lengkap | Ndandani bug iki kalebu ing mbangun iki | Kabeh replika disebarake |
PHP_VERSION, PHP_SAPI, file konfigurasi sing dimuat, lan konfigurasi darurat bisa dipriksa liwat kapabilitas diagnostik internal sing ana, utawa portal diagnostik sementara lan kontrol akses. Priksa manawa panyuwunan ora bali langsung dening CDN utawa cache kaca; mbusak entri diagnostik sauntara yen wis rampung.
php -v biasane mung nuduhake binar CLI sing saiki dipilih dening cangkang; printah kayata php-fpm -i ora padha karo verifikasi buruh ana sing nampa lalu lintas. Aja mbukak kaca phpinfo() lengkap menyang jaringan umum kanggo dangu.
4.5 Priksa regresi bisnis lan mbusak setelan darurat
Verifikasi login normal, sesi maca lan nulis, wangun lan upload, ngimpor, kesalahan nangani lan stabilitas buruh watara fungsi sing kena pengaruh dening owah-owahan iki. Priksa manawa tingkat kesalahan, wektu tundha respon, puncak memori, proses metu lan frekuensi mbangun maneh ora normal.
Yen memory_limit=-1 disetel kanggo sementara, anggaran winates sing cocog karo kapasitas bisnis bakal dibalekake sawise patch resmi ditrapake; yen pm.max_requests=1 disetel, konfigurasi siklus urip sing dievaluasi kapasitas bakal dibalekake sawise ndandani dikonfirmasi. Watesan ukuran input lan kontrol akses sumber bisa disimpen minangka kabutuhan bisnis.
Yen masalah kompatibilitas muncul nalika nganyarke, prioritas kudu diwènèhaké kanggo nundha portal sing kena pengaruh, mbatesi akses njaba, utawa nyetel aplikasi sadurunge mbalek maneh. Langsung ngidini runtime unrepaired kanggo ngawula jaringan umum maneh bakal mbukak maneh risiko asli.
5. Mitigasi ngukur nalika upgrade langsung ora bisa
Bagean iki dimaksudake kanggo nyuda cahya jangka pendek utawa nambah kasedhiyan. Saben ukuran mung nyakup dalan tartamtu, lan kombinasi sawetara langkah ora padha karo ndandani lengkap. S1S2S3
5.1 Prioritasake kontrol lalu lintas sadurunge PHP
Yen layanan ngidini, mbatesi sementara titik pungkasan sensitif menyang sumber sing dipercaya utawa ngetrapake kontrol akses sadurunge PHP. Kanggo ngunggahake beban kerja, watesan ukuran awak panjaluk, jumlah lapangan, jumlah bagean, header saben bagean, lan ambane nesting. Layanan sing ora mbutuhake multipart bisa nolak ing frontend. S2
Watesan iki kanggo nutupi kabeh mlebu menyang PHP. Mung nyegat URL sing jenenge “upload” bakal kantun entri liyane sing isih diurai kanthi otomatis dening PHP ing awak panyuwunan. Kanggo kasus kayata transfer chunked, lack of kasedhiya dawa ngumumaké, etc., watesan kudu adhedhasar ukuran maca nyata; aplikasi uga kudu budget ukuran output dhewe nalika decompressing utawa ngembangaken isi maneh.
Cithakan konfigurasi 5.2 FPM pool
Selehake setelan ing ngisor iki ing bagean konfigurasi FPM pool sing bener serves requests, ora verbatim ing php.ini. Nilai 8M lan 4M minangka conto kanggo nyetel beban kerja. Ninggalake papan kanggo kolom formulir lan wates multipart nalika mbatesi kabeh panyuwunan POST. S11S12
; Temporary mitigation: evaluate capacity before applying.
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M
php_admin_value[upload_max_filesize] = 4M
php_admin_flag[session.upload_progress.enabled] = off
PHP 8.5 mung, plus:
php_admin_flag[fatal_error_backtraces] = off
Fungsi lan watese saben-saben yaiku:
| Konfigurasi | efek samesthine | Katrangan babagan watesan sing kudu ditindakake |
|---|---|---|
memory_limit=-1 | Mbusak kondisi pemicu wates ndhuwur memori PHP sing bisa diprediksi | Ora nyegah kegagalan alokasi dhasar; mbatalake budget asli bisa nambah risiko kesel memori lan gangguan layanan. |
post_max_size sing luwih cilik | Ngurangi ukuran data sing mlebu ing proses parsing | Unfixed parser wis dikenal longkangan; amplifikasi memori ora bisa nyegah independen |
upload_max_filesize < post_max_size | Batesi ukuran file siji lan cadangan papan nduwur sirah | Ora mbatesi kabeh kolom, metadata, utawa alokasi ing-app |
| Nutup kemajuan unggahan | Blokir jalur sing gegandhengan karo sesi sing dikonfirmasi | Ora nutupi varian negara global liyane |
| PHP 8.5 cedhak backtrace fatal | Blokir dikonfirmasi produser status related | Ora nutupi dalan liyane kayata sesi |
Watesan ukuran teka saka woro-woro resmi; kanggo sintaksis blumbang lan semantik konfigurasi tingkat manajemen, ndeleng manual PHP. S1S2S3S11
Setelan php_admin_* tingkat manajemen ora bisa diganti dening aplikasi liwat ini_set(). Kabeh blumbang, tingkat direktori lan konfigurasi mlebu ngarep kudu dideleng kanggo konfirmasi manawa nilai panjaluk nyata kaya sing dikarepake. Sawise modifikasi, mbangun maneh kabeh buruh kanggo nyegah proses sing ana saka terus kanggo terus negara lawas.
Yen sampeyan milih ngowahi php.ini langsung, sintaks kudu diganti dadi:
memory_limit = -1
post_max_size = 8M
upload_max_filesize = 4M
session.upload_progress.enabled = Off
Ora kaya php_admin_value ing blumbang, mung nyetel memory_limit=-1 ing php.ini ora nyegah app ngowahi maneh. Kerangka, kode aplikasi, lan konfigurasi liyane kudu dicenthang kanggo ndeleng yen wis ngreset nilai winates; nalika dileksanakake dibutuhake, nggunakake setelan Manajemen-tingkat cocok kanggo SAPI saiki lan mriksa Nilai efektif nyata. S11S12
Tambah fatal_error_backtraces = Off mung kanggo PHP 8.5. Aja nggunakake ini_set() tingkat aplikasi minangka solusi kanggo mateni kemajuan unggahan, lan aja ngandelake FPM .user.ini supaya efektif sadurunge njaluk parsing. S1S3
5.3 Atur biaya kanggo mbusak watesan memori PHP
memory_limit=-1 minangka mitigasi jalur sementara kanggo lingkungan sing ora tetep lan ora kudu disalin minangka konfigurasi standar jangka panjang. Nalika aplikasi utawa panjalukan metu saka kontrol, bisa nggunakake munggah luwih saka memori inang. Mulane, sadurunge nggunakake, sampeyan kudu ngevaluasi jumlah concurrencies, puncak siji buruh, lan kapasitas layanan total, lan masang watesan input ngarep-mburi. S2
Watesan memori wadhah utawa cgroup bisa nyedhiyakake wates kasedhiyan nanging ora njamin yen alokasi ora bakal gagal; kabeh wadhah, master, lan kabeh buruh uga bisa mungkasi nalika watesan wis micu. Strategi granularitas lan terminasi isolasi kudu dievaluasi bebarengan karo penyebaran lan ora bisa diarani proteksi lengkap kanggo loro CVE iki. S2
Aja ngganti strategi ing ndhuwur karo RLIMIT_AS, RLIMIT_DATA, utawa watesan papan alamat proses sing cocog; padha bisa langsung nimbulaké alokasi ndasari gagal menyang dalan OOM isih masalah. S2
Conto Konfigurasi 5.4 Nginx
Ditrapake kanggo penyebaran ing ngendi Nginx nerusake panjalukan menyang PHP-FPM. Bisa disetel ing tingkat konfigurasi layanan hosting sing nyata:
client_max_body_size 8m;
fastcgi_request_buffering on;
client_max_body_size mbatesi ukuran awak panyuwunan; fastcgi_request_buffering on ngidini Nginx maca awak panjaluk lengkap dhisik banjur dikirim menyang backend FastCGI. Apa ditrapake ing server utawa location tartamtu kudu dipriksa bebarengan karo hubungan warisan lan jangkoan sing ana. S13S14
Mung nalika bisnis ora mbutuhake multipart, sampeyan bisa nambah aturan penolakan menyang lawang layanan sing cocog:
if ($http_content_type ~* "multipart/form-data") {
return 403;
}
Iki minangka cithakan watesan entri sing prasaja nggunakake if lan return, dudu aturan panyaring umum kanggo kerentanan parser. Verifikasi sintaks konfigurasi lan panjalukan normal sadurunge panyebaran, lan priksa manawa error_page adat pangalihan 403 panjalukan menyang PHP. Pencocokan string ora menehi jaminan lengkap babagan kabeh beda parsing. S15
Kajaba iku, konfigurasi kasebut ora kanthi otomatis mbatesi jumlah data, jumlah kolom, utawa jumlah obyek PHP sing bisa didekompresi dening aplikasi; bisnis sing kudu ngunggah kudu nggunakake watesan tambahan sing ngerti struktur panjalukane.
5.5 Mitigasi opsional: siji panyuwunan saben buruh FPM
Kanggo panyebaran FPM sing bisa mbayar overhead, persiyapan jangka pendek bisa dievaluasi:
pm.max_requests = 1
Lan mbangun maneh buruh sing wis ana. Pamblokiran chain cross-request sing diterangake ing tingkat nggunakake maneh buruh, nanging bakal nambah proses nggawe lan initialization overhead; ing wektu sing padha, ora bisa ndandani panjalukan padha OOM lan masalah ngresiki CVE-2026-109618. Nalika nilai luwih cilik nanging luwih saka 1, isih ana jendhela panjalukan kanggo nggunakake maneh. S3S11
5.6 WAF lan Cloudflare watesan jangkoan
Cloudflare wis ngumumake pengaturan penyebaran kanggo proteksi marang PHP2Shell, kalebu rencana Free. Nalika nggunakake layanan, sampeyan kudu mriksa apa lalu lintas nyata liwat proxy, apa aturan pangayoman ing efek, lan apa situs asal bisa langsung bypassed; kanggo rencana mbayar, sampeyan uga kudu mriksa konfigurasi lan pangecualian saka Aturan Ngatur cocog. S16
Sawetara deteksi sing diterangake vendor nggunakake sinyal respon, saengga kabeh proteksi ora bisa ditafsirake minangka “saben serangan diblokir sadurunge tekan PHP”. WAF bisa mbantu nyuda cahya lan menehi informasi observasional, nanging terus nganyari PHP isih perlu. S16
5.7 Napa langkah-langkah umum ora cukup
| ukuran utawa paukuman | kekurangane |
|---|---|
Mung cedhak file_uploads | Ora bisa nutupi kabeh pangolahan multipart lan aplikasi dalan OOM dhewe |
Setelan enable_post_data_reading=Off | Ngganti prilaku kanthi otomatis ngisi POST / FILES; awak request isih bisa diwaca dening aplikasi lan bisa ngganggu bisnis normal |
Pateni tampilan kesalahan, log utawa nggunakake @ | Proses diagnostik internal isih bisa ngakses status dangling |
| Tambah jumlah buruh | Aja nggawe mekanisme ngresiki negara sing aman, utawa ngilangi panggunaan maneh buruh tunggal |
Konfigurasi mung disable_functions utawa open_basedir | Watesan kasebut ora ndandani kerusakan memori lapisan mesin C |
| Mung mriksa versi utawa salinan siji sapisan | Ora bisa dibuktekake manawa kabeh lawang mlebu lan kedadeyan sing mlaku wis diganti |
| Ora ana log pangecualian sing katon | Ora bisa mbuktekake manawa kerentanan kasebut ora ana utawa durung dimanfaatake sadurunge. |
Antarane wong-wong mau, konfigurasi lan basis mekanisme kerentanan PHP bisa ditemokake ing S2S3S12; paukuman bab jangkoan, acceptance lan wates ijin adhedhasar saran implementasine diajukake dening mekanisme iki.
6. Ide implementasi lan titik review saka patch resmi
6.1 Gunakake koreksi lengkap kanggo cabang sing bener
Kiriman resmi perwakilan kanggo PHP 8.5 yaiku:
31c0ea7d7ff1d1fccb6492e52dab544011628065
Avoid state corruption via bailout
Komit kasebut kanthi tegas nggandhengake rong CVE, loro kanggo nyetel mekanisme metu OOM lan kanggo ndandani kahanan global sing bisa diakses sajrone fase inisialisasi. Kirim kaca kanthi bedane lengkap ndeleng S4S5. Cabang liyane kudu nggunakake rilis keamanan resmi dhewe utawa tembelan sing cocog, lan ora bisa dianggep manawa owah-owahan 8.5 bisa ditrapake langsung ing versi lawas.
6.2 OOM Repair: mulihake negara sing bisa diproses dhisik, banjur mungkasi panjaluk kasebut
Implementasi formal ngenalake rong tingkat pangolahan OOM sing alus lan hard: nalika watesan alus wis tekan, status sing ditundha direkam, lan metu sing dikontrol ditindakake ing lokasi sing aman kayata VM; antarmuka alokasi gagal ngidini panelpon kanggo tegas nangani Gagal. Kanggo alokasi sing ora bisa langsung bali Gagal, yen ambang hard sing luwih dhuwur samesthine bakal ngluwihi, proses bakal mungkasi langsung kanggo ngindhari terus kanggo proses panjalukan ing negara penengah ora aman. S2S5
Ing ngisor iki minangka kutipan kode kunci ing 8.5 diff sing digunakake kanggo menehi tandha OOM sing ditundha:
EG(delayed_oom).state = ZEND_OOM_STATE_PENDING;
zend_atomic_bool_store_ex(&EG(vm_interrupt), true);
VM nangani interupsi lan lokasi aman liyane banjur nelpon zend_handle_delayed_oom(). Konteks eksekusi kode pangguna nggunakake jalur unwind sing dikontrol; path OOM hard nelpon _exit(137). S5
Saka perspektif desain, owah-owahan penting: avoids sewenang-wenang nyebrang C tumpukan telpon nalika struktur ing negara penengah, lan panggonan metu ing lokasi sing bisa njaga alangan negara. Sawise watesan alus dipicu, memori tambahan bisa uga dibutuhake kanggo ngrampungake proses, supaya batesan alus anyar ora bisa dimangerteni minangka watesan ndhuwur mutlak kanggo total memori proses.
Uga ora bisa diringkes minangka “PHP wis mbusak kabeh zend_bailout()”. Tembelan isih nggunakake mekanisme sing cocog ing konteks tartamtu; apa tetep iku wektu metu mbebayani lan manajemen negara gawan. S5
6.3 Update alokasi panelpon lan multipart parsing bebarengan
Yen sampeyan mung ngganti fungsi alokasi kanggo “bali NULL ing Gagal” lan panelpon asli isih nganggep yen pointer bener tansah bali, sampeyan bakal introduce anyar null pointer akses utawa reresik ora lengkap. Antarmuka alokasi sing gagal ing tembelan kudu dideleng bebarengan karo pamriksa panelpon lan panyebaran pangecualian. S5
koreksi sing gegandhengan karo multipart uga kalebu mriksa kumulatif adhedhasar volume maca sing nyata, nyuda pangolahan header sing ora ana guna utawa duplikat, lan nggunakake logika metu lan ngresiki sing konsisten nalika OOM ditundha. Owah-owahan kasebut nyuda amplifikasi sumber daya lan nggawe parser tundhuk karo protokol OOM anyar. S5
Kanggo tim sing njaga cabang dhewe, disaranake masalah ing ngisor iki dadi fokus review kode:
- Apa negara katon ing jagad njaba sadurunge diwiwiti kanthi lengkap?
- Sawise gagal alokasi utawa pangecualian callback, apa kepemilikan isih unik lan ora ambigu?
- Apa sampeyan bisa tekan metu ngresiki terpadu yen gagal ing tengah dalan?
- Bisa fungsi ngresiki ngenali uninitialized utawa dibebaske lapangan?
- Apa anggaran parsing adhedhasar volume pangolahan nyata, ora mung pratelan panjaluk dipercaya?
- Wis nilai bali Gagal anyar wis ditangani dening kabeh panelpon?
Iki minangka pitakonan review sing dirangkum adhedhasar mekanisme fix, lan dudu kesimpulan saka audit sing wis rampung kanggo basis kode sing ora kasedhiya.
6.4 Cross-request fix: initialization sadurungé, final reresik mengko
Cocog karo CVE-2026-109619, tembelan nyetel sawetara wates siklus urip bebarengan. File lan operasi ing ngisor iki njupuk PHP 8.5 beda resmi minangka conto. S5
| lokasi | ngganti arah | Masalah ditanggulangi |
|---|---|---|
Zend/zend_execute_API.c lsp. | Reset status pelaksana kayata kasalahan, pangecualian, panangan, obyek, lsp. | Sawise panjalukan rampung, isih ana referensi lawas sing bisa diakses dening panyuwunan sabanjure. |
Jalur wiwitan main/main.c | Telpon php_basic_early_rinit() sadurunge SAPI diaktifake | Nalika konsumen awal ana, negara dhasar sing relevan durung diwiwiti. |
Nutup path saka main/main.c | Numpes HTTP globals lan tandhani minangka undefined | Nilai sing dirilis isih dianggep minangka obyek sing bener |
| sadurunge tumpukan panyuwunan pungkasane dibebasake | Ngresiki pesen kesalahan pungkasan maneh | Diagnosa reresik pungkasan ngganti status kesalahan |
ext/session/session.c | kemajuan upload Path awal wis initialized sesi pisanan globals | Modul reguler RINIT sadurunge diakses status lawas |
| kode serialization related | Matesi parsing kelas lan callback pangguna ing pangolahan awal | Nglakokake kode pangguna tambahan nalika inisialisasi durung rampung |
Contone, urutan wiwitan kalebu:
zend_activate();
php_basic_early_rinit();
sapi_activate();
Sawise HTTP globals dirusak, tambahake tandha status gagal:
zval_ptr_dtor(&PG(http_globals)[i]);
ZVAL_UNDEF(&PG(http_globals)[i]);
Kutipan kasebut nggambarake rong prinsip: miwiti sadurunge konsumen paling awal, lan nindakake reresik pungkasan sawise operasi pungkasan sing bisa nggawe maneh negara. Ngreset pointer mung nalika normal RINIT utawa tahap mateni sadurungé bisa uga ora bisa ngakses sadurungé utawa mengko. S5
6.5 Apa ora dianjurake kanggo nggawe dhewe “diposaken siji-line”?
Ngganti kabeh zend_bailout() karo _exit(), utawa mung nambah null pointer mriksa ing entri tartamtu, bakal jengkal nomer akeh konteks eksekusi beda. Bisa uga ngilangi kolom status liyane, utawa bisa uga ngganti karusakan, callback lengkap, proses hosting, lan njaluk semantik pungkasan.
Kanggo versi sing didhukung, mbenakake lengkap sing wis dirilis kudu diutamakake. Migrasi cabang dhewe kudu ngrekam sumber patch, garis dasar sing ditrapake, penanganan konflik lan owah-owahan prilaku, lan nggunakake kasus panggunaan regresi hulu sing cocog lan verifikasi proses bisnis iki. Saran ing kene teka saka analisis ruang lingkup tembelan ing allocator, VM, sesi lan njaluk owah-owahan siklus urip. S4S5
7. Backport darurat saka PHP 7.4, 8.0, 8.1
PHP resmi menehi backport kode sumber minimal telung cabang lawas adhedhasar keruwetan. Jeneng cabang kasebut yaiku:
PHP-7.4-CVE-2026-109618-109619
PHP-8.0-CVE-2026-109618-109619
PHP-8.1-CVE-2026-109618-109619
Kanggo pranala cabang, waca S7S8S9. Iki minangka pangiriman darurat kanggo kerentanan iki lan ora nuduhake bali menyang dhukungan hulu biasa kanggo cabang lawas, lan uga ora ngganti nganyari keamanan liyane. S1
7.1 Njupuk backport PHP 8.1 minangka conto
Kiriman sing cocog kanggo PHP 8.1 yaiku:
1d7dec178a094e6e75b229ce22754045f8c6070a
Sawijining strategi ndukung gagal-cepet: nelpon _exit(1) sawise outputting diagnostik ing cocog OOM path, lan kalebu status global lan koreksi cocog liyane; nalika internal mateni pangolahan sing cocog kanggo proses upload sesi. Kanggo kiriman kode sumber sing cocog, deleng S6.
Iki minangka prabédan prilaku saka desain OOM sing ditundha luwih lengkap ing cabang sing didhukung. Mung amarga konfigurasi isih nuduhake yen upload kemajuan ing, iku ora ateges prilaku Processing internal sawise backport iki bakal tetep panggah.
7.2 Rega sing kudu ditampa nalika nyebarake
Metu saka proses langsung bisa nimbulaké panjalukan saiki gagal, skipping callbacks mati normal PHP lan bagéan saka nutup aplikasi; yen inang adopts model thread, iku uga perlu kanggo ngira-ngira impact saka kabeh proses inang metu saka karya bebarengan liyane. Apa manajer proses bisa narik proses panggantos ing wektu uga kudu kalebu ing verifikasi.
Mulane, pangguna saka versi lawas kudu nimbang supaya:
- Pindhah menyang cabang PHP sing didhukung lan versi tetep.
- Gunakake rilis sing jelas nyakup loro CVE utawa nganyari pabrikan LTS.
- Yen pancen tundhuk karo versi lawas saka kode sumber, gunakake backport darurat resmi versi cocog kanggo verifikasi owah-owahan lengkap lan kompatibilitas, lan ngatur migrasi sakteruse.
“Backport minimal” ing kene nggambarake kompatibilitas lan ruang lingkup implementasi sing dipilih dening pejabat, lan ora kudu diinterpretasikake kanthi otomatis minangka “koreksi kerentanan sing ora lengkap”. Sampeyan kudu ngadili adhedhasar kode sumber cabang sing cocog lan woro-woro pabrikan, lan aja mbusak owah-owahan sing ndhukung dhewe. S1S6
8. Kriteria panrima lan pemeriksaan tindak lanjut
Disaranake supaya asil ing ngisor iki digunakake minangka basis kanggo ngrampungake perbaikan iki:
| Item panampa | Standar rampung |
|---|---|
| jangkoan kerentanan | Pengumuman mbangun utawa vendor kanthi tegas ndandani CVE-2026-109618 lan CVE-2026-109619 |
| Jangkoan penyebaran | Kabeh portal, blumbang, layanan lan replika nggunakake runtime didandani |
| Proses njupuk efek | Buruh lawas, proses host lawas lan wadhah lawas kabeh metu |
| Verifikasi panjalukan asli | Dikonfirmasi SAPI, dibangun lan dikonfigurasi nganggo link Web sing nyata kanggo ngilangi misdirection cache |
| kasedhiyan bisnis | Fungsi utama kayata sesi, upload, ngimpor, lan penanganan kesalahan wis bali normal. |
| Mungkasi langkah-langkah sementara | Memori tanpa wates lan konfigurasi daur ulang pekerja sing ekstrim wis dibalekake miturut rencana kapasitas utawa duwe alasan sing jelas kanggo retensi |
| Bukti owah-owahan | Rekam versi paket utawa gambar digest, nganyari ruang lingkup, wektu rampung lan asil verifikasi |
Ing ndhuwur minangka saran kanggo implementasine. Yen sampeyan kudu verifikasi prilaku OOM, metu ora normal, utawa patch khusus, sampeyan kudu nggunakake tes kemunduran hulu utawa injeksi kesalahan sing dikontrol ing lingkungan sing terisolasi supaya ora bola-bali nggawe kekeselen memori ing lingkungan produksi minangka cara sing ditampa.
Priksa uga PHP fatal, kacilakan buruh, restart abnormal, tingkat kesalahan request lan acara WAF sadurunge lan sawise nganyari. Log mung bisa menehi pitunjuk diselidiki: kedadeyan OOM ora ateges wis dieksploitasi, lan kekurangan weker ora mbuktekake manawa ora ana eksploitasi. Nganyarke ndandani dalan kerentanan sing bisa digayuh ing mangsa ngarep; yen anomali kayata file tampering utawa kebocoran kredensial ditemokake, investigasi kedadean kapisah kudu dileksanakake.
Lampiran: Sumber lan pranala sing dikutip
Kabeh pranala sumber diklumpukake ing ngisor iki. Advisories, patch, lan panuntun dhumateng vendor nggambarake mriksa ing Oktober 22, 2026; deployments sakteruse kudu mriksa nganyari vendor. Kutipan angka ing teks kasebut nuduhake entri kasebut.
S1 — PHP buletin keamanan resmi lan versi ndandani
- Sumber: Project PHP, 21 Oktober 2026.
- Tujuan: Ruang lingkup risiko, papat versi ndandani resmi, langkah sementara resmi lan instruksi backport darurat kanggo cabang lawas.
- Rujukan: PHP 2026 This security bulletin ana ing arsip buletin taunan
S2 — CVE-2026-109618 Buletin Teknis Resmi
- Sumber: php/php-src GitHub Security Advisory, 21 Oktober 2026.
- Identifikasi: GHSA-w8hw-w9fx-j79w.
- Tujuan: Wates jangkoan kanggo OOM, amplifikasi multipart, prabédan lan mitigasi SAPI.
- Pranala: RCE via OOM corruption
S3 — CVE-2026-109619 Buletin Teknis Resmi
- Sumber: php/php-src GitHub Security Advisory, 21 Oktober 2026.
- Identifikasi: GHSA-6wmf-4rv5-p3rp.
- Tujuan: Cross-request dangling state, produser lan konsumen, initialization awal, mitigasi konfigurasi.
- Pranala: RCE via stale global state
S4 - PHP 8.5 kiriman fix resmi
- Sumber: php/php-src.
- Kirim:
31c0ea7d7ff1d1fccb6492e52dab544011628065. - Tujuan: Konfirmasi kiriman resmi kanggo ndandani loro kerentanan bebarengan, lan nerangake arah pangowahan sakabèhé.
- Pranala: Avoid state corruption via bailout
S5 — PHP 8.5 Resmi dibalekake lan bedane lengkap
- Sumber: beda karo kiriman resmi sing padha.
- Tujuan: Priksa implementasine tartamtu saka allocator, VM, HTTP globals, sesi, serialization lan siklus urip request.
- Pranala: official complete diff
S6 - PHP 8.1 kiriman backport darurat resmi
- Sumber: php/php-src.
- Kirim:
1d7dec178a094e6e75b229ce22754045f8c6070a. - Tujuan: Priksa metu cepet saka cabang lawas lan upload owah-owahan prilaku kemajuan.
- Pranala: PHP 8.1 Emergency backport submission
- Pranala: corresponds to complete diff
S7 - PHP 7.4 cabang backport darurat resmi
- Sumber: php/php-src, PHP cabang kode sumber sing kadhaptar ing buletin keamanan resmi.
- Pranala: PHP-7.4-CVE-2026-109618-109619
S8 - PHP 8.0 cabang backport darurat resmi
- Sumber: php/php-src, PHP cabang kode sumber sing kadhaptar ing buletin keamanan resmi.
- Pranala: PHP-8.0-CVE-2026-109618-109619
S9 - PHP 8.1 cabang backport darurat resmi
- Sumber: php/php-src, PHP cabang kode sumber sing kadhaptar ing buletin keamanan resmi.
- Pranala: PHP-8.1-CVE-2026-109618-109619
S10 — Ubuntu Buletin Keamanan USN-8948-1
- Sumber: Canonical / Ubuntu, 21 Oktober 2026.
- Tujuan: Rilis backport lan conto versi paket lengkap.
- Pranala: USN-8948-1: PHP vulnerabilities
S11 — Pandhuan konfigurasi PHP-FPM
- Sumber: dokumen resmi PHP.
- Tujuan: Semantik konfigurasi kayata
php_admin_value,php_admin_flag,pm.max_requests, lsp. - Pranala: PHP-FPM Configuration
S12 — PHP Core INI Manual Konfigurasi
- Sumber: dokumen resmi PHP.
- Tujuan: Definition lan orane katrangan saka request awak, upload, memori lan otomatis POST konfigurasi maca.
- Pranala: Description of core php.ini directives
S13 — Nginx njaluk watesan ukuran awak
- Sumber: dokumen resmi Nginx.
- Tujuan: Tegese
client_max_body_sizelan tingkat konfigurasi sing kasedhiya. - Pranala: ngx_http_core_module / client_max_body_size
S14 — Nginx FastCGI panyuwunan buffer
- Sumber: dokumen resmi Nginx.
- Tujuan: Urutan pangolahan lan fungsi
fastcgi_request_buffering. - Pranala: ngx_http_fastcgi_module / fastcgi_request_buffering
S15 — Nginx Kondisi lan instruksi bali
- Sumber: dokumen resmi Nginx.
- Tujuan: Sintaks konfigurasi
iflanreturn. - Pranala: ngx_http_rewrite_module
S16 — Cloudflare PHP2Shell Pandhuan Proteksi
- Sumber: blog resmi Cloudflare.
- Tujuan: Katrangan babagan ruang lingkup penyebaran WAF, susunan rencana lan mekanisme deteksi Free.
- Pranala: Cloudflare deploys protections against php2shell vulnerability