flawopen.com/Teardowns/cve-2023-2640-ubuntu-overlayfs-privilege-escalation
CVE-2023-2640: LPE OverlayFS Ubuntu
CVE-2023-2640 melewati pemeriksaan izin OverlayFS pada kernel Ubuntu tertentu. Periksa varian kernel dan pasang perbaikan vendor.
Bayangkan sebuah gedung dengan petugas yang memeriksa apakah seseorang boleh membubuhkan stempel resmi pada dokumen. Jalur pintas lokal semula hanya melewati pemeriksaan untuk label pemeliharaan gedung. Perubahan berikutnya mengarahkan semua permintaan stempel melalui jalur itu, termasuk stempel keamanan yang dibatasi. Perbaikan memulihkan pemeriksaan izin normal di user namespace filesystem yang dipasang.
Konsep Kunci & Istilah
OverlayFS- OverlayFS adalah filesystem gabungan Linux yang menampilkan file dari lapisan bawah dan menulis perubahan ke lapisan atas.
Extended attribute (xattr)- Atribut extended (xattr) adalah metadata yang melekat pada objek filesystem. Modul keamanan Linux dan file capability memakai namespace xattr tertentu.
ovl_do_setxattr()- Helper OverlayFS untuk menulis xattr pada objek di lapisan atas. Wrapper terdampak terlalu luas memakai fungsi VFS tanpa pemeriksaan izin.
Copy-up- Operasi OverlayFS yang membuat salinan di lapisan atas ketika penulisan memerlukan salinan objek bawah yang dapat diubah.
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-863
Analisis Akar Masalah (Root Cause)
Catatan CVE Ubuntu menyatakan konfigurasi rentan memerlukan commit upstream c914c0e27eb0 dan patch SAUCE Ubuntu “Skip permission checking for trusted.overlayfs.* xattrs”. Patch tersebut mengubah wrapper xattr OverlayFS agar memakai helper VFS _noperm, dengan tujuan melewati pemeriksaan hanya untuk metadata internal trusted.overlayfs.*. Setelah perubahan wrapper upstream, helper itu juga digunakan untuk xattr lain. Akibatnya, pengguna lokal tanpa hak istimewa dapat menetapkan atribut extended istimewa pada file yang dipasang dan membawanya ke file upper tanpa pemeriksaan yang semestinya. Perbaikan Canonical membatalkan jalur tanpa pemeriksaan yang terlalu luas dan memanggil vfs_setxattr() dengan user namespace dari upper mount. Ini adalah eskalasi hak akses lokal khusus kernel Ubuntu; paparan bergantung pada rilis, varian kernel, serta kebijakan namespace dan mount.
Alur Serangan Langkah demi Langkah
Konfigurasi kernel Ubuntu terdampak
Kernel harus memuat c914c0e27eb0 dan patch SAUCE Ubuntu yang melewati pemeriksaan xattr trusted.overlayfs.*. Nomor versi upstream saja tidak membuktikan paparan.
Pengguna lokal mencapai jalur xattr
Pengguna lokal tanpa hak istimewa harus dapat memakai jalur OverlayFS terdampak sesuai kebijakan namespace dan mount host. Ubuntu menggolongkannya sebagai serangan lokal.
Bypass izin berlaku pada xattr lain
Wrapper yang diubah mengarahkan pembaruan xattr ke helper _noperm untuk metadata internal OverlayFS. Perubahan upstream membuat xattr lain juga berpotensi melewati pemeriksaan yang semestinya.
Atribut istimewa mencapai objek upper
Ubuntu menyebut atribut extended istimewa dapat dipasang pada file dan disalin ke file upper tanpa pemeriksaan wajib, sehingga berpotensi memungkinkan eskalasi lokal. Kondisi tiap kernel dan container berbeda.
Kode Sumber: Rentan vs Aman
Jalur SAUCE terdampak memanggil __vfs_setxattr_noperm() untuk semua xattr setelah perubahan upstream memperluas cakupannya. Perbaikan memakai vfs_setxattr() dengan user namespace upper mount sehingga pemeriksaan VFS normal kembali berlaku. Ini cuplikan fokus dari patch Canonical; log debug di sekitarnya dihilangkan.
Cuplikan sumber: fs/overlayfs/overlayfs.h
/* Konteks patch kanonis Ubuntu sebelum perubahan SAUCE dibatalkan. */
static inline int ovl_do_setxattr(struct ovl_fs *ofs, struct dentry *dentry,
const char *name, const void *value,
size_t size, int flags)
{
struct inode *inode = dentry->d_inode;
int err;
inode_lock(inode);
err = __vfs_setxattr_noperm(&init_user_ns, dentry, name,
value, size, flags);
inode_unlock(inode);
return err;
}
/* Perbaikan kanonis Ubuntu: pulihkan wrapper VFS yang memeriksa izin. */
static inline int ovl_do_setxattr(struct ovl_fs *ofs, struct dentry *dentry,
const char *name, const void *value,
size_t size, int flags)
{
int err = vfs_setxattr(ovl_upper_mnt_userns(ofs), dentry, name,
value, size, flags);
return err;
}
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Periksa pelacak CVE Ubuntu untuk rilis, varian kernel, dan paket yang tepat; masalah ini memerlukan kombinasi perubahan Ubuntu dan upstream tertentu.
- ✓Pasang paket kernel perbaikan untuk rilis dan varian Ubuntu terdampak, reboot, lalu pastikan kernel yang sedang berjalan.
- ✓Jika pembaruan tertunda dan beban kerja memungkinkan, tinjau mitigasi sementara Ubuntu untuk membatasi pembuatan user namespace tanpa hak istimewa; uji dampaknya pada aplikasi dan container.
- ✓Pada wrapper xattr OverlayFS, gunakan API VFS dengan pemeriksaan izin dan user namespace mount yang tepat untuk atribut yang dikendalikan pengguna; batasi helper tanpa pemeriksaan pada metadata internal yang benar-benar dibenarkan.