FixVibe
Covered by FixVibehigh

CORS การกำหนดค่าไม่ถูกต้อง: ความเสี่ยงของนโยบายที่อนุญาตมากเกินไป

การแบ่งปันทรัพยากรข้ามแหล่งกำเนิด (CORS) เป็นกลไกของเบราว์เซอร์ที่ออกแบบมาเพื่อลดนโยบายแหล่งกำเนิดเดียวกัน (SOP) แม้ว่าเว็บแอปสมัยใหม่จะจำเป็น แต่การใช้งานที่ไม่เหมาะสม เช่น การสะท้อนส่วนหัว Origin ของผู้ขอหรือการอนุญาตต้นทาง 'null' อาจทำให้ไซต์ที่เป็นอันตรายสามารถขโมยข้อมูลส่วนตัวของผู้ใช้ได้

CWE-942

ผลกระทบ

ผู้โจมตีสามารถขโมยข้อมูลที่ละเอียดอ่อนและได้รับการรับรองความถูกต้องจากผู้ใช้แอปพลิเคชันที่มีช่องโหว่ [S2] หากผู้ใช้เยี่ยมชมเว็บไซต์ที่เป็นอันตรายในขณะที่ลงชื่อเข้าใช้แอปที่มีช่องโหว่ ไซต์ที่เป็นอันตรายสามารถสร้างคำขอข้ามต้นทางไปยัง API ของแอป และอ่านการตอบสนอง [S1][S2] ซึ่งอาจนำไปสู่การขโมยข้อมูลส่วนตัว รวมถึงโปรไฟล์ผู้ใช้ โทเค็น CSRF หรือข้อความส่วนตัว [S2]

ต้นเหตุ

CORS เป็นกลไกที่ใช้ส่วนหัว HTTP ซึ่งอนุญาตให้เซิร์ฟเวอร์ระบุต้นทาง (โดเมน รูปแบบ หรือพอร์ต) ที่ได้รับอนุญาตให้โหลดทรัพยากร ZXCVFIXVIBTOKEN0ZXCV โดยทั่วไปช่องโหว่เกิดขึ้นเมื่อนโยบาย CORS ของเซิร์ฟเวอร์มีความยืดหยุ่นเกินไปหรือมีการใช้งานไม่ดี ZXCVFIXVIBTOKEN1ZXCV:

  • Reflected Origin Header: เซิร์ฟเวอร์บางแห่งอ่านส่วนหัว Origin จากคำขอของไคลเอ็นต์และสะท้อนกลับในส่วนหัวการตอบสนอง Access-Control-Allow-Origin (ACAO) [S2] สิ่งนี้ช่วยให้เว็บไซต์ใด ๆ เข้าถึงทรัพยากร [S2] ได้อย่างมีประสิทธิภาพ
  • Wildcard ที่กำหนดค่าไม่ถูกต้อง: แม้ว่า Wildcard ของ * จะอนุญาตให้ต้นทางใดๆ ก็ตามเข้าถึงทรัพยากรได้ แต่ก็ไม่สามารถใช้กับคำขอที่ต้องใช้ข้อมูลประจำตัว (เช่น คุกกี้หรือส่วนหัวการอนุญาต) ZXCVFIXVIBTOKEN1ZXCV นักพัฒนามักพยายามหลีกเลี่ยงสิ่งนี้โดยสร้างส่วนหัว ACAO แบบไดนามิกตามคำขอ [S2]
  • การอนุญาตพิเศษ 'null': แอปพลิเคชันบางตัวจะอนุญาตต้นกำเนิด null ซึ่งสามารถทริกเกอร์ได้โดยคำขอที่มีการเปลี่ยนเส้นทางหรือไฟล์ในเครื่อง ทำให้ไซต์ที่เป็นอันตรายปลอมแปลงเป็นต้นกำเนิด null เพื่อเข้าถึง ZXCVFIXVIBTOKEN2ZXCV[S3]
  • ข้อผิดพลาดในการแยกวิเคราะห์: ข้อผิดพลาดใน regex หรือการจับคู่สตริงเมื่อตรวจสอบความถูกต้องของส่วนหัว Origin อาจทำให้ผู้โจมตีสามารถใช้โดเมน เช่น trusted-domain.com.attacker.com [S2]

สิ่งสำคัญคือต้องทราบว่า ZXCVFIXVIBTOKEN1ZXCV ไม่ใช่การป้องกันการปลอมแปลงคำขอข้ามไซต์ (CSRF) [S2]

การแก้ไขคอนกรีต

  • ใช้บัญชีขาวแบบคงที่: หลีกเลี่ยงการสร้างส่วนหัว Access-Control-Allow-Origin แบบไดนามิกจากส่วนหัว ZXCVFIXVIBTOKEN1ZXCV ของคำขอ ZXCVFIXVIBTOKEN2ZXCV ให้เปรียบเทียบที่มาของคำขอกับรายการฮาร์ดโค้ดของโดเมนที่เชื่อถือได้ [S3] แทน
  • หลีกเลี่ยงแหล่งกำเนิด 'null': อย่ารวม null ในรายการไวท์ลิสต์ของต้นกำเนิดที่อนุญาต ZXCVFIXVIBTOKEN1ZXCV
  • จำกัดข้อมูลรับรอง: ตั้งค่าเฉพาะ Access-Control-Allow-Credentials: true หากจำเป็นจริงๆ สำหรับการโต้ตอบข้ามต้นทางเฉพาะ [S3]
  • ใช้การตรวจสอบความถูกต้องที่เหมาะสม: หากคุณต้องรองรับหลายต้นทาง ตรวจสอบให้แน่ใจว่าตรรกะการตรวจสอบสำหรับส่วนหัว Origin นั้นแข็งแกร่งและไม่สามารถข้ามโดยโดเมนย่อยหรือโดเมนที่มีลักษณะคล้ายกัน [S2]

วิธีทดสอบ FixVibe

ตอนนี้ FixVibe รวมสิ่งนี้เป็นเช็คที่แอ็คทีฟแบบมีรั้วรอบขอบชิด หลังจากการตรวจสอบโดเมนแล้ว active.cors จะส่งคำขอ API ที่มีต้นกำเนิดเดียวกันพร้อมกับต้นทางของผู้โจมตีสังเคราะห์ และตรวจสอบส่วนหัวการตอบสนองของ CORS รายงานดังกล่าวสะท้อนถึงต้นกำเนิดโดยพลการ, CORS ที่ได้รับการรับรองไวด์การ์ด และ CORS แบบเปิดกว้างบนจุดสิ้นสุด ZXCVFIXVIBTOKEN3ZXCV ที่ไม่ใช่แบบสาธารณะ ในขณะเดียวกันก็หลีกเลี่ยงเสียงรบกวนจากทรัพย์สินสาธารณะ