
OrcaCyber Research - PHP2Shell: Bagaimana Permintaan yang Gagal Menjadi Eksekusi Kode Jarak Jauh
- OrcaBARUOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 per 1 juta token · 13 tok/s
- deepseekBARUDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745Kecerdasan
- DeepSeekBARUDeepSeek: DeepSeek V4.1 Flash2026-10-1740Kecerdasan
- OrcaBARUOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1 juta token · 151 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952Kecerdasan
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856Kecerdasan
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1 juta token · 1076 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238Kecerdasan
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Kecerdasan
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Kecerdasan
- xAIGrok 4.72026-09-2146Kecerdasan
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 per 1 juta token · 157 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 per 1 juta token · 1885 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453Kecerdasan77Koding
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241Kecerdasan76Koding
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245Kecerdasan76Koding
- AnthropicAnthropic: Claude Fable 5.12026-09-0153Kecerdasan82Koding
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 per 1 juta token · 49 tok/s
- AlibabaQwen: Qwen3.8 Flash2026-08-26$0.15 / $0.47 per 1 juta token · 105 tok/s
- z-aiZ.ai: GLM 5.3 Flash2026-08-2642Kecerdasan72Koding
Proof of concept dalam penyelidikan ini dibuat dengan model OrcaCyber Zero dan OrcaCyber Ultra. Bundel riset mendokumentasikan analisis tingkat sumber, reproduksi terkendali menggunakan eksploitasi publik yang diadaptasi, artefak pengungkapan memori, crash proses, dan bukti eksekusi perintah. File yang diberikan tidak secara independen mencatat langkah mana yang dilakukan oleh masing-masing model; atribusi model disediakan oleh tim riset.
Kondisi kehabisan memori yang fatal seharusnya menghentikan permintaan dengan aman. Di sini, kondisi tersebut dapat menginterupsi PHP saat status native baru terinisialisasi sebagian, meninggalkan referensi yang tetap ada hingga permintaan berikutnya. Hasilnya adalah pelanggaran masa hidup memori lintas permintaan dengan konsekuensi mulai dari pengungkapan hingga eksekusi kode jarak jauh di lingkungan yang diuji.
Sekilas bukti utama
• Target — PHP 8.4.26, Apache/mod_php, satu worker, lab Docker terisolasi.
• Log crash — Satu worker keluar karena SIGABRT dan tiga worker keluar karena SIGSEGV dalam kutipan yang disediakan.
• Respons HTTP — 819.200 byte dalam nilai PHPSESSID yang didekode URL.
• Bukti eksekusi — code>uid=33(www-data) gid=33(www-data) groups=33(www-data)/code>.
• Regresi — Laporan tersebut menjelaskan empat upaya yang tidak berhasil pada PHP 8.4.27 yang telah ditambal; hasil mentah tidak disertakan.
Sumber: REPORT.md, crash_evidence.log, leak_attempt.resp, dan rce_proof_8426.txt yang diunggah. Lampiran yang dijelaskan di bawah ini mereproduksi artefak tersebut sebagai panel bukti bertata huruf; ini bukan foto atau tangkapan layar terminal asli.
1. Kerentanan: kegagalan kepemilikan pada batas permintaan
Dua masalah yang saling terkait ini menyangkut inisialisasi permintaan yang terinterupsi dan pointer global-runtime yang sudah basi. Dalam arsitektur PHP yang relevan, penanganan multipart/form-data dan callback kemajuan unggahan sesi dapat berjalan sebelum kode aplikasi pengguna normal. Transisi alur kendali yang bersifat pengecualian, termasuk code>zend_bailout()/code>, dapat melewati pembersihan yang seharusnya dilakukan dan meninggalkan status yang menunjuk ke memori yang nantinya dilepaskan atau digunakan kembali.
Invarian keamanan: referensi global-worker yang diekspos ke permintaan B tidak boleh mereferensikan memori yang kepemilikan dan masa hidupnya berakhir bersama permintaan A. Kegagalan yang dilaporkan melanggar invarian tersebut.
Endpoint yang didemonstrasikan adalah halaman PHP minimal yang hanya mengembalikan OK; narasi eksploitasi tidak bergantung pada endpoint SQL injection tingkat aplikasi, file inclusion, atau deserialization.
2. Urutan teknis
• A1 — interupsi. Penanganan multipart dan progres unggah memicu OOM selama pembersihan, sehingga meninggalkan status sesi yang basi.
• B1 — kebocoran. Permintaan berikutnya menyebabkan serialisasi cookie sesi membaca melampaui ID sesi yang valid.
• Pemulihan alamat. Nilai pointer yang bocor digunakan untuk menyimpulkan tata letak pustaka dan heap yang relevan dalam build tersebut.
• A2/B2 — korupsi data. Urutan dua permintaan lebih lanjut membentuk dan mengalihkan data usang yang digunakan saat mematikan.
• Hasil. Eksploitasi publik yang telah diadaptasi melaporkan eksekusi perintah sebagai www-data.

