Symlinks บนแม่แบบมีปัญหาด้านความปลอดภัยหรือไม่และถ้าใช่ทำไม


35

Magento แนะนำให้ไม่ใช้เทมเพลตผ่าน symlinks:

Advanced > Developer > Template Settings > Allow Symlinks

คำเตือน! ไม่แนะนำให้เปิดใช้งานคุณสมบัตินี้ในสภาพแวดล้อมการใช้งานจริงเนื่องจากอาจมีความเสี่ยงด้านความปลอดภัย

จนถึงวันนี้ฉันไม่เห็นความเสี่ยงใด ๆ ที่นี่

  • ความเสี่ยงคืออะไร?

8
ฉันสามารถจินตนาการได้ว่านี่เป็นความเสี่ยงต่อโฮสต์ที่ใช้ร่วมกันซึ่งไม่ควรใช้กับอีคอมเมิร์ซตั้งแต่แรก
benmarks

3
@benmarks ทำไมคุณไม่ใส่คำตอบนี้ลงไป?
Marius

2
เป็นคำถามที่ดีมาก @Fabi!
user487772

3
ฉันรู้ว่าคนอื่นจะเสนอคำตอบที่สมบูรณ์มากขึ้น ฉันถูก :-D
benmarks

3
@benmarks เว็บไซต์ต้องการคำตอบที่สูงกว่าต่ออัตราคำถามในทางใดทางหนึ่ง ;-)
user487772

คำตอบ:


40

Symlinks ไม่จำเป็นต้องเลวร้าย

ก่อนอื่น: หากพยายามเปิดเป้าหมาย symlink สิทธิ์ของไฟล์ของเป้าหมายจะมีผล หากคุณไม่ได้รับอนุญาตให้อ่าน / เขียน / ดำเนินการเป้าหมาย symlink ไม่มีอะไรเกิดขึ้น

แต่: คุณอาจสามารถเรียกใช้ไฟล์นอกรูทเอกสารของคุณ (บางครั้งนั่นคือสิ่งที่คุณต้องการจะทำกับพวกเขาใช่ไหม) ปัญหาอาจเกิดขึ้นหากคุณไม่ได้อยู่ในสภาพแวดล้อม suEXEC และมีapacheหรือwww-dataผู้ใช้ในพื้นที่สาธารณะที่รับผิดชอบการให้บริการไฟล์จากบัญชีที่แตกต่างกัน ผู้ใช้ระบบของคุณไม่ได้รับอนุญาตให้เข้าถึงไฟล์ของลูกค้ารายอื่น แต่apache/www-dataผู้ใช้ส่วนใหญ่จะมีสิทธิ์อ่านในบัญชีที่แชร์ทั้งหมด นี่อาจเป็นสถานการณ์ที่ผู้ใช้รายหนึ่งสามารถเข้าถึงไฟล์ของผู้ใช้รายอื่นบนโฮสต์ที่ใช้ร่วมกัน ไม่ใช่กับผู้ใช้ของคุณ แต่โดยการเข้าถึงไฟล์ผ่านเบราว์เซอร์กับapache/www-dataผู้ใช้ ในการสรุป: ในสถานการณ์นี้คุณจะสามารถเข้าถึงไฟล์ของผู้ใช้คนอื่น => ไม่ดี

สิ่งที่เลวร้ายถัดไปคือผู้โจมตีสามารถสร้าง symlink รวมถึงไฟล์เช่น / etc / passwd, ... , ดาวน์โหลดข้อมูลนี้และดำเนินการตามข้อมูลนี้ นี่ไม่เพียง แต่ขึ้นอยู่กับ symlink เท่านั้น แต่ยังรวมถึงการกำหนดค่าเซิร์ฟเวอร์ที่ไม่ดีด้วย (ซึ่งการเข้าถึงไฟล์เหล่านี้ถูก จำกัด อย่างเข้มงวด) ดังนั้นการไม่ใช้ symlink ป้องกันจากการโจมตีที่เป็นไปได้

มันไม่ได้เกี่ยวกับ symlink เท่านั้นที่เป็นความเสี่ยงด้านความปลอดภัย แต่เป็นปัญหาการกำหนดค่าเซิร์ฟเวอร์


5
คำอธิบายที่ดี - นี่คือคำตอบที่ถูกต้องโดยพื้นฐานแล้ว "ใช้ในความเสี่ยงของคุณเอง"
philwinkle

2
อาจกล่าวถึงมูลค่า (แม้ว่าจะมีความสมดุลกับข้อผิดพลาดที่เกี่ยวข้องกับความปลอดภัยในสภาพแวดล้อม 'เกลียดที่จะอัพเกรด') - วีโอไอพีอย่างยิ่งท้อใจ symlinks symlinks เกี่ยวข้องกับการโจมตีช่องโหว่ที่แม่แบบและไฟล์เลย์เอาต์นอกapp/designโฟลเดอร์ สามารถใช้โดยผู้ใช้ผู้ดูแลระบบสำหรับการเพิ่มสิทธิ์และการหาประโยชน์จากเซิร์ฟเวอร์อื่น ๆ
Alan Storm

1
บน Apache httpd ถ้าคุณต้องการ symlinks สนับสนุนพิจารณาว่าตัวเลือกที่ถูกนำมาใช้แทนSymLinksIfOwnerMatch FollowSymlinks
hakre

15

ใช่แล้วนั่นคือเหตุผลที่เว็บเซิร์ฟเวอร์มักจะมีการกำหนดค่า "dont follow symlinks" หรืออย่างน้อย "เพียงแค่ติดตาม symlinks ของเป้าหมายกับผู้ใช้เดียวกัน" นั่นเพราะ webserver / php จะทำงานโดยมีสิทธิ์มากกว่าคุณควรเข้าถึง

และเนื่องจากเว็บเซิร์ฟเวอร์มักจะพยายามหลีกเลี่ยงสิ่งต่าง ๆ เช่นมองเห็น / etc / shadow มันเป็นเทมเพลตวีโอไอพีที่อันตรายยิ่งกว่าเนื่องจากเทมเพลตจะถูกแยกวิเคราะห์ผ่านทาง include () ดังนั้นคุณจึงมีความปลอดภัยสูงมากหากคุณไม่สามารถควบคุมไฟล์ได้อย่างเต็มที่

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

นอกจากนี้เมื่อไม่นานมานี้มีการแก้ไขความปลอดภัยเกี่ยวกับไดเรกทอรีสื่อและ symlink ดังนั้นคุณควรดูที่สถานการณ์การโจมตีที่เป็นไปได้


1
หากคนอื่นสามารถสร้าง symlink บนเซิร์ฟเวอร์ของคุณคุณมีปัญหาใหญ่กว่านั้น ฉันหมายถึง - ดูความคิดเห็นของเบ็นด้านล่าง ใครจะเป็นเจ้าภาพวีโอไอพีในพื้นที่สาธารณะ? ใครจะเคยอะไรโฮสต์ในพื้นที่สาธารณะในปัจจุบันและทำไม :)?
สเวน

3
เพียงเพราะมีคนที่ทำ คุณไม่สามารถคาดหวังให้คนอื่นปฏิบัติตามสมควร จะมีคนที่ทำสิ่งนี้อยู่เสมอและจะมีคนที่ทำผิดพลาดเกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์ทั่วไปเสมอ
Flyingmana

14

ฉันสามารถจินตนาการได้ว่านี่เป็นความเสี่ยงต่อโฮสต์ที่ใช้ร่วมกันซึ่งไม่ควรใช้กับอีคอมเมิร์ซในตอนแรก


1
น่าเสียดายที่มีการใช้งานค่อนข้างมาก
Piotr Kaminski

2
ตามมาตรฐาน PCI Security Council ในทางเทคนิคแล้วระบบคลาวด์สาธารณะนั้นมีผู้เช่าหลายคนดังนั้นแม้จะถูกมองว่าเป็น "ความเสี่ยง" ก็ตาม
philwinkle

4

Magento patch SUPEE-9767รวมถึงAPPSEC-1281: การเรียกใช้โค้ดจากระยะไกลผ่าน symlink ดังนั้นใช่ Symlinks บนเทมเพลตเป็นปัญหาด้านความปลอดภัย

ประเภท:
การเรียกใช้โค้ดจากระยะไกล (RCE)

CVSSv3 ความรุนแรง:
8.8 (สูง)

การโจมตีที่ทราบ:
ใช่ ผู้โจมตีกำลังปิดการใช้งานการป้องกันการกำหนดค่าหลังจากได้รับสิทธิ์การเข้าถึงระดับผู้ดูแลระบบและกำลังอัปโหลดรหัสที่เป็นอันตราย

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

ผลิตภัณฑ์ที่ได้รับผลกระทบ:
Magento CE ก่อนหน้า 1.9.3.3 และ Magento EE ก่อนหน้า 1.14.3.3

แก้ไขใน:
CE 1.9.3.3, EE 1.14.3.3, SUPEE-9767

ผู้สื่อข่าว:
Wilko Nienhaus


0

ไม่แนะนำให้อนุญาต ฉันพบข้อผิดพลาดในการโหลด js ขณะเปิดใช้งาน symlink
มากมาย;

TypeError: $ .widget ไม่ใช่ฟังก์ชัน

ฉันต้องลองรีเฟรช 4-5 ครั้งสำหรับหน้าเว็บที่โหลดสำเร็จ
หลังจากปิดแล้วอาจไม่สามารถใช้งานทรัพยากรได้โหลดช้าเป็นครั้งแรก แต่ข้อผิดพลาด js หายไป

PS: หลังจากปิดการใช้งาน symlink คุณต้องลบสำเนาของไฟล์ที่ปรับใช้หลังจากการเปลี่ยนแปลงทุกครั้งสำหรับ static.php คัดลอกใหม่สำหรับคุณ


1
ขออภัยฉันไม่เข้าใจคุณต้องรีเฟรช 4-5 ครั้งก่อนที่จะใช้งานได้หรือไม่ สิ่งนี้เกี่ยวข้องกับ symlink อย่างไร
Fabian Blechschmidt

ก่อนที่จะปิดการใช้งาน symlink :) ขออภัยสำหรับภาษาอังกฤษของฉัน
rbostan

พวกเรากำลังพูดถึง magento2 หรือเปล่า? จากนั้นฉันเข้าใจว่าฉันยังไม่เข้าใจ - ยังไม่มีเบาะแสเกี่ยวกับ 2
Fabian Blechschmidt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.