The visitors needed two points in the remaining two rounds to guarantee Serie A safety. Simone Bastoni was suspended, with Leo Sena, Ebrima Colley and Hristov injured, while the hosts had Rodrigo Becao banned, Beto and Isaac Success on the treatment table.
It was an aggressive Spezia start, Rey Manaj hitting the side-netting and setting up Kevin Agudelo to force a tough save from Marco Silvestri.
However, Udinese took the lead when Ivan Provedel made a fine save on Destiny Udogie’s header, but Giulio Maggiore gave it straight back to Nahuel Molina for a ferocious first-time strike into the far top corner from a tricky angle.
Spezia also lost Arkadiusz Reca to injury just 30 minutes in, but his replacement Salva Ferrer whipped in the cross for the equaliser, a magnificent flying cushioned volley by Daniele Verde.
The visitors turned it around completely in first half stoppages and again Ferrer was the provider, this time a sliding tackle to gain control from Pablo Marì and setting up Emmanuel Gyasi for a smart turn and finish from 12 yards.
Udinese were still in the locker room when the second half kicked off and Spezia took full advantage by going 3-1 up. Verde got a low cross in from the left and Maggiore bundled over the line in two attempts, as Silvestri got something on the first.
The Friulani struggled to mount much of a reaction, Molina twice turning wide in the same move from Gerard Deulofeu crosses.
Spezia had a penalty in stoppages when Molina shoved Viktor Kovalenko mid-air and Manaj insisted on taking the penalty, but blasted it well over the bar.
This prompted a very late scare, because Udinese got one back when Deulofeu’s free kick was flicked in off the head of Pablo Marì.
Udinese 2-3 Spezia
Molina 26 (U), Verde 35 (S), Gyasi 45 (S), Maggiore 47 (S), Pablo Marì 93 (U)
Missed penalty: Manaj 91 (S)