Barang bukti: apa yang sebenarnya ditunjukkan oleh berkas yang disediakan
Bukti A — penghentian worker dari log Apache
• code>[core:notice] [pid 1:tid 1] AH00051: child pid 54 exit signal Abort (6), possible coredump in /etc/apache2/code>
• code>[core:notice] [pid 1:tid 1] AH00051: pid anak 55 keluar dengan sinyal Segmentation fault (11), kemungkinan coredump di /etc/apache2/code>
• code>[core:notice] [pid 1:tid 1] AH00051: pid anak 58 keluar dengan sinyal Segmentation fault (11), kemungkinan coredump di /etc/apache2/code>
• code>[core:notice] [pid 1:tid 1] AH00051: proses anak dengan pid 61 keluar dengan sinyal Segmentation fault (11), kemungkinan coredump di /etc/apache2/code>
Kutipan yang disusun dari crash_evidence.log (23 Oktober 2026). Keluarnya beberapa worker mendukung adanya kegagalan keamanan memori; crash saja tidak membuktikan RCE.
Bukti B — Respons HTTP dengan cookie sesi yang anomali
• code>HTTP/1.1 200 OK/code>, dengan data biner dihilangkan.
• code>Server: Apache/2.4.69 (Debian)/code>
• code>X-Powered-By: PHP/8.4.26/code>
• code>Set-Cookie: PHPSESSID=[data biner dihilangkan]/code>
• Panjang cookie yang dienkode: 2.330.754 byte.
• Nilai hasil dekode URL: 819.200 byte.
Pengukuran dihitung langsung dari {{1}}leak_attempt.resp{{/1}}. Nilai biner sengaja dihilangkan untuk menghindari reproduksi konten proses yang bocor.
Bukti C — bukti pelaksanaan
code>uid=33(www-data) gid=33(www-data) groups=33(www-data)/code>
Isi persis rce_proof_8426.txt, sebagaimana diberikan. Ini mendukung hasil eksekusi yang dilaporkan tetapi bukan transkrip perintah/sesi yang lengkap.

