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.
Moore to attend retreat in to avoid Kutcher's wedding
'How to Train Your Dragon 2' releases 5-minute clip