23 คะแนน โดย xguru 2024-11-06 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ไม่นานมานี้ มีการสร้างห่วงโซ่การโจมตีที่ใช้ช่องโหว่ JSON injection ในอุปกรณ์ Samsung จนไปถึงการรันโค้ดบนอุปกรณ์ได้
  • กรณีนี้ถือเป็นบทเรียนว่าควรถูกนำไปใช้เป็นตัวอย่างของการโจมตี API ที่เชื่อถือ JSON payload แบบไม่ตรวจสอบได้อย่างไร

ฉีดข้อมูลเข้าไปในทุกสิ่งอย่าง "สมาร์ต"

  • ในกรณีของ Samsung Smart Hub แอปมือถือสามารถสื่อสารกับฮับจากระยะไกลเพื่อควบคุมทุกอุปกรณ์ที่เชื่อมต่ออยู่ได้
  • โดยส่งคำขอ POST ที่เป็นอันตรายไปยังเอ็นด์พอยต์ /credentials ผู้โจมตีสามารถแก้ไขข้อมูลรับรองที่ใช้ให้ฮับเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล และบิดเบือนข้อมูลจนพาไปสู่ SQL injection ได้
  • ไลบรารี json-c ที่ Samsung พึ่งพาถูกคอมไพล์ด้วย JSON_TOKENER_STRICT=0 ทำให้สามารถกำหนดสตริงได้ทั้งด้วย single quote และ double quote
  • สิ่งนี้ทำให้ผู้โจมตีสามารถสร้างคอลัมน์แบบกำหนดเองในฐานข้อมูล sqlite ภายในของฮับได้
  • จากนั้นสามารถแทรก ROP chain ที่ยาวเกินปกติลงในตาราง camera แล้วส่งคำสั่ง DELETE ไปยังเอ็นด์พอยต์ /cameras เพื่อทำให้โปรเซส video-core พยายามอ่านข้อมูลจนแครช และก่อให้เกิด stack-based buffer overflow แบบดั้งเดิมได้
  • บทเรียนจากกรณีนี้คือ JSON injection → SQL injection → buffer overflow → ROP = ยึดระบบได้

JSON injection คืออะไร?

  • JSON injection คือช่องโหว่ที่ผู้โจมตีสามารถแทรกข้อมูลอันตรายเข้าไปใน JSON stream เพื่อเปลี่ยนพฤติกรรมของแอปพลิเคชันหรือกระตุ้นการทำงานที่ไม่ได้ตั้งใจ
  • Server-side JSON injection เกิดขึ้นเมื่อข้อมูลจากแหล่งที่ไม่น่าเชื่อถือไม่ได้รับการทำความสะอาดอย่างเหมาะสมบนฝั่งเซิร์ฟเวอร์ และถูกนำไปใช้ในโค้ดทั้งทางตรงหรือทางอ้อม

ปัญหาอยู่ที่ parser

  • ในเว็บแอปพลิเคชันและ API สมัยใหม่ อาจมีการใช้ parser หลายตัวใน request pipeline ซึ่งแต่ละตัวก็มีลักษณะเฉพาะและช่องโหว่ของตัวเอง
  • ความไม่สอดคล้องกันระหว่าง parser เมื่อรวมกับการประมวลผลคำขอหลายขั้นตอน อาจนำไปสู่ช่องโหว่ร้ายแรงได้
  • JSON parser ต้องเผชิญกับความยากลำบากเพราะ JSON RFC อย่างเป็นทางการเปิดช่องเรื่องต่าง ๆ ไว้ เช่น duplicate key และการแทนค่าตัวเลข
  • RFC อย่างเป็นทางการไม่ใช่มาตรฐานเพียงแบบเดียว ยังมี ECMAScript, JSON5, HJSON และ Binary JSON(BSON) ด้วย
  • การทำงานร่วมกันระหว่าง parser เปิดเผยความเสี่ยงด้านความปลอดภัยที่หลายคนไม่รู้ด้วยซ้ำว่ามีอยู่

ปัญหาด้านความปลอดภัยจากการทำงานร่วมกันของ JSON parser

  • ความไม่สอดคล้องกันในการจัดการ duplicate key
  • ความไม่สอดคล้องกันในการจัดการอักขระพิเศษหรือคอมเมนต์
  • ความไม่สอดคล้องกันของการ (de)serialization ของ JSON

จะนำ JSON ไปใช้โจมตีอย่างไร?

  • สามารถบิดเบือน JSON เพื่อฉีดข้อมูลให้แอปพลิเคชันทำงานในลักษณะที่นักพัฒนาไม่ได้คาดไว้
  • เมื่อสามารถควบคุมวิธีที่ข้อมูลไหลผ่านองค์ประกอบต่าง ๆ ภายในโครงสร้างพื้นฐานของ API ได้ ก็จะมีโอกาสควบคุม business logic ได้ด้วย
  • หากเข้าใจวิธีที่ parser ประมวลผลอินพุต ก็สามารถอาศัยพฤติกรรมของ parser เพื่อทำให้ข้อมูลถูกตีความในแบบที่เอื้อต่อการบิดเบือนข้อมูล และหลบเลี่ยงการตรวจสอบอินพุตได้

สรุป

  • การโจมตี Samsung Smart Hub เป็นเพียงตัวอย่างหนึ่งที่แสดงให้เห็นว่า JSON injection สามารถนำไปสู่ห่วงโซ่ช่องโหว่ที่ซับซ้อนได้ ตั้งแต่ SQL injection ไปจนถึง remote code execution
  • ต้นตอของปัญหามักอยู่ที่ความไม่สอดคล้องกันของวิธีจัดการข้อมูลใน JSON parser โดยเฉพาะเมื่อมี parser แปลก ๆ หลายตัวเข้ามาเกี่ยวข้อง
  • การตรวจสอบอย่างละเอียดว่า JSON object ถูก serialize, deserialize และประมวลผลอย่างไร จะช่วยให้ค้นพบวิธีสร้าง payload ที่สามารถหลบเลี่ยงฟิลเตอร์การทำความสะอาดและส่งผลต่อ business logic ได้
  • เนื่องจาก API ยังคงเป็นรากฐานสำคัญของแอปพลิเคชันสมัยใหม่ การทำให้แน่ใจว่าการจัดการข้อมูลของ API มีความปลอดภัยจึงสำคัญกว่าที่เคย

1 ความคิดเห็น

 
yangeok 2024-11-08

คงต้องเข้มงวดกับการตรวจสอบความถูกต้องของข้อมูลที่รับมาจาก json body ให้มากจริง ๆ