ช่องโหว่การกำหนดค่า Nginx ที่มีการตั้งค่าบล็อกนามแฝงไม่ถูกต้อง

เซิร์ฟเวอร์ Nginx บางตัวยังคงเสี่ยงต่อเทคนิค Nginx Alias ​​​​Traversal ซึ่งได้รับการเสนอในการประชุม Blackhat ในปี 2018 และอนุญาตให้เข้าถึงไฟล์และไดเร็กทอรีที่อยู่นอกไดเร็กทอรีรากที่ระบุในคำสั่ง "นามแฝง" ปัญหาจะปรากฏเฉพาะในการกำหนดค่าที่มีคำสั่ง "นามแฝง" อยู่ภายในบล็อก "ตำแหน่ง" ซึ่งพารามิเตอร์ไม่ได้ลงท้ายด้วยอักขระ "/" ในขณะที่ "นามแฝง" ลงท้ายด้วย "/"

ช่องโหว่การกำหนดค่า Nginx ที่มีการตั้งค่าบล็อกนามแฝงไม่ถูกต้อง

สาระสำคัญของปัญหาคือไฟล์สำหรับบล็อกที่มีคำสั่ง alias จะถูกให้บริการโดยการแนบเส้นทางที่ร้องขอ หลังจากเปรียบเทียบกับมาสก์จากคำสั่งตำแหน่ง และตัดส่วนของเส้นทางที่ระบุในรูปแบบนี้ออก สำหรับตัวอย่างการกำหนดค่าที่มีช่องโหว่ที่แสดงด้านบน ผู้โจมตีสามารถขอไฟล์ “/img../test.txt” และคำขอนี้จะอยู่ภายใต้มาสก์ “/img” ที่ระบุในตำแหน่ง หลังจากนั้นส่วนหางที่เหลือ “.. /test.txt” จะถูกแนบไปกับพาธจากคำสั่งนามแฝง “/var/images/” และในที่สุดจะขอไฟล์ “/var/images/../test.txt” ดังนั้น ผู้โจมตีสามารถเข้าถึงไฟล์ใดๆ ในไดเร็กทอรี “/var” ได้ และไม่ใช่แค่ไฟล์ใน “/var/images/” เท่านั้น ตัวอย่างเช่น หากต้องการดาวน์โหลดบันทึก nginx คุณสามารถส่งคำขอ “/img../log/” nginx/ access.log"

ในการกำหนดค่าที่ค่าของคำสั่ง alias ไม่ได้ลงท้ายด้วยอักขระ "/" (เช่น "alias /var/images;") ผู้โจมตีไม่สามารถเปลี่ยนเป็นไดเร็กทอรีหลักได้ แต่สามารถขอไดเร็กทอรีอื่นใน /var ได้ ซึ่งมีชื่อขึ้นต้นด้วยชื่อเดียวกับที่ระบุในการกำหนดค่า ตัวอย่างเช่น โดยการร้องขอ "/img.old/test.txt" คุณจะสามารถเข้าถึงไดเรกทอรี "var/images.old/test.txt"

การวิเคราะห์ที่เก็บข้อมูลบน GitHub แสดงให้เห็นว่าข้อผิดพลาดในการกำหนดค่า nginx ที่นำไปสู่ปัญหายังคงเกิดขึ้นในโปรเจ็กต์จริง ตัวอย่างเช่น ปัญหาถูกระบุในแบ็กเอนด์ของตัวจัดการรหัสผ่าน Bitwarden และสามารถใช้เพื่อเข้าถึงไฟล์ทั้งหมดในไดเร็กทอรี /etc/bitwarden (/คำขอแนบมาจาก /etc/bitwarden/attachments/) รวมถึง “vault” .db", ใบรับรอง และบันทึก เพื่อให้ได้มาซึ่งเพียงพอที่จะส่งคำขอ "/attachments../vault.db", "/attachments../identity.pfx", "/attachments../logs/api.log " ฯลฯ .P.

ช่องโหว่การกำหนดค่า Nginx ที่มีการตั้งค่าบล็อกนามแฝงไม่ถูกต้อง
ช่องโหว่การกำหนดค่า Nginx ที่มีการตั้งค่าบล็อกนามแฝงไม่ถูกต้อง

วิธีนี้ยังใช้ได้กับ Google HPC Toolkit ซึ่งเปลี่ยนเส้นทางคำขอ /static ไปยังไดเร็กทอรี "../hpc-toolkit/community/front-end/website/static/" หากต้องการรับฐานข้อมูลพร้อมคีย์ส่วนตัวและข้อมูลประจำตัว ผู้โจมตีสามารถส่งคำขอ “/static../.secret_key” และ “/static../db.sqlite3” ได้

ช่องโหว่การกำหนดค่า Nginx ที่มีการตั้งค่าบล็อกนามแฝงไม่ถูกต้อง


ที่มา: opennet.ru

เพิ่มความคิดเห็น