Horovod w wersji do v0.28.1 włącznie zawiera krytyczną podatność umożliwiającą zdalne wykonanie kodu (RCE) bez jakiegokolwiek uwierzytelnienia. Atakujący może przejąć pełną kontrolę nad serwerem, wysyłając spreparowane żądanie HTTP.
▸ Pokaż oryginał (EN)
Horovod versions up to and including v0.28.1 are vulnerable to unauthenticated remote code execution. The vulnerability is due to improper handling of base64-encoded data in the `ElasticRendezvousHandler`, a subclass of `KVStoreHandler`. Specifically, the `_put_value` method in `ElasticRendezvousHandler` calls `codec.loads_base64(value)`, which eventually invokes `cloudpickle.loads(decoded)`. This allows an attacker to send a malicious pickle object via a PUT request, leading to arbitrary code execution on the server.
Podatność tkwi w klasie `ElasticRendezvousHandler`, będącej podklasą `KVStoreHandler`. Metoda `_put_value` dekoduje dane z formatu base64 poprzez `codec.loads_base64(value)`, a następnie wywołuje `cloudpickle.loads(decoded)` na uzyskanych danych. Biblioteka `cloudpickle` wykonuje deserializację bez żadnej walidacji zawartości, co oznacza, że atakujący może przesłać złośliwy obiekt pickle w żądaniu HTTP PUT. W wyniku deserializacji serwer wykonuje dowolny kod zawarty w spreparowanym payloadzie.
Nieuwierzytelniony atakujący zdalny może wykonać dowolny kod na serwerze (RCE), co w praktyce oznacza pełne przejęcie kontroli nad maszyną, kradzież danych, instalację backdoora lub dalszy lateral movement w infrastrukturze.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Zaleca się również ograniczenie dostępu sieciowego do endpointów ElasticRendezvous wyłącznie do zaufanych hostów (np. za pomocą firewall lub reguł sieciowych) jako środek tymczasowy do czasu aktualizacji.
Horovod we wszystkich wersjach do v0.28.1 włącznie
Podatność zgłoszona za pośrednictwem platformy huntr.com (bounty 3e398d1f-70c2-4e05-ae22-f5d66b19a754). Deserializacja z użyciem cloudpickle jest z natury niebezpieczna i podatna na wykonanie kodu — każde niezaufane wejście przekazywane do cloudpickle.loads() stanowi krytyczne zagrożenie.
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HHorovod
APPHorovod≤ 0.28.1