การกำหนดค่าผิดพลาดอย่างร้ายแรงใน AWS CodeBuild ทำให้ผู้โจมตีที่ไม่ได้รับการยืนยันตัวตนสามารถเข้าควบคุมคลัง GitHub ที่สำคัญของ AWS ได้ รวมถึง AWS JavaScript SDK ที่ใช้อย่างแพร่หลายและเป็นส่วนหนึ่งของ AWS Console เอง ช่องโหว่ Supply Chain นี้เป็นภัยคุกคามต่อการประนีประนอมทั่วทั้งแพลตฟอร์ม ซึ่งอาจนำไปสู่การแทรกโค้ดที่เป็นอันตรายเข้าสู่แอปพลิเคชันและ Console ในสภาพแวดล้อม AWS จำนวนมาก
Severity: วิกฤต
System Impact:
- AWS CodeBuild
- GitHub Repositories ของ AWS (aws/aws-sdk-js-v3, aws/aws-lc, corretto/amazon-corretto-crypto-provider, awslabs/open-data-registry)
- AWS JavaScript SDK
- AWS Console
- NPM releases ที่เกี่ยวข้องกับ SDK
- สภาพแวดล้อมคลาวด์ของลูกค้า (โดยนัยจากการประนีประนอมทั่วแพลตฟอร์ม)
- CI/CD Pipelines
Technical Attack Steps:
- **ช่องโหว่:** การกำหนดค่าผิดพลาดในตัวกรองเว็บฮุค (webhook filters) ของ AWS CodeBuild โดยเฉพาะรูปแบบ Regular Expression ที่ไม่มีการตรึงจุดเริ่มต้นและจุดสิ้นสุด (unanchored regex) สำหรับพารามิเตอร์ ACTOR_ID
- **กลไกการหลบเลี่ยง:** การขาดเครื่องหมาย `^` และ `$` ใน Regular Expression ทำให้ตัวกรองจับคู่ ID ผู้ใช้ใดๆ ที่มีสตริงย่อยที่ได้รับอนุมัติอยู่ภายใน แทนที่จะต้องตรงกันทั้งหมด ระบบการกำหนด ID แบบลำดับของ GitHub ทำให้เกิด ID ผู้ใช้ใหม่ที่ ‘ทับซ้อน’ (eclipse) กับ ID ผู้ดูแลเก่าที่เชื่อถือได้บ่อยครั้ง
- **การแสวงหาประโยชน์ (การเข้าถึงเริ่มต้น):** ผู้โจมตีสร้าง GitHub Apps จำนวนมากผ่านขั้นตอน Manifest เพื่อให้ได้ GitHub User ID ใหม่ (eclipse ID) ที่มีสตริงย่อยที่ได้รับอนุมัติอยู่
- **การเรียกใช้งาน Build ที่เป็นอันตราย:** ส่ง Pull Request (PR) โดยใช้ ‘eclipse ID’ ไปยังหนึ่งในคลัง GitHub ของ AWS ที่มีช่องโหว่ ซึ่งจะไปกระตุ้นให้เกิดการ Build ของ CodeBuild ที่มีสิทธิ์พิเศษ
- **การดำเนินการ Payload:** โค้ด Payload ที่ซ่อนอยู่ใน Pull Request ที่เป็นอันตรายจะทำการดัมพ์หน่วยความจำจากสภาพแวดล้อม Build
- **การขโมยข้อมูลรับรอง:** การดัมพ์หน่วยความจำจะดึง GitHub Personal Access Token (PAT) ของบัญชี `aws-sdk-js-automation`
- **การยกระดับสิทธิ์และผลกระทบ:** PAT ที่ถูกขโมยจะให้สิทธิ์ `repo` และ `admin:repo_hook` ซึ่งทำให้ผู้โจมตีสามารถ: เชิญผู้ทำงานร่วมกัน (เพื่อยกระดับสิทธิ์ผู้ดูแลระบบ), พุชไปยัง Main Branch ของคลังที่ถูกบุกรุกโดยตรง, อาจแพร่กระจายโค้ดที่เป็นอันตรายผ่าน NPM releases ของ JavaScript SDK รายสัปดาห์, และอาจฉีดโค้ดที่เป็นอันตรายเข้าสู่แอปพลิเคชันและ AWS Console
Recommendations:
Short Term:
- ตรึง Regular Expressions ของเว็บฮุคทั้งหมดด้วย `^` และ `$` เพื่อให้แน่ใจว่ามีการจับคู่ที่แม่นยำ
- ใช้ Personal Access Tokens (PATs) ที่ละเอียดอ่อนและมีขอบเขตสิทธิ์ที่จำกัดที่สุดเท่าที่จำเป็น
- เปิดใช้งานเกตการอนุมัติ Pull Request (PR approval gates) สำหรับการ Build จากแหล่งที่ไม่น่าเชื่อถือ
- สแกนและระบุการตั้งค่า CodeBuild ที่มีช่องโหว่อย่างสม่ำเสมอ (เช่น ผ่าน Wiz queries)
- ปิดใช้งานการ Build PR อัตโนมัติจากแหล่งที่ไม่น่าเชื่อถือ
Long Term:
- นำกลไกการป้องกันหน่วยความจำที่แข็งแกร่งมาใช้สำหรับสภาพแวดล้อมการ Build
- ทำการตรวจสอบการกำหนดค่า Build สาธารณะอย่างครอบคลุม
- เสริมความแข็งแกร่งด้านความปลอดภัยของ CI/CD Pipeline โดยรวม โดยตระหนักว่าสิ่งเหล่านี้เป็นเป้าหมายที่มีมูลค่าสูงเนื่องจากความซับซ้อน สิทธิ์ที่สูง และการเปิดเผยต่อข้อมูลอินพุตที่ไม่น่าเชื่อถือ
Source: https://cybersecuritynews.com/aws-console-supply-chain-attack/
Share this content: