Serie A Wrap: Verona, Milan close gap on Inter
Andrea Mandorlini's side raced into a three-goal lead before the break as strikes from Bosko Jankovic, Romulo and Luca Toni looked to have set them up for a comfortable victory.
However that proved to be far from the case as the hosts replied in the second half through Paulinho and Leandro Greco, leaving Verona with a nervy final 17 minutes to hold on for the points.
Their win put pressure on fifth-placed Inter to get a result a couple of hours later, and Walter Mazzarri's side could only manage a 1-1 draw at San Siro with Cagliari.
The visitors went in front in the 40th minute when Mauricio Pinilla tucked home a penalty and although Rolando equalised six minutes after the break, the draw means Inter now hold just a one-point advantage over Verona.
Another side to make ground on Mazzarri's men were city rivals Milan, who continued their resurgence under Clarence Seedorf with a comfortable 2-0 win at 10-man Sampdoria.
Adel Taarabt opened the scoring in the 12th minute then turned provider just before the hour-mark when he crossed for Adil Rami to head home, before Maxi Lopez was sent off for the hosts after receiving two cautions for dissent.
Juventus extended their unbeaten run in Turin derbies to 16 matches as Carlos Tevez's 30th-minute strike earned them a 1-0 win against Torino, a result which sends Antonio Conte's men nine points clear at the top of the table.
At the bottom, Chievo climbed out of the relegation zone with a crucial 2-0 home win over fellow strugglers Catania.
Cyril Thereau's penalty on 37 minutes and Luca Rigoni's strike midway through the second half earned Chievo their first win in 10 matches and deepened the visitors' woes.
Elsewhere, two goals from Stefan Radu and one from Miroslav Klose helped Lazio to a 3-2 win over bottom side Sassuolo, while Antonio Di Natale's 71st-minute penalty rescued a point for Udinese in a 1-1 draw with Atalanta.