Runc CVE-2019-5736 Kerentanan dalam Host

Catatan perev. : Tadi malam, Aleksa Sarai, seorang insinyur kontainer senior di SUSE Linux, mengatakan kepada milis oss-sec tentang kerentanan keamanan runc / LXC kritis yang dapat memungkinkan penyerang dengan akses ke wadah terisolasi untuk mendapatkan hak akses root pada sistem host. Karena masalah itu diidentifikasi dalam implementasi referensi runtime kontainer - runc - itu mempengaruhi banyak sistem kontainer termasuk Docker / Moby, Podman , cri-o (dan Kubernetes sendiri). Detailnya disajikan di bawah ini dalam bentuk menterjemahkan pesan insinyur ke milis.


Saya adalah salah satu pengelola runc (runtime kontainer yang mendasarinya digunakan oleh Docker, cri-o, containerd, Kubernetes, dll.). Baru-baru ini diketahui tentang kerentanan yang kami periksa dan tambal.

Peneliti yang menemukan kerentanan:

  • Adam Iwaniuk;
  • Borys PopΕ‚awski.

Selain itu, Aleksa Sarai (yaitu, saya) menemukan bahwa LXC juga dipengaruhi oleh versi yang lebih canggih dari kerentanan ini.

Ulasan singkat


Kerentanan memungkinkan wadah jahat (dengan interaksi pengguna minimal) untuk menimpa runc host binary dan dengan demikian dapat mengeksekusi kode dengan hak akses root pada host. Tingkat interaksi pengguna sedemikian rupa sehingga memungkinkan Anda untuk menjalankan perintah apa pun (tidak masalah jika penyerang mengontrol perintah) dengan hak akses root di dalam wadah dalam konteks berikut:

  • Membuat wadah baru dari gambar yang dikendalikan oleh penyerang;
  • Koneksi ( docker exec ) ke wadah yang sudah ada dimana penyerang sebelumnya memiliki akses tulis.

Kerentanan ini tidak diblokir oleh kebijakan AppArmor default atau kebijakan standar SELinux di Fedora * (karena proses wadah terlihat seperti mereka mulai dengan container_runtime_t ). Namun, itu diblokir oleh penggunaan ruang nama pengguna yang benar (di mana akar host tidak memetakan ke ruang nama pengguna wadah).

Vektor CVSSv3 (dengan peringkat 7.2) adalah sebagai berikut:

AV:L/AC:H/PR:L/UI:R/S:C/C:N/I:H/A:H

Masalah ini diberikan pada CVE-2019-5736 .

* Masalahnya hanya berlaku untuk paket moby-engine di Fedora. Paket docker , seperti podman , dilindungi dari operasinya, karena mulai proses container_t sebagai container_t .

Tambalan


Saya menerapkan patch yang sesuai untuk memperbaiki masalah ( 0001-nsenter-clone-proc-self-exe-to-avoid-exposing-host-b.patch ). Ini didasarkan pada cabang HEAD , meskipun kode di libcontainer/nsenter/ perubahan sangat jarang sehingga tambalan kemungkinan besar berlaku untuk hampir semua versi lama dari basis kode runc yang Anda hadapi.

Harap dicatat bahwa tambalan yang saya dorong ke cabang master runc adalah versi modifikasi dari tambalan ini, meskipun mereka secara fungsional identik (jika Anda belum menambal file Anda dengan tambalan yang dilampirkan, sebaiknya gunakan versi upstream).

Kode Eksploitasi Sekunder


Beberapa vendor meminta kode exploit untuk memastikan tambalan menyelesaikan masalah. Karena masalahnya sangat serius (terutama untuk vendor cloud publik), kami memutuskan untuk memberikan kode seperti itu. Eksploitasi yang saya tulis lebih umum daripada kode asli yang disediakan oleh para peneliti dan bekerja untuk LXC (tidak memerlukan modifikasi yang kuat untuk dapat diterapkan ke lingkungan rentan yang dapat dieksekusi lainnya). Rincian tentang cara menggunakan kode eksploitasi disediakan di README .

Sesuai dengan aturan OpenWall, kode exploit akan dirilis secara publik 7 hari setelah CRD (mis., 18 Februari 2019). Jika Anda memiliki runtime kontainer, pastikan tidak terpengaruh oleh kerentanan ini.

Dampak pada proyek lain


Perlu dicatat bahwa selama penyelidikan lebih lanjut dari masalah, saya menemukan bahwa LXC memiliki kerentanan yang sama, dan mereka sudah mendorong patch serupa dari pengembangan bersama kami. LXC sedikit lebih sulit untuk dioperasikan, tetapi masalahnya sendiri sama.

Sebuah diskusi dengan perwakilan systemd-nspawn mengarah pada kesimpulan bahwa mereka tidak rentan (karena mereka memiliki metode berbeda dalam menghubungkan ke wadah untuk LXC dan runc).

Perwakilan dari Apache Mesos juga menghubungi saya, melaporkan bahwa mereka juga rentan (saya pikir mereka hanya menggunakan kode exploit yang akan dipublikasikan). Sangat mungkin sebagian besar runtime kontainer rentan jika mereka sebelumnya tidak mengambil langkah yang sangat tidak biasa untuk mengurangi dampak potensial mereka.

Berita lainnya


Kami telah mengonfigurasi distribusi pengumuman untuk kerentanan keamanan di masa mendatang: proses bergabungnya dijelaskan di sini (didasarkan pada milis Kubernetes yang mengumumkan keamanan). Silakan bergabung jika Anda mendistribusikan runtime untuk wadah yang bergantung pada runc (atau proyek OCI lainnya).

PS Dari penerjemah


Masalah CVE-2019-5736 dalam pelacak distribusi Linux populer:


... dan posting blog Kubernetes (lihat bagian β€œApa yang Harus Saya Lakukan?”).

Source: https://habr.com/ru/post/id439964/


All Articles