ช่องโหว่ประเภท Unvalidated Redirects and Forwards

pirate9Unvalidated Redirects and Forwards (URF) เป็นช่องโหว่ด้านความปลอดภัยที่เว็บแอปพลิเคชันเปิดโอกาสให้ผู้ไม่หวังดีทำการ redirect หรือ forward ผู้ใช้งานไปยังเว็บไซต์อื่น แม้ว่าการ redirect นั้นจะเป็นเหมือนพฤติกรรมปกติ แต่การที่เว็บไซต์ที่มีความน่าเชื่อถือทำการ redirect ผู้ใช้งานไปดาวโหลดไฟล์ virus หรือ malware อาจสร้างความเสียหายให้กับทั้งตัวผู้ใช้งานเองและเว็บไซต์หาก user account ถูกโจรกรรม บทความนี้จะอธิบายถึงช่องโหว่ประเภท URF และแนวทางในการป้องกัน

อะไรคือ Unvalidated Redirects and Forwards

Unvalidated Redirects and Forwards เป็นช่องโหว่ที่อนุญาตให้ผู้ไม่หวังดีทำการ redirect ผู้ใช้งานเว็บไซต์คนอื่นไปยังเว็บที่ต้องการ ตัวอย่างเช่น หากเว็บไซต์มีซอร์สโค้ด PHP ที่ใช้ในการ redirect ที่ไม่ปลอดภัย ดั่งตัวอย่างด้านล่าง

<?php
 $target_url = $_GET['target_url'];
 link_count($target_url);
 header("Location: " . $target_url);
?>

PHP ด้านบนทำการรับ parameter มาจาก URL ทำการเก็บสถิติ(link count) และ redirect ผู้ใช้งานไปยังเว็บไซต์อื่น โดยปกติเว็บไซต์อาจจะใช้หน้านี้ในการ redirect ผู้ใช้งานไปยังเว็บไซต์อื่นที่เกี่ยวข้อง ตัวอย่างเช่น ซึ่งสมมติธนาคาร A (Bank A) ต้องการ redirect ผู้ใช้งานไปยังธนาคาร B (Bank B) ก็เพียงแค่ส่ง link ดังด้านล่าง

http://www.banka.com/redirect.php?target_url=http://www.bankb.com

จากซอร์สโค้ดนี้จะเห็นได้ว่า URL ดังกล่าวเปิดโอกาสให้กับผู้ไม่หวังดีในการทำการเปลี่ยน URL เพื่อ redirect ผู้ใช้งานไปยังเว็บไซต์ที่ต้องการได้ เช่น

http://www.banka.com/redirect.php?target_url=http://www.hacker.com

เนื่องจากผู้ใช้งานส่วนใหญ่จะไม่ได้สังเกต parameter ที่ส่งมากับ link ดังนั้นโดยปกติจึงจะเชื่อว่าเป็นเว็บไซต์ที่ปลอดภัย ผู้ไม่หวังดีสามารถอาจจะ redirect ผู้ใช้งานไปเพื่อ

  1. สร้าง web phishing หน้าตาที่เหมือนกับ Bank A เพื่อทำการหลอกเอา username/password
  2. สร้าง malware แล้วหลอกให้ผู้ใช้งาน download
  3. redirect ไปยังหน้าโฆษณาต่าง ๆ เพิ่มยอด view

สาเหตุและแนวทางในการป้องกันช่องโหว่ Unvalidated Redirects and Forwards (URF)

URF เป็นช่องโหว่ที่เกิดจากการที่เว็ปแอปพลิเคชันนั้นไม่ได้ตรวจสอบข้อมูลที่รับมาจากผู้ใช้งานก่อนทำการ redirect (ฟังคุ้น ๆ เหมือนสาเหตุของ SQL Injection และ XSS  ไหม?) ดังนั้น วิธีการป้องกันที่ดีที่สุดในการป้องกันช่องโหว่ประเภทนี้ประกอบไปด้วย

  • พยายามไม่ redirect ไปเว็บไซต์อื่นหากเป็นไปได้
  • ไม่เปิดโอกาสให้ผู้ใช้งานใส่ URL มาเพื่อ redirect ผ่านเว็บไซต์
  • ตรวจสอบ URL ที่รับเข้ามาโดยการสร้าง whitelist ของเว็บไซต์ที่น่าเชื่อถือก่อนทำการ redirect
  • แจ้งเตือนให้ผู้ใช้งานได้รับรู้ว่ากำลังจะถูก redirect ไปยังเว็บไซต์อื่น ก่อนทำการ redirect

สรุป

แม้ว่า Unvalidated Redirects and Forwards จะดูเหมือนเป็นช่องโหว่ที่ไม่ร้ายแรง แต่ในความเป็นจริงแล้ว การที่เว็บแอปพลิเคชันที่น่าเชื่อถือทำการ redirect ไปยังเว็บไซตอื่น เป็นการบอกผู้ใช้งานโดยนัยว่าเว็บไซต์ที่ส่งไปนั้นก็น่าจะเป็นเว็บไซต์ที่น่าเชื่อถือด้วย ดังนั้น ผู้ใช้งานจะระมัดระวังตัวน้อยลง และอาจจะตกเป็นเหยื่อของผู้ไม่หวังดีที่ใช้ช่องโหว่ประเภทนี้ ผู้พัฒนาเว็บไซต์ที่ดีควรที่จะตระหนักถึงความปลอดภัยของผู้ใช้งานเป็นหลักและป้องกันการเกิดเหตุการณ์ดังกล่าว

อ้างอิง

  1. Unvalidated Redirects and Forwards Cheat Sheet

 


Leave a Reply