ช่องโหว่ระดับ Critical ของ Jenkins ทำให้เซิร์ฟเวอร์เสี่ยงต่อการถูกโจมตี RCE ควรอัปเดตแพตซ์โดยด่วน

ผู้พัฒนาซอฟต์แวร์โอเพ่นซอร์ส Continuous Integration/Continuous Delivery and Deployment - CI/CD อย่าง Jenkins ได้แก้ไขช่องโหว่ด้านความปลอดภัย 9 รายการ ซึ่งรวมถึงช่องโหว่ระดับ critical ที่นำไปสู่การโจมตีแบบ Remote Code Execution (RCE)

ช่องโหว่นี้มีหมายเลข CVE-2024-23897 โดยเป็นช่องโหว่ arbitrary file read ผ่าน Command Line Interface (CLI) ที่มีอยู่ในระบบ

ผู้พัฒนา Jenkins แจ้งในคำแนะนำในวันพุธที่ผ่านมาว่า "Jenkins ใช้ไลบรารี args4j เพื่อวิเคราะห์ arguments และตัวเลือกคำสั่งบนคอนโทรลเลอร์ Jenkins เมื่อประมวลผลคำสั่ง CLI"

ตัววิเคราะห์คำสั่งนี้มีฟีเจอร์แทนที่ตัวอักษร '@' ตามด้วย file path ใน arguments ที่มีเนื้อหาของไฟล์ (expandAtFiles) ฟีเจอร์นี้ถูกเปิดใช้งานเป็นค่าเริ่มต้นใน Jenkins เวอร์ชัน 2.441 และเวอร์ชันก่อนหน้า, LTS 2.426.2 และเวอร์ชันก่อนหน้า ซึ่งไม่ได้มีการปิดใช้งานคุณสมบัตินี้

โดยผู้ไม่หวังดีสามารถใช้ช่องโหว่นี้เพื่อ read arbitrary files บนระบบไฟล์ของคอนโทรลเลอร์ของ Jenkins โดยใช้การเข้ารหัสอักขระเริ่มต้นของกระบวนการคอนโทรลเลอร์ Jenkins

ในขณะที่ผู้โจมตีมีสิทธิ์ "Overall/Read" สามารถอ่านไฟล์ทั้งหมดได้ แต่ผู้โจมตีจะไม่สามารถอ่านข้อมูลสามบรรทัดแรกของไฟล์ได้ ทั้งนี้ขึ้นอยู่กับคำสั่ง CLI ที่ใช้

นอกจากนี้ ช่องโหว่นี้ยังสามารถถูกนำมาใช้เพื่ออ่านไฟล์ที่เป็นไบนารีที่มีคีย์การเข้ารหัสได้ ถึงแม้ว่าจะมีข้อจำกัดก็ตาม หากสามารถดึง binary secrets ได้ โดย Jenkins ระบุว่าอาจทำให้มีโอกาสเกิดการโจมตีในรูปแบบต่าง ๆ ได้ เช่น

  • Remote code execution via Resource Root URLs
  • Remote code execution via "Remember me" cookie
  • Remote code execution via stored cross-site scripting (XSS) attacks through build logs
  • Remote code execution via CSRF protection bypass
  • Decrypt secrets stored in Jenkins
  • Delete any item in Jenkins
  • Download a Java heap dump

Jenkins ระบุว่า "แม้ว่าไฟล์ที่มีข้อมูลที่เป็นไบนารีจะสามารถอ่านได้ แต่ฟีเจอร์ที่ได้รับผลกระทบจะพยายามอ่านไฟล์เหล่านั้นเป็นสตริง โดยใช้การเข้ารหัสตัวอักขระเริ่มต้นของกระบวนการควบคุม"

"การใช้ช่องโหว่นี่มีแนวโน้มที่จะส่งผลให้บางไบต์ไม่สามารถอ่านค่าได้ และถูกแทนที่ด้วยค่าตำแหน่งที่ว่างไว้สำหรับการใส่ข้อมูล ไบต์ที่สามารถอ่านได้ หรือไม่สามารถอ่านได้ขึ้นอยู่กับการเข้ารหัสตัวอักขระ"

นักวิจัยด้านความปลอดภัย 'Yaniv Nizry' ได้รับเครดิตในการค้นพบ และรายงานช่องโหว่ ซึ่งได้รับการแก้ไขไปแล้วใน Jenkins เวอร์ชัน 2.442 และ LTS 2.426.3 โดยการปิดใช้งานฟีเจอร์ command parser

เพื่อเป็นวิธีแก้ปัญหาชั่วคราวจนกว่าจะสามารถอัปเดตแพตช์ได้ แนะนำให้ปิดการเข้าถึง CLI (Command Line Interface) ไปก่อน

การอัปเดตนี้เกิดขึ้นเกือบหนึ่งปีหลังจากที่ Jenkins ได้ทำการแก้ไขช่องโหว่ด้านความปลอดภัยระดับ Critical สองรายการที่ถูกเรียกว่า CorePlague (CVE-2023-27898 และ CVE-2023-27905) ซึ่งอาจนำไปสู่การเรียกใช้โค้ดที่เป็นอันตรายบนระบบเป้าหมาย

ที่มา : thehackernews.com