CWE-601 Open Redirect

เมื่อวันก่อนได้ลองเล่นเว็บ https://www.root-me.org เจอ vulnerability ตัวนึงน่าสนใจ คือ Open Redirect ที่น่าสนใจเพราะเว็บตัวเองก็เป็นเหมือนกัน (แต่ตอนนี้แก้ไปละ 😳)

เวลา user เข้ามาที่เว็บเรา โดยที่หน้าที่จะเข้านั้น ต้อง sign in ก่อน แต่ user คนนี้ยังไม่ได้ sign in เราเลย redirect user คนนี้ไปที่หน้า sign in แล้วก็ใจดีใส่ redirect url เพื่อให้ user ถูก redirect กลับไปหน้าก่อนที่จะมาหน้า sign in ด้วย

หน้าตา code จะประมาณนี้

ลองทายดูว่า code บนนี้ผิดตรงไหน ?


ดูเหมือนจะไม่มีอะไรผิด ?

ที่ผิดคือตอน redirect หลังจากที่ sign in เสร็จแล้ว

ลองดู url ต่อไปนี้

  • https://example.com/signin
  • https://example.com/signin?r=/profile
  • https://example.com/signin?r=https://google.com

URL ที่ 1 พอ sign in เสร็จ เราจะถูก redirect ไป https://example.com/
URL ที่ 2 พอ sign in เสร็จ เราจะถูก redirect ไป https://example.com/profile
URL ที่ 3 พอ sign in เสร็จ เราจะถูก redirect ไป https://google.com


แล้วเราจะป้องกันยังไงไม่ให้ถูก redirect ไปเว็บอื่น ?
อาจจะเอา URL ที่จะ redirect มาลอง parse ก่อน แล้วดึงมาแค่ path เช่น

(อาจจะเอา query มาใส่ด้วยก็ได้)


แล้วถ้าเว็บเราต้องให้ user redirect ออกไปนอกเว็บหล่ะ ?

อาจจะต้องทำหน้าเพื่อให้ user กดยืนยันอีกทีก่อนที่จะ redirect ออกไปเว็บอื่น

Like what you read? Give acoshift a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.