# Định nghĩa Lỗ hổng `Insecure deserialization` xảy ra khi kẻ tấn công có thể chỉnh sửa, thay đổi các đối tượng, dữ liệu sẽ được thực hiện Deserialize bởi ứng dụng. Họ có thể tận dụng các object sẵn có của ứng dụng, tạo ra các quá trình deserialization theo mục đích riêng, thậm chí có thể dẫn đến tấn công thực thi mã từ xa (RCE). Tấn công deserialization cũng được gọi với cái tên khác là Object injection. ![image](https://hackmd.io/_uploads/S1MUbxCoT.png) # Cách khai thác và phòng chống ## Khai thác - Sửa đổi đối tượng - POP chain: 1 kỹ thuật liên quan đến việc sử dụng lại các đoạn code của chương trình (gọi là các gadget) để liên kết chúng lại thành 1 chuỗi thực thi (chain) đồng thời kết hợp với việc thay đổi các thuộc tính của các đối tượng tạo ra một luồng hoạt động với mục đích tấn công ứng dụng. - Overflow - Phar Deserialization: Giống như tệp JAR của java, ở PHP ta có thể chia sẻ thư viện hoặc toàn bộ ứng dụng dưới dạng một tệp duy nhất đó là PHAR (PHP Archive). Phar là một phần mở rộng trong php, có thể hiểu nôm na nó giống như 1 file zip và bên trong nó chứa mã nguồn php hoặc giống như một kho lưu trữ mã nguồn PHP vậy, nghĩa là tập hợp include các file PHP vào chung 1 phar khi excute thì sẽ tự động thực thi toàn bộ các file PHP bên trong nó mà không cần phải extract các PHP đó vào một thư mục nào trước đó cả. - Dưới đây là một ví dụ về luồng để giúp bạn hình dung một cuộc tấn công Phar Deserialization như thế nào: ![image](https://hackmd.io/_uploads/S1PC8Z0jp.png) ## Phòng chống Tốt nhất là không dùng dữ liệu từ người dùng để thực hiện quá trình deserialization. Tuy nhiên trong trường hợp phải dùng thì cần: - Xác mính tính toàn vẹn của dữ liệu ví dụ như dùng chữ ký số,... - Giới hạn quyền truy cập, chạy ứng dụng trong quyền thấp. - Kiểm tra đầu vào. -Cập nhật các bản vá bảo mật cho các ứng dụng và hệ thống phần mềm để giảm thiểu các lỗ hổng bảo mật.