การโจมตี Path Traversal: เมื่อแค่ “ส่วนหน้า” ไม่ใช่ปัญหาที่แท้จริง

การโจมตี Path Traversal: เมื่อแค่ “ส่วนหน้า” ไม่ใช่ปัญหาที่แท้จริง

การโจมตีประเภท Path Traversal หรือที่บางคนเรียกว่า Directory Traversal เป็นหนึ่งในช่องโหว่ด้านความปลอดภัยของเว็บแอปพลิเคชันที่พบได้บ่อยและอันตรายอย่างยิ่ง

ช่องโหว่นี้เปิดโอกาสให้ผู้ไม่หวังดีสามารถเข้าถึงไฟล์หรือไดเรกทอรีนอกเหนือจากที่ผู้พัฒนาตั้งใจให้เข้าถึงได้

เป็นการข้ามผ่านขอบเขตที่กำหนดไว้เพื่อล้วงข้อมูลสำคัญหรือแม้กระทั่งแก้ไขไฟล์บนเซิร์ฟเวอร์

ภัยเงียบที่มองข้าม

หลายครั้ง ผู้พัฒนาแอปพลิเคชันอาจมีการตรวจสอบความถูกต้องของเส้นทางไฟล์ (path validation) ที่ดูเหมือนจะปลอดภัยดี

มีการตรวจสอบเพื่อให้แน่ใจว่าผู้ใช้จะเรียกดูไฟล์ที่อยู่ในไดเรกทอรีที่กำหนดเท่านั้น

ตัวอย่างเช่น การกำหนดให้ผู้ใช้เข้าถึงได้เฉพาะไฟล์รูปภาพที่อยู่ในโฟลเดอร์ /images/

แต่ปัญหาที่แท้จริงมักจะซ่อนอยู่ในรายละเอียดของการตรวจสอบนั้น

หากการตรวจสอบทำเพียงแค่ดู “ส่วนหน้า” หรือ prefix ของเส้นทาง ผู้โจมตีก็อาจหาทางเลี่ยงได้ไม่ยาก

กลไกการโจมตีที่ซับซ้อนกว่าที่คิด

ลองจินตนาการว่ามีระบบที่อนุญาตให้ผู้ใช้ร้องขอไฟล์รูปภาพ โดยคาดหวังว่าเส้นทางจะเริ่มต้นด้วย /images/ เสมอ

ผู้โจมตีอาจสร้างคำขอที่ดูเหมือนจะถูกต้อง เช่น /images/../

แต่ความฉลาดของมันคือการใช้ “..” เพื่อย้อนกลับขึ้นไปหนึ่งระดับในโครงสร้างไดเรกทอรี

และหากระบบไม่ได้ประมวลผลหรือทำความสะอาด (normalize) เส้นทางนี้อย่างถูกต้องก่อนการตรวจสอบ

ผู้โจมตีก็อาจสร้างเส้นทางที่อันตรายขึ้นมาได้ เช่น /images/../../etc/passwd

การตรวจสอบเพียงว่าเส้นทางเริ่มต้นด้วย /images/ จะทำให้คำขอนี้ผ่านไปได้

แต่เมื่อระบบปฏิบัติการประมวลผลเส้นทางจริง ๆ มันจะพุ่งตรงไปยังไฟล์ /etc/passwd ซึ่งเก็บข้อมูลผู้ใช้งานของระบบอย่างง่ายดาย

ทำไมแค่ตรวจสอบ “ส่วนหน้า” ถึงไม่พอ

ปัญหาหลักอยู่ตรงที่การตรวจสอบแบบตื้น ๆ โดยไม่คำนึงถึงการทำงานของระบบไฟล์จริง ๆ

โปรแกรมเมอร์อาจเขียนโค้ดเพื่อตรวจสอบว่า “path.startsWith(‘/images/’)”

แต่กลับลืมไปว่าหลังจากนั้น ระบบปฏิบัติการจะตีความ .. เป็นการย้อนกลับไดเรกทอรี

และเมื่อนั้น เส้นทางที่ดูเหมือนปลอดภัยในตอนแรก ก็กลายเป็นประตูสู่ข้อมูลลับ

นี่คือการที่การตรวจสอบ ไม่ครอบคลุมทั้งเส้นทาง และ ไม่ประมวลผลเส้นทางให้สมบูรณ์ ก่อนการตรวจสอบ

ทำให้เกิดช่องโหว่ที่คาดไม่ถึง

ผลกระทบของการถูกโจมตี

การโจมตี Path Traversal อาจนำไปสู่ผลลัพธ์ที่ร้ายแรง

สิ่งที่พบบ่อยที่สุดคือการ เปิดเผยข้อมูลสำคัญ (Information Disclosure) เช่น ข้อมูลการตั้งค่าระบบ, รหัสผ่านที่เข้ารหัส, หรือแม้แต่ซอร์สโค้ดของแอปพลิเคชัน

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

ซึ่งอาจนำไปสู่การ ควบคุมเซิร์ฟเวอร์ (Remote Code Execution) ได้ในที่สุด

แนวทางป้องกันที่แข็งแกร่ง

การป้องกันช่องโหว่นี้ต้องเริ่มต้นจากการทำความเข้าใจกลไกของมัน

หนึ่งในวิธีที่มีประสิทธิภาพที่สุดคือการ ทำให้เส้นทางเป็นมาตรฐาน (Path Normalization) เสมอ ก่อน การตรวจสอบใด ๆ

การทำให้เส้นทางเป็นมาตรฐานจะจัดการกับ .. หรือ /./ ให้เรียบร้อย ทำให้เหลือเพียงเส้นทางที่แท้จริง

จากนั้น ให้ใช้ White Listing หรือการอนุญาตเฉพาะชื่อไฟล์หรือไดเรกทอรีที่รู้ว่าปลอดภัยเท่านั้น

หลีกเลี่ยงการใช้ Black Listing หรือการพยายามบล็อกสิ่งที่ไม่ปลอดภัย เพราะมักจะมีวิธีหลีกเลี่ยงเสมอ

นอกจากนี้ การจำกัดสิทธิ์การเข้าถึงไฟล์ของแอปพลิเคชัน (Principle of Least Privilege) ก็เป็นสิ่งสำคัญ เพื่อลดความเสียหายหากเกิดการโจมตีขึ้น

การใส่ใจในรายละเอียดของการประมวลผลเส้นทาง จะช่วยปิดประตูสู่ช่องโหว่ประเภทนี้ได้อย่างมั่นคง