The Cavaliers (5-2, 3-1 ACC) won their third straight game when trailing at halftime and have won five in a row for the first time since a six-game streak bridging the 1997 and 1998 seasons.
Just 44 seconds into the final period, wide receiver Billy McMullen ran one yard for a touchdown on his only carry of the day to put Virginia in front for the first time since the second quarter, 13-10.
Schaub completed 23 of 32 passes for 208 yards, including 11 to running back Wali Lundy, who broke his own school record of nine catches, set earlier this year in a win over Wake Forest.
The Tigers took a 10-6 lead in the final minute of the first half when Tye Hill broke off a 32-yard run on the first play after Schaub was intercepted.
Clemson fell to 3-3, 1-2, despite outgaining Virginia, 412 yards to 288.