CWE-502: Giải tuần tự hóa dữ liệu không đáng tin cậy

CWE-502 là gì?

CWE-502 là giải tuần tự hóa dữ liệu không đáng tin cậy. Lỗi phát sinh khi sản phẩm giải tuần tự hóa dữ liệu không đáng tin cậy mà không bảo đảm đầy đủ rằng dữ liệu kết quả là hợp lệ.

THỨ HẠNG OWASP TOP 10:20258 — A08:2025 — Software or Data Integrity Failures
Tổng số CVE liên quan (365 ngày)-
Mức trừu tượngCơ bản
Khả năng khai thácTrung bình

Không có dữ liệu

Chưa có dữ liệu về lỗ hổng cho CWE-502

Không có dữ liệu

Chưa có dữ liệu về lỗ hổng trong CISA KEV cho CWE-502

Định nghĩa chính thức

TheoMitre CWE

Chi tiết kỹ thuật

Tuần tự hóa đóng gói dữ liệu liên quan đến đối tượng để lưu trữ hoặc truyền đi; giải tuần tự hóa lấy dữ liệu đó và tái tạo đối tượng ban đầu. Lỗi xảy ra khi sản phẩm coi dữ liệu được tái tạo là hợp lệ hoặc đáng tin cậy mà không kiểm tra đầy đủ kiểu, giá trị, trạng thái và các hành vi có thể được kích hoạt trong quá trình này. Kẻ tấn công có thể tạo hoặc sửa dữ liệu để tái tạo các đối tượng bất ngờ, gọi phương thức ngoài dự kiến hoặc kích hoạt chuỗi gadget trong các thư viện. Vì vậy, tác động phụ thuộc vào các kiểu đối tượng và phương thức có sẵn cũng như cách ứng dụng sử dụng chúng; lỗi thường bắt nguồn từ việc thiếu biện pháp bảo mật ở giai đoạn kiến trúc, thiết kế hoặc triển khai.

Đặc điểm

Điểm cốt lõi là dữ liệu bên ngoài được dùng để tái tạo đối tượng hoặc trạng thái nội bộ mà không được bảo đảm hợp lệ trước khi sử dụng. Quá trình này còn được gọi là unmarshaling, pickling hoặc unpickling trong một số ngữ cảnh; trong Python, pickle thực hiện tuần tự hóa và giải tuần tự hóa. Khi các lớp, phương thức hoặc gadget không nên được gọi vẫn có thể được tái tạo, dữ liệu có thể bỏ qua các hàm truy cập an toàn và làm thay đổi trạng thái ứng dụng. Bản ghi áp dụng cho Java, Ruby, PHP, Python và JavaScript; nền tảng công nghệ có thể là không đặc thù, ICS/OT hoặc AI/ML.

Hậu quả thường gặp

  • Tính toàn vẹn: Kẻ tấn công có thể sửa dữ liệu ứng dụng hoặc tạo trạng thái ứng dụng bất ngờ. Dữ liệu hay mã được giải tuần tự hóa có thể bỏ qua các hàm truy cập dự kiến, đồng thời kích hoạt các hàm không mong muốn.
  • Tính sẵn sàng: Trình phân tích hoặc hàm dựa vào sentinel để xác định thời điểm kết thúc có thể bị khiến không kết thúc, dẫn đến tiêu thụ CPU và từ chối dịch vụ.
  • Tác động khác: Kết quả thay đổi theo các đối tượng và phương thức liên quan. Việc giả định mã trong đối tượng đã giải tuần tự hóa là hợp lệ có thể cho phép hành động trái phép, chẳng hạn hành vi của chuỗi gadget để tạo shell.
Dữ liệu MITRE CWE chính thức
Tác độngPhạm viDiễn giải
Thay đổi dữ liệu ứng dụng, Trạng thái ngoài dự kiếnTính toàn vẹnAttackers can modify unexpected objects or data that was assumed to be safe from modification. Deserialized data or code could be modified without using the provided accessor functions, or unexpected functions could be invoked.
Từ chối dịch vụ: tiêu thụ tài nguyên CPUTính sẵn sàngIf a function is making an assumption on when to terminate, based on a sentry in a string, it could easily never terminate.
Thay đổi tùy ngữ cảnhKhácThe consequences can vary widely, because it depends on which objects or methods are being deserialized, and how they are used. Making an assumption that the code in the deserialized object is valid is dangerous and can enable exploitation. One example is attackers using gadget chains to perform unauthorized actions, such as generating a shell.

Biện pháp giảm thiểu rủi ro

  • Xác thực dữ liệu đã tuần tự hóa: Khi ngôn ngữ cung cấp, sử dụng cơ chế ký hoặc niêm phong, chẳng hạn HMAC, để kiểm tra dữ liệu đã tuần tự hóa không bị sửa đổi.
  • Kiểm tra vào đối tượng mới: Khi giải tuần tự hóa, hãy tạo và nạp một đối tượng mới để dữ liệu đi qua kiểm tra đầu vào an toàn và sử dụng các hàm an toàn.
  • Ngăn giải tuần tự hóa khi phù hợp: Khai báo rõ một object cuối cùng để ngăn việc giải tuần tự hóa.
  • Bảo vệ các trường: Đánh dấu các trường là transient để các giá trị phụ thuộc thời gian, môi trường hoặc chứa thông tin nhạy cảm không được mang qua quá trình tuần tự hóa và giải tuần tự hóa; sau một vòng chuyển đổi, các trường này trở thành NULL.
  • Giảm khả năng khai thác gadget: Tránh các kiểu dữ liệu và gadget giải tuần tự hóa không cần thiết, đồng thời chỉ cho phép các lớp chấp nhận được trong allowlist. Biện pháp này không đủ nếu dùng riêng vì các gadget mới liên tục được phát hiện.
  • Bảo vệ dữ liệu hoặc mã bằng mật mã: Mật mã có thể bảo vệ dữ liệu hoặc mã, nhưng cơ chế mật mã phía máy khách vẫn có thể bị vượt qua nếu máy khách bị xâm nhập.
  • Bổ sung tường lửa ứng dụng: Tường lửa có thể tạo lớp phòng thủ bổ sung, nhất là khi mã dễ lỗi do bên thứ ba kiểm soát hoặc chưa thể sửa ngay. Hiệu quả ở mức trung bình và cơ chế này có thể bỏ sót vectơ đầu vào, bị vượt qua bằng đầu vào bất thường vẫn được xử lý, từ chối hoặc sửa đổi yêu cầu hợp lệ, hoặc cần tùy chỉnh thủ công.
