การกำหนดค่าผิดพลาดอย่างร้ายแรงใน 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:

     

  1. **ช่องโหว่:** การกำหนดค่าผิดพลาดในตัวกรองเว็บฮุค (webhook filters) ของ AWS CodeBuild โดยเฉพาะรูปแบบ Regular Expression ที่ไม่มีการตรึงจุดเริ่มต้นและจุดสิ้นสุด (unanchored regex) สำหรับพารามิเตอร์ ACTOR_ID
  2. **กลไกการหลบเลี่ยง:** การขาดเครื่องหมาย `^` และ `$` ใน Regular Expression ทำให้ตัวกรองจับคู่ ID ผู้ใช้ใดๆ ที่มีสตริงย่อยที่ได้รับอนุมัติอยู่ภายใน แทนที่จะต้องตรงกันทั้งหมด ระบบการกำหนด ID แบบลำดับของ GitHub ทำให้เกิด ID ผู้ใช้ใหม่ที่ ‘ทับซ้อน’ (eclipse) กับ ID ผู้ดูแลเก่าที่เชื่อถือได้บ่อยครั้ง
  3. **การแสวงหาประโยชน์ (การเข้าถึงเริ่มต้น):** ผู้โจมตีสร้าง GitHub Apps จำนวนมากผ่านขั้นตอน Manifest เพื่อให้ได้ GitHub User ID ใหม่ (eclipse ID) ที่มีสตริงย่อยที่ได้รับอนุมัติอยู่
  4. **การเรียกใช้งาน Build ที่เป็นอันตราย:** ส่ง Pull Request (PR) โดยใช้ ‘eclipse ID’ ไปยังหนึ่งในคลัง GitHub ของ AWS ที่มีช่องโหว่ ซึ่งจะไปกระตุ้นให้เกิดการ Build ของ CodeBuild ที่มีสิทธิ์พิเศษ
  5. **การดำเนินการ Payload:** โค้ด Payload ที่ซ่อนอยู่ใน Pull Request ที่เป็นอันตรายจะทำการดัมพ์หน่วยความจำจากสภาพแวดล้อม Build
  6. **การขโมยข้อมูลรับรอง:** การดัมพ์หน่วยความจำจะดึง GitHub Personal Access Token (PAT) ของบัญชี `aws-sdk-js-automation`
  7. **การยกระดับสิทธิ์และผลกระทบ:** 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:

Leave a Reply

Your email address will not be published. Required fields are marked *