เป็นความจริงหรือไม่ที่ tarball สามารถเปลี่ยนตำแหน่งที่แตกไฟล์ได้โดยไม่คำนึงถึงคำสั่งที่ใช้เพื่อแตกไฟล์


27

ฉันมีเพื่อนร่วมงานที่บอกว่าคุณต้องระวังการสกัด tarballs เพราะพวกเขาสามารถทำการเปลี่ยนแปลงที่คุณไม่รู้ ฉันคิดเสมอว่า tarball เป็นเพียงลำดับชั้นของไฟล์บีบอัดดังนั้นหากคุณแยกไฟล์เป็น / tmp / example / อาจไม่สามารถแอบดูไฟล์ใน / etc / หรืออะไรทำนองนั้น


1
สภาพแวดล้อมระบบปฏิบัติการใดที่คุณเกี่ยวข้อง tar ของ GNU / Linux มี-Pตัวเลือกที่มีอิทธิพลต่อพฤติกรรมในเรื่องนี้
Jeff Schaller

1
ฉันเดา CentOS ในกรณีนี้ แต่ฉันต้องการรู้ว่าฉันควรรู้อะไร
Adam R. Gray

1
เป็นเวลานานกว่าที่ GNU tar สามารถถูกหลอกได้ในวิธีที่อนุญาตให้ทำการสร้างเช่นลบออก/etc/passwdในกรณีที่รันเป็นรูต เนื่องจากในขณะที่ผมเชื่อว่าจะช่วยให้การรักษาความปลอดภัยเช่นเดียวกับที่คุณได้รับgtar star
Schily

คำตอบ:


41

ยูทิลิตี้ tar ที่แตกต่างกันจะทำงานแตกต่างกันในเรื่องนี้ดังนั้นจึงควรระวัง สำหรับไฟล์ tar ที่คุณไม่ได้สร้างให้แสดงรายการสารบัญทุกครั้งก่อนที่จะแตกไฟล์

Solaris tar :

ไฟล์ที่มีชื่อจะถูกแยกออกจาก tarfile และเขียนไปยังไดเรกทอรีที่ระบุใน tarfile เทียบกับไดเรกทอรีปัจจุบัน ใช้ชื่อพา ธ สัมพัทธ์ของไฟล์และไดเรกทอรีที่จะแยก

ชื่อพา ธ สัมบูรณ์ที่มีอยู่ในไฟล์เก็บถาวร tar จะถูกคลายแพ็กโดยใช้ชื่อพา ธ สัมบูรณ์นั่นคือสแลชนำหน้า (/) จะไม่ถูกแยกออก

ในกรณีของไฟล์ tar ที่มีชื่อพา ธ เต็ม (สัมบูรณ์) เช่น:

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

... หากคุณแยกไฟล์ดังกล่าวคุณจะท้ายด้วยไฟล์ทั้งสอง

tar GNU :

โดยค่าเริ่มต้น GNU tar จะลดการนำหน้า/ลงในอินพุตหรือเอาต์พุตและบ่นเกี่ยวกับชื่อไฟล์ที่มี..ส่วนประกอบ มีตัวเลือกที่จะปิดพฤติกรรมนี้:

--absolute-names

-P

ห้ามดึงเครื่องหมายทับจากชื่อไฟล์และอนุญาตให้ใช้ชื่อไฟล์ที่มี..ส่วนประกอบของชื่อไฟล์

... ถ้าคุณแตกไฟล์ tar แบบเต็มเส้นทางโดยใช้ GNU tar โดยไม่ใช้-Pตัวเลือกมันจะบอกคุณ:

tar: การลบส่วนนำ/จากชื่อสมาชิก

และจะแตกไฟล์ลงในไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันของคุณ

AIX tar :

พูดอะไรเกี่ยวกับมันและทำงานเป็น Solaris tar - มันจะสร้างและแยกไฟล์ tar ด้วยชื่อพา ธ เต็ม / สัมบูรณ์

HP-UX tar : (ยินดีรับการอ้างอิงออนไลน์ได้ดีกว่า)

คำเตือน

ไม่มีวิธีในการกู้คืนชื่อพา ธ สัมบูรณ์ไปยังตำแหน่งสัมพัทธ์

tar OpenBSD :

-P

อย่าดึงเครื่องหมายทับ ( /) จากชื่อพา ธ ค่าเริ่มต้นคือการตัดเครื่องหมายทับนำหน้า

