ก่อนหน้านี้เราพูดถึง Java และ Php Serialization มาแล้ว คราวนี้มาพูดถึง Python Serialization กันบ้าง

*** หากใครงสัยว่า serialization เป็นยังไง กลับไปอ่านที่ Php serializaion แทนละกันครับ

มาดูพฤติกรรมปกติกันก่อน ในที่นี้เราจะใช้ pickle ในการทำ serialization object กัน

ตัว app จะทำการสร้าง serialization จาก my_data แล้ว save ลง backup.data

ทีนี้ถ้าเราจะทำ deserialisation จะเขียนเป็น

ทีนี้มันมีประเด็นที่ว่า pickle นี่มันสามารถใช้สั่งรันคำสั่งได้ หากว่า serialization นั้นถูกสร้างจาก __reduce__(self) method

ดังนั้นการสร้าง object ที่ไม่มีการตรวจสอบอาจส่งผลให้เกิด RCE บนเครื่อง python application ได้ครับ

ตัวอย่าง Payload ที่ถูกใช้กับ Pickle ของ Facebook

Source::