Injection di PHPUnit Newline Kecil Jadi RCE

Halo semua, kembali lagi di Hight Hack. Kali ini kita akan membedah celah keamanan yang cukup serius pada PHPUnit, framework testing populer di ekosistem PHP. Kerentanan dengan ID GHSA-qrr6-mg7r-m243 ini memungkinkan terjadinya argument injection melalui karakter newline yang bisa berujung pada remote code execution.

Injection di PHPUnit Newline Kecil Jadi RCE


Jika kamu seorang developer atau praktisi bug bounty, artikel ini akan membantu memahami bagaimana celah ini bekerja dan bagaimana cara mengamankannya.

Apa Masalahnya?

Secara teknis, PHPUnit sering meneruskan konfigurasi PHP (INI settings) ke child process saat menjalankan testing terisolasi menggunakan argumen command line seperti -d name=value.

Masalah muncul karena tidak adanya netralisasi terhadap karakter khusus dalam nilai INI tersebut. Karakter paling berbahaya dalam kasus ini adalah newline (\n).

Kenapa Newline Berbahaya?

Dalam parser PHP INI, newline dianggap sebagai pemisah antar direktif. Jika penyerang menyisipkan newline dalam satu nilai, mereka bisa menyuntikkan konfigurasi tambahan yang tidak diinginkan.

Dampak: Remote Code Execution

Dengan teknik ini, penyerang bisa mengontrol perilaku PHP di child process. Beberapa direktif berbahaya yang bisa dimanfaatkan antara lain:

  • auto_prepend_file: menjalankan file sebelum script utama
  • disable_functions: mematikan fungsi keamanan
  • open_basedir: bypass pembatasan akses file

Skenario Serangan (Poisoned Pipeline Execution)

Salah satu skenario realistis adalah melalui CI/CD pipeline:

  1. Penyerang membuat pull request ke repository
  2. Memodifikasi file phpunit.xml
  3. Menyisipkan payload berikut
<ini name="display_errors" value="On&#10;auto_prepend_file=/tmp/malicious.php"/>

Karakter merupakan representasi newline.

  1. Ketika CI menjalankan PHPUnit, file berbahaya ikut dieksekusi

Serangan ini sering tidak terlihat saat code review biasa.

Versi yang Terdampak

  • <= 12.5.21
  • <= 13.1.5

Disarankan segera update ke versi 12.5.22 atau 13.1.6.

Perbaikan dari PHPUnit

Tim PHPUnit telah memperbaiki masalah ini dengan dua pendekatan:

  1. Menolak karakter newline dalam nilai INI
  2. Melakukan quoting dan escaping pada karakter khusus

Langkah Mitigasi

  • Audit file phpunit.xml dan phpunit.xml.dist
  • Jalankan CI dalam container ephemeral
  • Batasi akses workflow CI/CD dengan review manual

Penutup

Celah ini menunjukkan bahwa karakter sederhana seperti newline bisa berdampak besar jika tidak ditangani dengan benar. Selalu update dependency dan waspada terhadap perubahan konfigurasi.

Stay safe dan tetap eksplorasi dunia security.

Referensi

Kritik dan Saran

Lebih baru Lebih lama

نموذج الاتصال