- ไม่นานมานี้ มีการสร้างห่วงโซ่การโจมตีที่ใช้ช่องโหว่ 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 ความคิดเห็น
คงต้องเข้มงวดกับการตรวจสอบความถูกต้องของข้อมูลที่รับมาจาก
json bodyให้มากจริง ๆ