ช่องโหว่ Zero-Day SOQL Injection ระดับ Critical ใน Salesforce ส่งผลกระทบต่อผู้ใช้งานหลายล้านคนทั่วโลก

 

พบช่องโหว่ Zero-Day ระดับ Critical ซึ่งถูกพบใน default controller ของ Salesforce อาจทำให้มีการเปิดเผยข้อมูลผู้ใช้หลายล้านรายคน จากการใช้งานหลายพันครั้งทั่วโลก

ช่องโหว่นี้ถูกค้นพบใน Controller ภายในชื่อ aura://CsvDataImportResourceFamilyController/ACTION$getCsvAutoMap ซึ่งทำให้ผู้โจมตีสามารถดึงข้อมูลสำคัญของผู้ใช้งาน และรายละเอียดเอกสารออกมาได้ โดยไม่ต้องผ่านการยืนยันตัวตน โดยการใช้เทคนิคที่เรียกว่า SOQL Injection

ช่องโหว่ Zero-Day แบบ SOQL Injection

ช่องโหว่นี้ถูกค้นพบระหว่างการทดสอบ fuzzing อัตโนมัติบน Aura controllers ที่ใช้ในระบบ Salesforce

มีการพัฒนา parser และ fuzzer แบบกำหนดเองขึ้นมาเพื่อทดสอบ endpoint หลายร้อยรายการ โดยทำการเปลี่ยนแปลงค่าพารามิเตอร์ที่ส่งเข้าไปในไฟล์ app.js ของแอปพลิเคชัน ซึ่งไฟล์นี้เป็นจุดที่กำหนด Controller descriptor และ argument ที่จำเป็นได้อย่างสะดวก

ตามที่นักวิจัยด้านความปลอดภัย Tobia Righi ระบุว่า การค้นพบเหตุการณ์นี้เกิดขึ้นเมื่อ fuzzer มีการ return ข้อความแสดงข้อผิดพลาด ซึ่งเปิดเผยการจัดการพารามิเตอร์ที่ไม่ปลอดภัย: “MALFORMED_QUERY: \nContentVersion WHERE ContentDocumentId = ”’\n ERROR at Row:1:Column:239\nunexpected token: ”'”

ข้อความผิดพลาดนี้แสดงให้เห็นว่า พารามิเตอร์ ContentDocumentId ถูกฝังลงในคำสั่ง SOQL โดยตรงโดยไม่มีการตรวจสอบข้อมูลอย่างเหมาะสม ซึ่งเปิดช่องให้เกิดการโจมตีแบบ Injection ได้

แม้ว่า SOQL จะมีข้อจำกัดมากกว่าเมื่อเทียบกับช่องโหว่ SQL Injection แบบดั้งเดิม แต่นักวิจัยสามารถพัฒนาเทคนิคการโจมตีโดยอาศัยวิธี error-based blind injection ได้สำเร็จ

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

โดยการสร้าง payload เช่น 069TP00000HbJbNYAV’ AND OwnerId IN (SELECT Id FROM User WHERE Email LIKE ‘a%25’) AND ContentDocumentId != ‘, ซึ่งผู้โจมตีสามารถระบุ column contents ของ object ที่เกี่ยวข้องกับ ContentDocument ได้

เทคนิคนี้ใช้ประโยชน์จากการตอบสนองของเซิร์ฟเวอร์ที่แตกต่างกัน:

successful subqueries จะ returned :
“Cannot invoke “common.udd.EntityInfo.getEntityId()” because “ei” is null”,

ในขณะที่ unsuccessful subquery จะ returned : “Error in retrieving content document”

นักวิจัยได้ยกระดับการโจมตีโดยการใช้เทคนิคการสร้าง Salesforce ID มาใช้ โดยใช้สคริปต์ที่มีอยู่แล้วในการสร้างค่า contentDocumentId ที่ถูกต้องหลายพันรายการ ซึ่งเริ่มต้นด้วย prefix “069”

เทคนิคนี้ทำให้สามารถดึงข้อมูลชื่อเอกสาร, คำอธิบาย และรายละเอียดของผู้ใช้ออกจาก object ContentDocument ทั้งที่เป็นแบบสาธารณะ และแบบส่วนตัวได้อย่างเป็นระบบทั่วทั้งแพลตฟอร์ม

แพตช์ถูกเผยแพร่แล้ว

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

เมื่อมีการรายงานช่องโหว่นี้ไปยัง Salesforce ในช่วงปลายเดือนกุมภาพันธ์ 2025 บริษัทฯ ได้ทำการแก้ไขช่องโหว่อย่างเงียบ ๆ โดยไม่ออกคำแนะนำสู่สาธารณะ ไม่มีการกำหนดรหัส CVE หรือการยอมรับใน release notes

ผลกระทบของช่องโหว่ขยายออกไปไกลเกินกว่าองค์กรแต่ละแห่ง เนื่องจาก Controller ที่ได้รับผลกระทบปรากฏอยู่ใน Salesforce ทุกรุ่นตามค่าเริ่มต้น

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

ที่มา : cybersecuritynews