CVE-2026-55737 in OTP
Riassunto
di VulDB • 27/07/2026
Un errore di conversione da signed a unsigned e una vulnerabilità di scrittura fuori dai limiti (out-of-bounds write) in Erlang OTP erts consentono a un attaccante che può fornire un formato binario esterno di termini Erlang (ETF) costruito ad hoc alla funzione binary_to_term/1 di corrompere il puntatore dell'heap BEAM e far crashare la macchina virtuale.
Durante la decodifica di un termine LARGE_TUPLE_EXT, il passaggio di validazione decoded_size() in erts/emulator/beam/external.c legge il campo arity a 32 bit come unsigned (get_uint32()), mentre il passaggio di decodifica dec_term() legge lo stesso campo come intero signed a 32 bit (get_int32()) assegnandolo a una variabile int. Un valore wire per l'arity pari a 0x80000000 supera la validazione con valore 2147483648 ma viene decodificato come -2147483648, quindi l'operazione successiva hp += n sposta il puntatore di allocazione dell'heap all'indietro. Nessuno dei due passaggi impone il limite runtime MAX_ARITYVAL per l'arity delle tuple. Il risultato è una scrittura fuori dai limiti sull'heap; in pratica la VM rileva una dimensione heap impossibile e termina forzatamente, negando il servizio (DoS). L'intestazione di padding richiesta è grande quando non compressa, ma l'involucro ETF compresso lo riduce a un payload ridotto sulla rete.
Questo problema interessa OTP dalle versioni 25.0 fino alle precedenti 27.3.4.15, 28.5.0.4 e 29.0.4, corrispondenti a erts dalle versioni 13.0 fino alle precedenti 15.2.7.11, 16.4.0.4 e 17.0.4.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.