Dữ liệu MITRE CWE chính thức
  1. Kiến trúc và thiết kế, Hiện thực hóaIf available, use the signing/sealing features of the programming language to assure that deserialized data has not been tainted. For example, a hash-based message authentication code (HMAC) could be used to ensure that data has not been modified.
  2. Hiện thực hóaWhen deserializing data, populate a new object rather than just deserializing. The result is that the data flows through safe input validation and that the functions are safe.
  3. Hiện thực hóaExplicitly define a final object() to prevent deserialization.
  4. Kiến trúc và thiết kế, Hiện thực hóaMake fields transient to protect them from deserialization. An attempt to serialize and then deserialize a class containing transient fields will result in NULLs where the transient data should be. This is an excellent way to prevent time, environment-based, or sensitive variables from being carried over and used improperly.
  5. Hiện thực hóaAvoid having unnecessary types or gadgets (a sequence of instances and method invocations that can self-execute during the deserialization process, often found in libraries) available that can be leveraged for malicious ends. This limits the potential for unintended or unauthorized types and gadgets to be leveraged by the attacker. Add only acceptable classes to an allowlist. Note: new gadgets are constantly being discovered, so this alone is not a sufficient mitigation.
  6. Kiến trúc và thiết kế, Hiện thực hóaEmploy cryptography of the data or code for protection. However, it's important to note that it would still be client-side security. This is risky because if the client is compromised then the security implemented on the client (the cryptography) can be bypassed.
  7. Tường lửa · Vận hành · Hiệu quả: KháUse an application firewall that can detect attacks against this weakness. It can be beneficial in cases in which the code cannot be fixed (because it is controlled by a third party), as an emergency prevention measure while more comprehensive software assurance measures are applied, or to provide defense in depth [REF-1481].An application firewall might not cover all possible input vectors. In addition, attack techniques might be available to bypass the protection mechanism, such as using malformed inputs that can still be processed by the component that receives those inputs. Depending on functionality, an application firewall might inadvertently reject or modify legitimate requests. Finally, some manual effort may be required for customization.

Cách phát hiện trong hệ thống

Phân tích tĩnh tự động, còn gọi là SAST, có thể phát hiện một số trường hợp bằng cách phân tích mã nguồn hoặc mã nhị phân mà không cần thực thi. Phương pháp này thường lập mô hình luồng dữ liệu và luồng điều khiển, sau đó tìm các mẫu nối nguồn đầu vào với các điểm đích nơi dữ liệu tương tác với thành phần bên ngoài hoặc lớp thấp hơn. Cách phát hiện này có hiệu quả cao nhưng không nhất thiết bao quát mọi trường hợp hoặc hành vi chỉ xuất hiện khi chạy.

Dữ liệu MITRE CWE chính thức
Phương phápCách làmHiệu quả
Phân tích tĩnh tự độngAutomated static analysis, commonly referred to as Static Application Security Testing (SAST), can find some instances of this weakness by analyzing source code (or binary/compiled code) without having to execute it. Typically, this is done by building a model of data flow and control flow, then searching for potentially-vulnerable patterns that connect "sources" (origins of input) with "sinks" (destinations where the data interacts with external components, a lower layer such as the OS, etc.)Cao

Lỗ hổng điển hình

Các ví dụ đại diện trong hồ sơ gồm: CVE-2024-37052, trong đó đối tượng pickle được tạo riêng trong tệp mô hình AI/ML dẫn đến thực thi mã; CVE-2024-37288, liên quan đến giải tuần tự hóa YAML không đáng tin cậy; và CVE-2024-9314, liên quan đến PHP object injection trong một plugin WordPress. Các ví dụ khác cho thấy việc dùng unserialize của PHP có thể sửa cấu hình hoặc dẫn đến thực thi mã (CVE-2013-1465, CVE-2012-3527, CVE-2012-0911), còn các thư viện Java và tập lệnh Python có thể dẫn đến thực thi mã (CVE-2015-8103, CVE-2015-4852, CVE-2011-2520, CVE-2012-4406). Hồ sơ cũng ghi nhận việc vượt qua vấn đề giải tuần tự hóa bằng lớp được giả định là đáng tin cậy (CVE-2019-12799) và việc trình duyệt gọi phương thức gốc thông qua chuỗi được giải tuần tự hóa trong hàm JavaScript (CVE-2012-4406, CVE-2003-0791); đây là các ví dụ đại diện, không phải toàn bộ số lỗ hổng.

Nguồn (2)

CWE™ Program, operated by The MITRE Corporation. Copyright © 2006–2026, The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. CWE Terms of Use.

Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.