Chicago avoided a three-game sweep and snapped the Blue Jays' three-game winning streak.
Alex Rios hit a two-run homer for the White Sox to tie it in the sixth inning and the contest remained deadlocked until Chicago came through in the ninth.
Francisco Cordero (1-3) came on for Toronto to try to get the game to extra innings, but he gave up a one-out single to Viciedo and then uncorked a wild pitch that allowed the runner to go to second.
Cordero got Alexei Ramirez on a long fly ball to center that moved Viciedo to third and Hudson came through with his clutch hit on a 1-1 pitch.
The win went to Addison Reed (1-1), who allowed a hit and struck out one while working the top of the ninth. It was Reed's first major league win in 29 major league relief appearances scattered over two seasons.
NBC reportedly holds celebs hostage to Jimmy Fallon's show
Ray Liotta sues skin care company over use of likeness