ผลกระทบ
ผู้โจมตีสามารถขโมยข้อมูลที่ละเอียดอ่อนและได้รับการรับรองความถูกต้องจากผู้ใช้แอปพลิเคชันที่มีช่องโหว่ [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 ที่ไม่ใช่แบบสาธารณะ ในขณะเดียวกันก็หลีกเลี่ยงเสียงรบกวนจากทรัพย์สินสาธารณะ
