Composer 2.11.0 dan 2.2.31 Tambal Dua Celah: Nama Paket di installed.json Bisa Keluar dari Folder vendor, Token API Bisa Tertulis ke composer.lock

Ilustrasi Composer, manajer dependensi PHP, terkait dua celah keamanan yang ditambal

Pengelola Composer, manajer dependensi untuk PHP, merilis versi 2.11.0 dan 2.2.31 (LTS) untuk menutup dua kelemahan keamanan. Advisori di GitHub terbit pada 29 Oktober 2026. Keduanya belum punya nomor CVE, dan advisori tidak menyebut adanya eksploitasi di dunia nyata.

Dua celah yang ditutup

Celah pertama, GHSA-c968-33g3-wh7p, berskor CVSS 7,1 (tinggi). Composer sudah memeriksa nama paket dari composer.lock dan metadata repositori, tetapi tidak memeriksa nama yang tercatat di berkas lokal vendor/composer/installed.json. Nama yang berisi segmen “..” bisa membuat perintah install menghapus direktori di luar folder vendor, dan perintah reinstall menulis berkas di sana, dengan hak akses pengguna yang menjalankan Composer. Penyerang harus lebih dulu bisa menulis ke installed.json di mesin itu, sehingga celah ini tidak bisa dipicu dari jarak jauh atau lewat penerbitan paket. Risiko terbesar ada di pipeline CI yang memulihkan folder vendor dari cache bersama yang bisa ditulis job tak tepercaya, misalnya dari pull request fork. Peneliti euriconicacio melaporkan temuan ini.

Celah kedua, GHSA-fm2w-xgf2-f9fh, berskor CVSS 5,3 (sedang). Header HTTP yang diatur pada repositori bertipe composer lewat opsi options.http.header disalin ke composer.lock, di bagian transport-options, untuk setiap paket yang diunduh. Header semacam itu sering memuat token API, dan composer.lock biasanya ikut di-commit. Siapa pun yang bisa membaca berkas itu bisa melihat tokennya. Pengguna paling berisiko bila header tersebut ditulis di konfigurasi global, bukan di composer.json proyek. Kredensial di auth.json atau variabel lingkungan COMPOSER_AUTH tidak terdampak. Pelapornya adalah Saku0512.

Versi terdampak dan versi perbaikan

Kedua celah mengenai Composer 1.0 sampai sebelum 2.2.31, dan 2.3.0 sampai sebelum 2.11.0. Perbaikan tersedia di 2.11.0 dan 2.2.31 (LTS). Untuk celah pertama, Composer kini memvalidasi paket terpasang sama ketatnya dengan paket di lock file, dan membatalkan operasi sebelum apa pun dijalankan bila menemukan nama tidak valid.

Langkah yang perlu diambil

Perbarui Composer ke 2.11.0, atau ke 2.2.31 bila Anda masih di jalur LTS. Setelah itu jalankan perintah composer update –lock supaya header lama terhapus dari composer.lock, lalu periksa riwayat Git untuk entri header di bagian transport-options. Token yang pernah tercatat harus dicabut dan diganti, karena menghapusnya dari commit terbaru tidak menghapusnya dari riwayat. Pindahkan kredensial inline ke auth.json atau COMPOSER_AUTH. Tim yang memakai CI sebaiknya berhenti membagikan folder vendor lewat cache atau artefak yang bisa ditulis job tak tepercaya. Pola serupa terlihat pada kasus 26.400 kredensial aktif di repositori Gitee: kunci yang sempat tersimpan di tempat yang bisa dibaca orang lain perlu diperlakukan sebagai bocor.

Sumber: advisori GHSA-c968-33g3-wh7p, advisori GHSA-fm2w-xgf2-f9fh, dan Daily CyberSecurity. Gambar: Daily CyberSecurity.