
การโจมตี 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) ก็เป็นสิ่งสำคัญ เพื่อลดความเสียหายหากเกิดการโจมตีขึ้น
การใส่ใจในรายละเอียดของการประมวลผลเส้นทาง จะช่วยปิดประตูสู่ช่องโหว่ประเภทนี้ได้อย่างมั่นคง