Lampiran D — perbaikan siklus hidup sesi
• code>static inline void php_rinit_session_globals(void)/code>
• code>@@ -121,6 +120,7 @@ static inline void php_rinit_session_globals(void)/code>
• code>* mengenkode ulang sesi selama startup permintaan, sebelum RINIT, saat tidak ada pengguna/code>
• code>/* Berjalan sebelum RINIT: tidak ada kode pengguna yang boleh dipanggil, lihat php_session_unserialize_init() *//code>
• code>/* Ini berjalan sebelum RINIT, jadi kita perlu membersihkan ini lebih awal *//code>
• code>php_rinit_session_globals();/code>
Baris diff sumber yang dipilih dari session.c.diff. Perubahan ini secara eksplisit mereset status global sesi lebih awal daripada RINIT biasa.
3. Mengapa bukti itu penting
Kebocoran memori memberikan jembatan antara crash proses dan rantai eksploitasi. Nilai sesi berukuran tidak normal dengan data biner yang disematkan konsisten dengan runtime yang menafsirkan memori tidak valid sebagai string Zend. Laporan penelitian lebih lanjut menjelaskan ekstraksi alamat kode dan heap dari jendela yang bocor. Bundel bukti berisi respons mentah tetapi bukan skrip mandiri yang membuktikan setiap alamat yang dipulihkan.
Artifact RCE menunjukkan konteks keamanan www-data. Ini tidak membuktikan akses root, kompromi lingkungan produksi, atau portabilitas penuh ke deployment PHP arbitrer. Konfigurasi laboratorium satu worker penting karena urutan permintaan dan afinitas worker memengaruhi mekanisme tersebut.
4. Perbaikan pada siklus hidup yang mendasarinya, bukan hanya gejalanya
Diff sumber yang disediakan untuk commit patch PHP 01a40e89fbfc ("Avoid state corruption via bailout") menunjukkan inisialisasi global sesi yang lebih awal, perubahan pada penanganan OOM alokator, dan logika reset/pembersihan yang lebih luas. Perubahan-perubahan ini bertujuan mencegah state native bertahan dalam keadaan tidak valid setelah permintaan yang terinterupsi. Memperbaiki hanya jalur pengodean cookie tidak dengan sendirinya akan memulihkan jaminan kepemilikan memori ini.
Laporan penelitian menyatakan bahwa upaya terhadap PHP 8.4.27 tidak menghasilkan cookie abnormal, crash, atau bukti RCE dalam empat percobaan. Transkrip versi yang telah ditambal yang sebenarnya tidak ada dalam bundel ini, sehingga perbandingan itu dilaporkan sebagai observasi peneliti, bukan sebagai bukti yang dapat diperiksa secara independen.
5. Tindakan defensif
• Segera.Tingkatkan lini PHP yang didukung dan terdampak ke rilis yang telah diperbaiki masalah keamanannya, dan gunakan advisori vendor untuk mengonfirmasi status paket secara tepat.
• Pengurangan eksposur. Pertimbangkan untuk membatasi input multipart dan menonaktifkan code>session.upload_progress/code> jika tidak digunakan; ini tidak menggantikan patch.
• Deteksi.Tinjau crash selama inisialisasi permintaan, 500 tak terduga, dan code>Set-Cookie/code> header respons yang terlalu besar.
• Jaminan. Uji ulang dengan kumpulan worker yang representatif untuk produksi dan validasi bahwa status sesi lama tidak dapat bertahan di seluruh permintaan.
6. Metodologi penelitian OrcaCyber
Tugas penelitian yang berharga bukan hanya menemukan operasi tidak aman secara individual; melainkan melacak pelanggaran invarian secara menyeluruh di sepanjang penguraian permintaan, perilaku pengalokasi, global native persisten, serialisasi, dan shutdown. OrcaCyber Zero dan OrcaCyber Ultra digunakan untuk membuat PoC dalam investigasi ini, sebagaimana diatribusikan oleh tim peneliti. Kumpulan artefak publik mendukung reproduksi teknis, tetapi tidak menyediakan jejak eksekusi per model atau membuktikan penemuan kerentanan secara otonom.
Tangga bukti: hipotesis sumber → pemicu yang dapat dijangkau → kegagalan runtime → pengungkapan informasi → bukti eksekusi → regresi versi perbaikan. Urutan ini menciptakan keyakinan yang lebih kuat daripada deskripsi kerentanan atau hasil yang hanya berupa crash. Ini juga mendorong pelaporan ketidakpastian secara jelas ketika file sumber atau log eksekusi mentah tidak tersedia.
7. Ruang lingkup dan keterbatasan
Publikasi ini menjelaskan lab Docker terisolasi yang terotorisasi. Eksploitasi ini didasarkan pada penelitian PHP2Shell yang telah dipublikasikan sebelumnya, dengan adaptasi lokal yang didokumentasikan dalam laporan yang disertakan. Bundel ini mencakup skrip, diff, byte respons, log, dan output proof, namun tidak menyertakan checkout eksploit upstream secara lengkap, tangkapan layar native, dan transkrip regresi patch mentah yang lengkap. Tidak ada klaim kompromi korban atau pelanggan di dunia nyata.
Sumber dan artefak
Utama: yang disediakan php2shell-report-bundle.tar.gz (REPORT.md; report-CVE-2026-109618.md; report-CVE-2026-109619.md; crash_evidence.log; leak_attempt.resp; rce_proof_8426.txt; diff sumber PHP). Konteks publik: advisori keamanan PHP GHSA-w8hw-w9fx-j79w dan GHSA-6wmf-4rv5-p3rp; pengumuman rilis keamanan PHP. Atribusi eksploit publik: 9bie/php2shell-bypass-aslr-exp. Repositori riset: orcacyber-php2shell-research.

Poin utama: satu permintaan gagal; sebuah pointer tetap bertahan; permintaan berikutnya memercayainya. Bagian tersulit dalam memahami kerentanan ini adalah membuktikan hubungan tersebut dengan bukti yang dapat diamati.
Dibandingkan dalam artikel ini1
Terdeteksi dari artikel ini