นอกจากนี้-Pตัวเลือกนำมาใช้สำหรับtarบน MacOS, FreeBSD และ NetBSD เป็นอย่างดีกับความหมายเดียวกันด้วยนอกจากนี้ที่tarบนFreeBSDและ MacOS จะ "ปฏิเสธที่จะดึงรายการเก็บที่มี pathnames ประกอบด้วย..หรือมีเป้าหมายไดเรกทอรีจะมีการเปลี่ยนแปลงโดย symlink" -Pโดย

ดาว schilytools :

-/

อย่าดึงเครื่องหมายทับชั้นนำออกจากชื่อไฟล์เมื่อแตกไฟล์เก็บถาวร ไฟล์เก็บถาวร Tar ที่มีชื่อพา ธ สัมบูรณ์มักเป็นแนวคิดที่ไม่ดี ด้วยการใช้ tar อื่น ๆ พวกเขาอาจจะไม่ถูกแยกโดยไม่ต้องปิดกั้นไฟล์ที่มีอยู่ ติดดาวด้วยเหตุผลดังกล่าวตามค่าเริ่มต้นที่นำแถบเครื่องหมายทับจากชื่อไฟล์เมื่ออยู่ในโหมดแยก


2
เป็นเวลานาน, GNU tar ละเลยความจริงที่ว่าชื่อเส้นทางที่มี..ความเสี่ยงด้านความปลอดภัยเพื่อให้การใช้งานหรือเมื่อเร็ว ๆ นี้star gtarดูที่starตัวอย่างไฟล์เก็บถาวร tar ที่มีtarส่วนหัวที่สร้างขึ้นด้วยมือซึ่งทำให้tarการนำไปใช้งานส่วนใหญ่เพื่อลบไฟล์โดยไม่มีการเตือน
Schily

@schily ตามคำพูดของ Jeff นั่นไม่ได้ใช้tarกับ Solaris, AIX และ HP-UX เช่นกัน? ถ้าเป็นเช่นนั้นชี้ว่าทำไมออกเพียง GNU tar โดยเฉพาะอย่างยิ่งถ้า (อีกครั้งตามคำพูดข้างต้น) พวกเขาได้เปลี่ยนไปไม่ยอมรับ..? ปัญหาเกี่ยวกับอินพุตที่มีรูปแบบไม่ถูกต้องเป็นข้อบกพร่องของหลักสูตรและฉันคิดว่าคุณรายงานว่าเป็นเช่นนั้น
ilkkachu

1
การใช้งาน tar ในอดีตไม่ได้ตรวจสอบสิ่งต่างๆเช่นนั้น ฉันต้องการพูดเนื่องจากมีการกล่าวอ้างว่า GNU tar ไม่มีปัญหาโดยไม่ต้องพูดถึงรุ่น และ BTW: รายการเช่นนี้โดยไม่กล่าวถึงstar(การใช้งานฟรีที่เก่าที่สุด) จะต้องถูกมองว่าไม่สมบูรณ์
Schily

@schily ฉันค้นหาหน้าคนสำหรับระบบปฏิบัติการที่สำคัญ (ที่อาจมีการใช้งาน tar ที่แตกต่างกัน); หากคุณมีลิงก์ไปยังหน้าคนออนไลน์ของดาวฉันก็ยินดีที่จะรวมไว้
Jeff Schaller


9

หนึ่งในสิ่งที่เฮฮาที่เกิดขึ้นกับtar bombsคือพวกมันเปลี่ยนการอนุญาตของไดเรกทอรีปัจจุบันไปเป็นสิ่งที่รวมอยู่ใน tarball

ตัวอย่างเช่นหาก tarball มีเครื่องหมาย '.' อยู่ ไดเรกทอรีและคุณแกะมันใน / tmp ในฐานะ root มันจะทำลายระบบของคุณโดยการทำให้ทุกคนยกเว้น tmp แต่ไม่สามารถเขียนทับได้ / tmp


และถ้าคุณแกะมัน/มันจะเปลี่ยนการอนุญาตของไดเรกทอรีรากซึ่งจะมีผลที่ไม่คาดคิด (ฉันจำได้ว่า "ไม่สามารถรัน / bin / bash" เมื่อเข้าสู่ระบบคอนโซลเพราะ/เป็นโหมด 770)
Law29

1
ฉันเคยเกิดขึ้นกับซอฟต์แวร์อย่างเป็นทางการ - การเผยแพร่ gitHub ของ "rancher-compose" all contain " ในไฟล์ tar ตัวอย่างเช่นและ nuke / tmp หากคุณแตกไฟล์เหล่านั้น
Harald
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.