นักวิจัยจาก Lightspin พบช่องโหว่ AWS IAM Authenticator for Kubernetes (CVE-2022-2385) ซึ่งสามารถทำให้ผู้โจมตีสามารถแก้ไข authentication token เพื่อยกระดับสิทธิ์ใน Kubernetes cluster ได้
AWS IAM Authenticator for Kubernetes คืออะไร?
AWS IAM Authenticator เป็น plugin ที่ช่วย map user/group ใน Kubernetes กับ AWS IAM ทำให้ผู้ใช้งานที่ใช้ AWS อยู่แล้วไม่ต้องบริหารจัดการสิทธ์ที่ Kubernetes โดยการเพิ่มหรือลดสิทธิ์ของ user ก็สามารถทำที่ AWS IAM ได้เลย โดยที่ AWS IAM Authenticator จะถูกติดตั้งอยู่ใน AWS EKS cluster ตั้งแต่เริ่มต้น
AWS IAM Authenticator ทำงานอย่างไร?
เมื่อ user จะยืนตัวตน kubectl จะส่ง token ที่เป็นการ request API GetCallerIdentity ไปที่ AWS IAM Authenticator server จากนั้น Server จะส่ง token ไปให้ AWS STS อีกครั้งเพื่อเป็นการยืนตัวตน AWS IAM กับ User/Group ใน Cluster
สาเหตุของช่องโหว่
Authenticator server จะดึงค่าจาก API GetCallerIdentity parameter มา verify และนำมาใช้ในการยื่นยันตัวตน แต่มี code บางส่วนที่จะทำหน้าที่ lower case ตัว key ของ parameter แต่กลับไม่มีการตรวจสอบว่าชื่อ key นั้นซ้ำกันหรือไม่ เช่น key ‘Action’ กับ ‘action’ เมื่อถูกแปลงเป็น lowercase แล้วจะมีชื่อเดียวกันเป็น ‘action’ ซึ่งทำให้อาจมีโอกาสที่จะถูก Overwrite ค่าของ parameter ได้
วิธีการโจมตี
aws-iam-authenticator สามารถ map user โดยใช้ AWS AccessKeyID
ผู้โจมตีสามารถแก้ไข Access Key ที่ใช้โดย aws-iam-authenticator โดยการส่ง request overwrite parameter ‘X-Amz-Credentials’
https[:]//sts[.]us-east-1[.]amazonaws[.]com/?X-Amz-Credentials=AKIAXXXXXXXXXXXXXXXX&x-amz-credentials=AKIABBBBBBBBBBBBBBBB
authenticator server จะเอา AccessKeyID มาจาก query parameter ที่โดน overwrite แล้วนำมาเขียนลง AccessKeyID template value ซึ่งอาจนำไปสู่การยกระดับสิทธิ์ในคลัสเตอร์ EKS เกิดขึ้นได้
วิธีการแก้ไข :
AWS อัปเดตแพตซ์เพื่อแก้ไขช่องโหว่ดังกล่าวเรียบร้อยแล้ว ซึ่งผู้ใช้งานไม่ต้องดำเนินการใดๆ
Self host Kubernetes clusters อัปเดต aws-iam-authenticator เป็น v0.5.9
ไม่ควรใช้ AccessKeyID template value ในการ map user/group
ที่มา : blog.