Benarkah tarball dapat mengubah tempat file diekstraksi tanpa memperhatikan perintah yang digunakan untuk mengekstraknya?

27

Saya memiliki rekan kerja yang mengatakan Anda harus berhati-hati mengekstraksi tarbal karena mereka dapat membuat perubahan yang tidak Anda ketahui. Saya selalu berpikir tarball hanyalah hierarki file terkompresi, jadi jika Anda mengekstraknya ke / tmp / example / itu tidak mungkin menyelinap file ke / etc / atau yang seperti itu.

Adam R. Gray
sumber
1
Lingkungan Sistem Operasi apa yang Anda perhatikan? GNU / Linux's tar memiliki -Popsi yang memengaruhi perilakunya dalam hal ini.
Jeff Schaller
1
Saya kira CentOS dalam hal ini, tetapi saya ingin tahu apa yang harus saya ketahui.
Adam R. Gray
1
Untuk waktu yang lebih lama, tar GNU bisa dibodohi dengan cara yang memungkinkan untuk membuatnya misalnya menghapus /etc/passwdjika dijalankan sebagai root. Sejak beberapa saat, saya percaya itu gtarmemberikan keamanan yang sama seperti yang Anda dapatkan star.
schily

Jawaban:

41

Utilitas tar yang berbeda berperilaku berbeda dalam hal ini, jadi ada baiknya berhati-hati. Untuk file tar yang tidak Anda buat, selalu daftarkan daftar isi sebelum mengekstraknya.

Solaris tar :

File-file yang disebutkan diekstraksi dari tarfile dan ditulis ke direktori yang ditentukan dalam tarfile, relatif terhadap direktori saat ini. Gunakan nama path relatif file dan direktori untuk diekstraksi.

Nama path absolut yang terkandung dalam arsip tar dibongkar menggunakan nama path absolut, yaitu, garis miring ke depan (/) tidak ditanggalkan.

Dalam kasus file tar dengan nama path lengkap (absolut), seperti:

/tmp/real-file
/etc/sneaky-file-here

... jika Anda mengekstrak file seperti itu, Anda akan berakhir dengan kedua file tersebut.

GNU tar :

Secara default, GNU tar menjatuhkan yang terdepan /pada input atau output, dan mengeluh tentang nama file yang mengandung ..komponen. Ada opsi yang mematikan perilaku ini:

--absolute-names

-P

Jangan menghapus garis miring dari nama file, dan mengizinkan nama file yang mengandung ..komponen nama file.

... jika Anda mengekstrak file tar sepenuhnya-pathed menggunakan GNU tar tanpa menggunakan -Popsi, itu akan memberi tahu Anda:

tar: Menghapus terkemuka /dari nama anggota

dan akan mengekstrak file ke dalam subdirektori dari direktori Anda saat ini.

Tar AIX :

mengatakan apa-apa tentang itu, dan berperilaku sebagai tar Solaris - itu akan membuat dan mengekstrak file tar dengan nama path lengkap / absolut.

Tar HP-UX : (referensi online yang lebih baik disambut)

PERINGATAN

Tidak ada cara untuk mengembalikan nama jalur absolut ke posisi relatif.

Tar OpenBSD :

-P

Jangan menghapus garis miring ( /) dari nama path. Standarnya adalah untuk menghapus garis miring.

Ada -Popsi yang diterapkan untuk tarpada macOS, FreeBSD dan NetBSD juga, dengan semantik yang sama, dengan tambahan bahwa tarpada FreeBSD dan macOS akan "menolak untuk mengekstraksi entri arsip yang berisi nama pathnya ..atau yang direktori targetnya akan diubah oleh symlink" tanpa -P.

bintang schilytools :

-/

Jangan menghapus garis miring dari nama file saat mengekstraksi arsip. Arsip tar yang berisi nama path absolut biasanya merupakan ide yang buruk. Dengan implementasi tar lain, mereka mungkin tidak pernah dapat diekstraksi tanpa merusak file yang ada. Kilaukan bintang karena alasan itu, secara default, akan menebas garis miring dari nama file saat dalam mode ekstrak.

Jeff Schaller
sumber
2
Untuk waktu yang lama, tar GNU mengabaikan fakta bahwa nama jalur yang mengandung ..adalah risiko keamanan, jadi gunakan staratau baru saja gtar. Lihat juga starcontoh arsip tar yang menyertakan tarheader kerajinan tangan yang menyebabkan sebagian besar tarimplementasi menghapus file tanpa peringatan.
schily
@schily, menurut kutipan Jeff, bukankah itu berlaku tarpada Solaris, AIX dan HP-UX juga? Jika demikian, mengapa hanya menunjukkan GNU tar, terutama jika (sekali lagi sesuai dengan kutipan di atas), mereka telah berubah menjadi tidak menerima ..? Masalah dengan masukan yang salah tentu saja adalah bug, dan saya kira Anda telah melaporkannya demikian.
ilkkachu
1
Implementasi tar bersejarah tidak memeriksa hal-hal seperti itu. Saya perlu berkomentar karena ada klaim bahwa GNU tar tanpa masalah tanpa menyebutkan rilis. Dan BTW: daftar seperti ini tanpa menyebutkan star(implementasi gratis tertua) harus dilihat tidak lengkap.
schily
@schily, saya mencari halaman manual untuk OS utama (yang mungkin memiliki implementasi tar berbeda); Jika Anda memiliki tautan ke halaman manual online star, saya dengan senang hati akan memasukkannya.
Jeff Schaller
9

Salah satu hal lucu yang terjadi dengan bom tar adalah bahwa mereka mengubah izin direktori saat ini menjadi yang termasuk dalam tarball.

Misalnya, jika tarball menyertakan '.' direktori, dan Anda membukanya di / tmp sebagai root, itu akan merusak sistem Anda dengan membuat / tmp tidak dapat ditulis oleh siapa pun selain root.

mosvy
sumber
Dan jika Anda membukanya /, itu akan mengubah izin direktori root, yang akan memiliki konsekuensi yang tidak terduga (saya ingat mendapatkan "tidak dapat menjalankan / bin / bash" ketika masuk pada konsol, karena /mode 770).
Law29
1
Saya mengalami hal ini dengan perangkat lunak resmi - rilis github dari "rancher-compose" all mengandung "." dalam file tar, misalnya, dan nuke / tmp jika Anda mengekstraknya di sana.
Harald