FixVibe
Covered by FixVibehigh

ความปลอดภัย JWT: ความเสี่ยงของโทเค็นที่ไม่ปลอดภัยและการตรวจสอบการอ้างสิทธิ์ที่หายไป

JSON Web Tokens (JWT) มอบมาตรฐานสำหรับการโอนการอ้างสิทธิ์ แต่ความปลอดภัยขึ้นอยู่กับการตรวจสอบที่เข้มงวด การไม่ตรวจสอบลายเซ็น เวลาหมดอายุ หรือกลุ่มเป้าหมายจะทำให้ผู้โจมตีสามารถข้ามการรับรองความถูกต้องหรือโทเค็นการเล่นซ้ำได้

CWE-347CWE-287CWE-613

ผลกระทบของผู้โจมตี

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

ต้นเหตุ

JSON Web Token (JWT) เป็นโครงสร้างแบบ JSON ที่ใช้เพื่อแสดงการอ้างสิทธิ์ที่มีการลงนามแบบดิจิทัลหรือ [S1] ที่มีการป้องกันความสมบูรณ์ ความล้มเหลวด้านความปลอดภัยมักเกิดจากช่องว่างการใช้งานหลักสองประการ:

  • การยอมรับ JWT ที่ไม่ปลอดภัย: หากบริการไม่บังคับใช้การตรวจสอบลายเซ็นอย่างเคร่งครัด บริการอาจประมวลผล "JWT ที่ไม่ปลอดภัย" โดยที่ไม่มีลายเซ็นและอัลกอริทึมถูกตั้งค่าเป็น "ไม่มี" [S1] ในสถานการณ์สมมตินี้ เซิร์ฟเวอร์เชื่อถือการอ้างสิทธิ์ในเพย์โหลดโดยไม่ตรวจสอบความสมบูรณ์ของ [S1]
  • การตรวจสอบการอ้างสิทธิ์ที่ขาดหายไป: การอ้างสิทธิ์ exp (เวลาหมดอายุ) ระบุเวลาในหรือหลังจากนั้นซึ่งจะต้องไม่ยอมรับ JWT สำหรับการประมวลผล [S1] การอ้างสิทธิ์ aud (ผู้ชม) ระบุผู้รับโทเค็น [S1] หากไม่ได้ทำเครื่องหมายเหล่านี้ เซิร์ฟเวอร์อาจยอมรับโทเค็นที่หมดอายุหรือมีไว้สำหรับแอปพลิเคชันอื่น [S1]

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

  • บังคับใช้ลายเซ็นการเข้ารหัส: กำหนดค่าแอปพลิเคชันให้ปฏิเสธ JWT ใดๆ ที่ไม่ได้ใช้อัลกอริธึมการลงนามที่รัดกุมและได้รับการอนุมัติล่วงหน้า (เช่น RS256)
  • ตรวจสอบการหมดอายุ: ใช้การตรวจสอบบังคับเพื่อให้แน่ใจว่าวันที่และเวลาปัจจุบันอยู่ก่อนเวลาที่ระบุไว้ในข้อเรียกร้อง exp [S1]
  • ตรวจสอบผู้ชม: ตรวจสอบให้แน่ใจว่าการอ้างสิทธิ์ aud มีค่าที่ระบุถึงบริการในพื้นที่ ถ้าบริการไม่ได้ระบุในการอ้างสิทธิ์ aud โทเค็นจะต้องถูกปฏิเสธ ZXCVFIXVIBTOKEN2ZXCV
  • ป้องกันการเล่นซ้ำ: ใช้การอ้างสิทธิ์ jti (JWT ID) เพื่อกำหนดตัวระบุเฉพาะให้กับแต่ละโทเค็น ช่วยให้เซิร์ฟเวอร์สามารถติดตามและปฏิเสธโทเค็นที่ใช้ซ้ำ [S1]

กลยุทธ์การตรวจจับ

ช่องโหว่ในการจัดการ JWT สามารถระบุได้โดยการวิเคราะห์โครงสร้างโทเค็นและพฤติกรรมการตอบสนองของเซิร์ฟเวอร์:

  • การตรวจสอบส่วนหัว: การตรวจสอบส่วนหัว alg (อัลกอริทึม) เพื่อให้แน่ใจว่าไม่ได้ตั้งค่าเป็น "ไม่มี" และใช้มาตรฐานการเข้ารหัสลับที่คาดไว้ [S1]
  • การตรวจสอบการอ้างสิทธิ์: ยืนยันการมีอยู่และความถูกต้องของการอ้างสิทธิ์ exp (หมดอายุ) และ aud (ผู้ชม) ภายในเพย์โหลด JSON [S1]
  • การทดสอบการตรวจสอบความถูกต้อง: การทดสอบว่าเซิร์ฟเวอร์ปฏิเสธโทเค็นที่หมดอายุอย่างถูกต้องตามการอ้างสิทธิ์ exp หรือมีไว้สำหรับผู้ชมที่แตกต่างกันตามที่กำหนดโดยการอ้างสิทธิ์ aud [S1]