Kembali
2026/11/05
Celah Rails Active Storage: periksa tiga pengaturan sebelum 7 November
Celah CVSS 9.8 di Rails Active Storage: satu unggahan gambar bisa menulis file di server. Periksa tiga pengaturan, upgrade, dan ingat tenggat Rails 8.0.
Hampir setiap aplikasi Rails yang menerima foto profil, dokumen, atau foto produk mengirimkan file tersebut melalui Active Storage. Pada 4 November 2026, tim Rails menerbitkan advisori kritis untuk jalur unggahan tersebut. Pada beberapa konfigurasi yang umum, satu unggahan yang dirancang khusus dapat memungkinkan penyerang tanpa autentikasi menulis file di server Anda.
Apakah Anda terdampak bergantung pada tiga pengaturan yang mudah diperiksa. Artikel ini menjelaskan celah tersebut, menunjukkan cara memeriksa setiap pengaturan, dan merangkum langkah yang perlu diambil jika Anda belum bisa melakukan upgrade hari ini. Hal ini paling penting bagi tim yang memakai Rails 8.0, karena dukungan keamanan untuk branch tersebut berakhir pada 7 November 2026.
Poin penting
- GHSA-f3w6-w445-fwh9 memiliki skor CVSS 9.8 dan belum memiliki pengenal CVE saat diterbitkan.
- Anda hanya terdampak jika ketiga hal ini terpenuhi: Active Storage menggunakan ImageMagick, kebijakan ImageMagick tidak memblokir coder berbahaya, dan pengguna yang tidak tepercaya dapat mengunggah file.
- Perbaikannya adalah Rails 8.1.4.1 atau 8.0.5.2, bersama mini_magick 5.1 atau yang lebih baru.
- Rails 8.0 hanya menerima perbaikan keamanan hingga 7 November 2026, dan branch yang lebih lama tidak mendapatkan perbaikan sama sekali.
- Jika Anda menggunakan layanan penyimpanan Disk, rotasi juga setiap secret yang dapat dibaca oleh aplikasi.
Apa celahnya
Saat sebuah file dilampirkan, Active Storage menjalankan analyzer untuk membaca informasi dasar seperti dimensi gambar. Dengan prosesor :mini_magick, analyzer tersebut menyerahkan file ke ImageMagick. ImageMagick mendukung banyak format melalui modul yang disebut coder, dan sebagian di antaranya sangat kuat: commit perbaikan menunjukkan SVG yang diunggah mencapai coder MSL, format skrip yang dapat membaca dan menulis file yang disebutkan dalam skripnya. Active Storage tidak membatasi coder mana yang dapat dijangkau oleh sebuah unggahan, sehingga kebijakan ImageMagick di server menjadi satu-satunya perlindungan.
Dua hal membuat celah ini serius. Pertama, analyzer berjalan saat file dilampirkan, sehingga tidak diperlukan variant, preview, atau pemanggilan analyze secara eksplisit: menerima unggahan saja sudah cukup. Kedua, aplikasi yang menyimpan file dengan layanan Disk juga dapat dipaksa membaca file apa pun yang dapat dibaca oleh proses aplikasi. Termasuk secret_key_base dan kredensial untuk sistem lain, yang dapat berujung pada eksekusi kode jarak jauh atau pergerakan lateral.
Advisori ini dilaporkan oleh RyotaK dari GMO Flatt Security melalui HackerOne. Tim Rails mencatat bahwa satu rantai serangan telah dilaporkan dan mereka tidak berasumsi bahwa itu satu-satunya. Advisori tidak menyebutkan apakah celah ini sudah dieksploitasi.
Uji paparan tiga kondisi
Anda hanya terdampak jika ketiga kondisi terpenuhi. Periksa secara berurutan; jika salah satunya tidak terpenuhi, rantai serangan ini tidak berlaku, meskipun upgrade tetap merupakan langkah yang tepat.
| Kondisi | Tempat memeriksa | Terdampak jika |
|---|---|---|
| 1. Prosesor variant | config.active_storage.variant_processor dan load_defaults | Nilainya :mini_magick (default untuk load_defaults 6.1 atau sebelumnya) |
| 2. Kebijakan ImageMagick | policy.xml di server | Tidak memblokir MSL, coder Ghostscript, dan delegate gs (kebijakan bawaan Debian dan Ubuntu tidak memblokirnya) |
| 3. Siapa yang dapat mengunggah | Formulir unggahan dan API Anda | Pengguna yang tidak tepercaya dapat melampirkan file |
1. Prosesor mana yang digunakan Active Storage?
Cari di konfigurasi Anda dan tanyakan langsung ke aplikasi yang sedang berjalan:
grep -rn "variant_processor\|load_defaults" config/
bin/rails runner 'p Rails.application.config.active_storage.variant_processor'
Sejak Rails 7.0 default-nya adalah :vips, tetapi aplikasi yang di-upgrade dari versi lama sering kali masih memuat default lama atau menetapkan :mini_magick secara eksplisit. Periksa juga bundle info mini_magick: jika gem tersebut ada di bundle Anda, cari tahu di mana ia digunakan.
2. Apakah kebijakan ImageMagick Anda memblokir coder berbahaya?
Tampilkan kebijakan yang benar-benar dimuat ImageMagick di setiap server aplikasi dan worker:
magick -list policy # ImageMagick 7
convert -list policy # ImageMagick 6
Cari aturan dengan rights="none" untuk coder MSL, coder PostScript dan PDF, serta delegate gs. Jika Anda memakai kebijakan paket Debian atau Ubuntu tanpa perubahan, anggap semuanya tidak diblokir. Ingat bahwa image container dan host worker mungkin menjalankan build ImageMagick yang berbeda dari server web Anda.
3. Dapatkah pengguna yang tidak tepercaya mengunggah file?
Daftarkan setiap titik tempat file mencapai attach, has_one_attached, atau has_many_attached, termasuk API, direct upload, dan alat admin yang mengimpor file dari luar. Pendaftaran publik dengan kolom avatar termasuk tidak tepercaya.
Tips: Sekaligus periksa layanan penyimpanan yang Anda gunakan. Jika config/storage.yml mendefinisikan layanan produksi Anda dengan service: Disk, dampak pembacaan file berlaku bagi Anda, dan secret harus dirotasi setelah Anda menerapkan patch.
Perbaikan: jalur upgrade per branch
Rilis yang sudah diperbaiki adalah Rails 8.1.4.1 dan Rails 8.0.5.2. Bersama-sama keduanya memperbaiki 21 masalah keamanan, sehingga layak dipasang meskipun Anda tidak terdampak celah yang satu ini.
| Branch Anda | Yang perlu dilakukan |
|---|---|
| 8.1 | Upgrade ke 8.1.4.1 |
| 8.0 | Upgrade ke 8.0.5.2 sekarang, lalu rencanakan perpindahan ke 8.1: dukungan keamanan untuk 8.0 berakhir pada 7 November 2026 |
| 7.2 dan yang lebih lama | Tidak akan ada perbaikan yang dirilis. Terapkan solusi sementara berbasis kebijakan di bawah ini dan upgrade ke 8.0 atau yang lebih baru |
Aplikasi yang menggunakan :mini_magick juga memerlukan mini_magick 5.1 atau yang lebih baru. Dengan versi yang lebih lama, rilis perbaikan akan memunculkan error saat boot, jadi perbarui kedua gem bersamaan dan uji proses boot di staging:
bundle update rails mini_magick
bundle info activestorage
bundle info mini_magick
Rilis perbaikan menyertakan kebijakan ImageMagick sendiri, tetapi pastikan kebijakan itu benar-benar sampai ke ImageMagick. Kebijakan tersebut tidak berlaku jika aplikasi Anda mengganti MiniMagick.cli_env setelah boot, menggunakan MiniMagick.cli_prefix, atau memasang MiniMagick::Shell sendiri; aplikasi seperti itu memerlukan aturan di kebijakan sistem. GraphicsMagick sama sekali tidak membaca kebijakan ImageMagick. Kebijakan bawaan rilis juga ditambahkan ke policy.xml di server Anda alih-alih menggantikannya, sehingga aturan allow di sana, termasuk wildcard, akan mengesampingkan pemblokiran.
Rilis yang sama juga memperbaiki celah kedua, GHSA-v924-7rp8-4mxh (CVSS 8.8). Active Storage meneruskan unggahan ke ImageMagick dan FFmpeg dengan nama sementara yang mempertahankan ekstensi file aslinya, sehingga penyerang yang mengendalikan nama file dan tipe konten yang dideklarasikan dapat memengaruhi decoder mana yang dijalankan. Solusi sementara dari Rails untuk celah ini hanya mencakup FFmpeg, satu alasan lagi untuk melakukan upgrade alih-alih mengandalkan solusi sementara.
Sebuah pola, bukan kejadian tunggal
Pada Juli 2026, CVE-2026-66066 merupakan celah kritis Active Storage tersendiri yang memengaruhi aplikasi yang menggunakan libvips. Aplikasi yang memakai ImageMagick tidak terpapar jalur tersebut, tetapi terpapar jalur yang ini. Dua celah kritis dalam empat bulan, melalui kedua library gambar yang didukung, menunjukkan pelajaran yang sama: pemrosesan gambar adalah permukaan serangan yang besar, dan Active Storage menjalankannya pada file dari orang tak dikenal begitu file tersebut dilampirkan.
Berganti prosesor saja bukanlah perbaikan. Yang melindungi Anda adalah memperlakukan library gambar sebagai bagian dari permukaan serangan Anda: selalu perbarui patch-nya seperti framework, batasi dengan kebijakan, dan ketahui host mana yang menjalankannya. Kebijakan ImageMagick khususnya adalah pengaturan server yang mudah terlupakan, karena berada di image sistem operasi, bukan di kode aplikasi Anda.
Jika Anda belum bisa melakukan upgrade segera
Rails juga menerbitkan commit patch untuk 8.1 dan 8.0. Sampai Anda dapat men-deploy rilis yang sudah diperbaiki, jalankan checklist berikut:
- Tambahkan aturan minimum dari advisori ke kebijakan sistem ImageMagick di setiap host yang memproses unggahan (misalnya
/etc/ImageMagick-7/policy.xml). - Pastikan tidak ada aturan allow atau wildcard di file yang sama yang mengesampingkannya, lalu konfirmasi dengan
magick -list policy. - Jika Anda merender PDF atau PostScript melalui ImageMagick, izinkan kembali delegate
gsdan hanya coder yang Anda perlukan, dengan menerima bahwa sebagian risiko tetap ada. - Batasi unggahan: untuk sementara batasi siapa yang dapat melampirkan file, atau hentikan sementara unggahan anonim.
- Jika Anda menggunakan layanan Disk, rencanakan rotasi
secret_key_base, master key dan isiconfig/credentials.yml.enc, kredensial penyimpanan dan database, serta token pihak ketiga. Jangan simpan secret yang telah terekspos sebagai cadangan.
Aturan minimum yang diterbitkan dalam advisori adalah:
<policy domain="coder" rights="none" pattern="MSL"/>
<policy domain="delegate" rights="none" pattern="gs"/>
<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,EPS2,EPS3,EPI,EPSF,EPSI,EPT,EPT2,EPT3,PDF,AI,EPDF,PDFA,POCKETMOD,XPS,PCL}"/>
Tips: Tanamkan kebijakan ini ke dalam image dasar server atau container Anda alih-alih mengedit host secara manual, agar worker baru dan container yang dibangun ulang juga mendapatkannya.
Baca detail lengkapnya di advisori keamanan Rails.
Bagaimana LOGIQ dapat membantu
LOGIQ mendukung tim yang menjalankan stack open source di Linux, mulai dari image sistem operasi hingga runtime aplikasi. Jika Anda membutuhkan bantuan untuk memeriksa kebijakan ImageMagick di seluruh server Anda, atau merencanakan perpindahan dari branch yang akan berakhir masa dukungannya, hubungi tim kami.
Global
Japan
Korea
China
Taiwan
Vietnam
Thailand
Portugal
Spain
France
Germany
Egypt
Russia