Spain had 72.4% of possession in the first half but failed to score.
They finally took the lead after 55 minutes when keeper Gianluigi Buffon missed an attempted clearance to leave Vitolo to sidefoot in.
Italy rarely threatened but, after Sergio Ramos tripped Eder, De Rossi equalised to extend his country's unbeaten run in qualifiers to 52 games.
The last time the Azzurri lost a World Cup or European qualifier was in September 2006 when they were beaten 3-1 by France on their way to reaching Euro 2008.
Italy and Spain now have four points from two games, with Albania, who beat Liechtenstein 2-0, top of Group G on six points.
Israel won 2-1 in Macedonia in the other game in the group.
Spain were out to avenge their defeat by the Azzurri in the last 16 of Euro 2016 and quickly took control of the match.
They went close when Andres Iniesta played a one-two with David Silva only to see a weakly struck left-footed shot saved before Gerard Pique sent a close-range header straight at Buffon.
Spain looked set for victory after 38-year-old Buffon's error as he completely missed the ball when trying to clear a through ball to Vitolo.
However, substitute Ciro Immobile brought some much-needed energy and threat to the home attack and a rash Ramos challenge allowed De Rossi to score.
Iceland shocked England when they knocked them out of Euro 2016 and seemed to be on course for a reality check when trailing Finland 2-1 in their first home 2018 World Cup qualifier since then.
But Alfred Finnbogason equalised in the 90th minute before Fulham's Ragnar Sigurdsson, who scored in the 2-1 win over England, got a winner in the fifth minute of added time.
Finland had opened the scoring through Teemu Pukki and, even though Kari Arnason equalised, Robin Lod quickly restored the visiting side's lead.
Gylfi Sigurdsson missed a penalty to compound Iceland's misery before the late drama.
Iceland are now second in Group I, level on four points with leaders Croatia, who beat Kosovo 6-0 in Albania.
Ukraine drew 2-2 in Turkey and they are third and fourth respectively in the same group.
Match ends, Italy 1, Spain 1.
Second Half ends, Italy 1, Spain 1.
Nacho (Spain) wins a free kick on the left wing.
Foul by Alessandro Florenzi (Italy).
Nacho (Spain) wins a free kick in the defensive half.
Foul by Andrea Belotti (Italy).
Foul by Álvaro Morata (Spain).
Daniele De Rossi (Italy) wins a free kick in the defensive half.
Attempt blocked. Andrés Iniesta (Spain) right footed shot from outside the box is blocked.
Leonardo Bonucci (Italy) is shown the yellow card for a bad foul.
Álvaro Morata (Spain) wins a free kick on the left wing.
Foul by Leonardo Bonucci (Italy).
Offside, Italy. Alessandro Florenzi tries a through ball, but Ciro Immobile is caught offside.
Attempt missed. Ciro Immobile (Italy) left footed shot from a difficult angle on the left misses to the right. Assisted by Daniele De Rossi following a set piece situation.
Gerard Piqué (Spain) is shown the yellow card for a bad foul.
Foul by Gerard Piqué (Spain).
Ciro Immobile (Italy) wins a free kick in the attacking half.
Substitution, Spain. Thiago Alcántara replaces Vitolo.
Foul by Nacho (Spain).
Leonardo Bonucci (Italy) wins a free kick in the defensive half.
Goal!  Italy 1, Spain 1. Daniele De Rossi (Italy) converts the penalty with a right footed shot to the bottom left corner.
Penalty conceded by Sergio Ramos (Spain) after a foul in the penalty area.
Penalty Italy. Éder draws a foul in the penalty area.
Hand ball by Sergio Busquets (Spain).
Corner,  Italy. Conceded by Gerard Piqué.
Substitution, Italy. Andrea Belotti replaces Marco Parolo.
Sergio Ramos (Spain) is shown the yellow card for a bad foul.
Foul by Sergio Ramos (Spain).
Alessandro Florenzi (Italy) wins a free kick in the attacking half.
Corner,  Spain. Conceded by Mattia De Sciglio.
Offside, Italy. Leonardo Bonucci tries a through ball, but Ciro Immobile is caught offside.
Attempt blocked. Ciro Immobile (Italy) right footed shot from the left side of the box is blocked. Assisted by Mattia De Sciglio.
Vitolo (Spain) wins a free kick in the defensive half.
Foul by Alessio Romagnoli (Italy).
Koke (Spain) wins a free kick in the defensive half.
Foul by Giacomo Bonaventura (Italy).
Attempt missed. Alessio Romagnoli (Italy) header from the centre of the box is high and wide to the right. Assisted by Alessandro Florenzi with a cross following a set piece situation.
Foul by Sergio Ramos (Spain).
Andrea Barzagli (Italy) wins a free kick on the right wing.
Attempt missed. Vitolo (Spain) right footed shot from the centre of the box misses to the left. Assisted by Koke.
Italy salvaged a draw in a 2018 World Cup qualifier against Spain with a late Daniele de Rossi penalty.