Pengelola Composer, manajer dependensi utama untuk PHP, merilis versi 2.11.0 dan 2.2.31 (LTS) pada 29 Oktober 2026. Kedua rilis menutup dua celah yang dilaporkan lewat advisori GitHub: path traversal dengan skor CVSS 7,1 dan kebocoran kredensial dengan skor CVSS 5,3. Advisori resmi mencatat keduanya “No known CVE”, jadi pembaca akan menemukannya dengan kode GHSA, bukan nomor CVE.
Dua celah, dua risiko berbeda
Celah pertama, GHSA-c968-33g3-wh7p, muncul karena Composer memvalidasi nama paket dari composer.lock dan metadata repositori, tetapi memercayai nama di berkas lokal vendor/composer/installed.json. Nama paket yang disusun dengan segmen “..” membuat perintah composer install bisa menghapus direktori di luar vendor/, dan composer reinstall bisa menulis berkas ke lokasi itu dengan hak akses pengguna yang menjalankannya. Advisori menegaskan serangan ini lokal: penyerang harus bisa menulis ke berkas tersebut, dan menerbitkan paket saja tidak memicunya. Paparan terbesar ada di pipeline CI yang memulihkan vendor/ dari cache bersama yang bisa ditulis job tak tepercaya, misalnya dari pull request fork.
Celah kedua, GHSA-fm2w-xgf2-f9fh, menyangkut repositori bertipe composer yang memakai header HTTP sebaris (options.http.header) di config.json global. Composer menyalin header itu ke composer.lock, dan berkas kunci biasanya ikut masuk ke Git. Token API atau kredensial di header lalu bisa terbaca siapa pun yang dapat membuka repositori. Kredensial yang disimpan di auth.json atau variabel lingkungan COMPOSER_AUTH tidak terdampak.
Versi terdampak untuk keduanya adalah semua rilis dari 1.0 sebelum 2.2.31, serta rilis 2.3.0 sebelum 2.11.0. Blog Packagist juga mencatat bahwa 2.11.0 menolak sertifikat perantara eMudhra yang dicabut, dan menambal penanganan jalur bin serta pemeriksaan secure-http.
Langkah yang perlu diambil pembaca
Jalankan composer self-update ke 2.11.0, atau pasang 2.2.31 bila proyek Anda masih di jalur LTS. Setelah itu jalankan composer update –lock agar header yang sudah telanjur tertulis hilang dari composer.lock. Periksa riwayat Git untuk entri header di bawah transport-options. Bila ada token yang pernah tercatat, cabut dan buat ulang, karena menghapusnya dari commit terbaru tidak membersihkan riwayat. Pindahkan kredensial sebaris ke auth.json atau COMPOSER_AUTH.
Untuk CI, jangan biarkan job dari fork menulis ke cache vendor/ yang dipakai job lain. Perhatikan juga catatan upgrade Packagist: fallback ke source untuk unduhan dist yang gagal sudah dihapus, dan fitur cooldown yang bersifat opsional bisa menunda perbaikan keamanan kecuali Anda memakai –no-cooldown. Risiko rantai pasok di ekosistem paket bukan hal baru, seperti terlihat pada worm npm testmetest yang menyusup ke 42 repositori GitHub.
Sumber: advisori GHSA-c968-33g3-wh7p, advisori GHSA-fm2w-xgf2-f9fh, dan Packagist Blog. Gambar: Packagist Blog.
