The Cavaliers ended a nine-game losing streak, coming back from a 12-point deficit at the start of the fourth quarter.
Two free throws by Lester Hudson with 5 seconds remaining produced the final points of the game and wrapped up the victory.
Hudson scored 23 points and had seven assists, playing 32 minutes off the bench while point guard Kyrie Irving sat out the contest with a sore shoulder.
DeMar DeRozan had 28 points for Toronto, which lost for the first time in four games.
The Cavaliers went on a 23-5 outburst to begin the fourth quarter and eventually outscored Toronto in the period 33-7.