What Are Serialization and Deserialization?

Serialization là quá trình chuyển đổi các cấu trúc dữ liệu phức tạp, chẳng hạn như các đối tượng và các trường của chúng, thành một định dạng “phẳng” hơn có thể được gửi và nhận dưới dạng một luồng byte tuần tự.

Deserialization là quá trình khôi phục luồng byte này thành một bản sao hoàn toàn chức năng của đối tượng ban đầu, ở trạng thái chính xác như khi nó được tuần tự hóa. Logic của trang web sau đó có thể tương tác với đối tượng đã được giải tuần tự hóa này, giống như với bất kỳ đối tượng nào khác.

Cách các đối tượng được tuần tự hóa phụ thuộc vào ngôn ngữ. Một số ngôn ngữ tuần tự hóa các đối tượng thành các định dạng nhị phân, trong khi các ngôn ngữ khác sử dụng các định dạng chuỗi khác nhau.

Note

Lưu ý rằng tất cả các thuộc tính của đối tượng ban đầu được lưu trữ trong luồng dữ liệu được tuần tự hóa, bao gồm cả các trường riêng tư. Để ngăn một trường không bị tuần tự hóa, nó phải được đánh dấu rõ ràng là “transient” trong khai báo lớp (giống như cách chú thích @Transient của framework Java Spring Boot loại trừ các trường khỏi việc lưu vào cơ sở dữ liệu).

Info

Lưu ý rằng khi làm việc với các ngôn ngữ lập trình khác nhau, serialization có thể được gọi là marshalling (Ruby) hoặc pickling (Python). Các thuật ngữ này đồng nghĩa với “serialization” trong bối cảnh này.

What is Insecure Deserialization?

Insecure deserialization là khi dữ liệu có thể kiểm soát của người dùng được giải tuần tự hóa bởi một trang web.

Thậm chí có thể thay thế một đối tượng được tuần tự hóa bằng một đối tượng của một lớp hoàn toàn khác. Một đối tượng của một lớp không mong muốn có thể gây ra một ngoại lệ. Tuy nhiên, vào thời điểm này, thiệt hại có thể đã xảy ra. Nhiều cuộc tấn công dựa trên deserialization được hoàn thành trước khi quá trình deserialization kết thúc.

How Do Insecure Deserialization Vulnerabilities Arise?

  • Không hiệu quả của việc kiểm tra: việc kiểm tra dữ liệu được giải tuần tự hóa thường quá muộn để ngăn chặn các cuộc tấn công.
  • Niềm tin sai lầm vào việc tuần tự hóa: các đối tượng được giải tuần tự hóa, bao gồm cả các định dạng nhị phân, vẫn có thể bị kẻ tấn công thao túng.
  • Phụ thuộc phức tạp: các trang web hiện đại sử dụng nhiều phụ thuộc, gây khó khăn cho việc bảo vệ chống lại tất cả các cuộc tấn công deserialization.

Tóm lại, có thể cho rằng không thể giải tuần tự hóa một cách an toàn đầu vào không đáng tin cậy.

What is the Impact of Insecure Deserialization?

Nó cho phép kẻ tấn công tái sử dụng mã ứng dụng hiện có theo những cách có hại, dẫn đến nhiều lỗ hổng khác, thường là thực thi mã từ xa. Ngay cả trong các trường hợp không thể thực thi mã từ xa, insecure deserialization có thể dẫn đến leo thang đặc quyền, truy cập tệp tùy ý và các cuộc tấn công từ chối dịch vụ.

How to Exploit Insecure Deserialization Vulnerabilities?

How to Prevent Insecure Deserialization Vulnerabilities?

Generally speaking, deserialization of user input should be avoided unless absolutely necessary.

Resources