John Danks (2-0) allowed a run on six hits and three walks over 6 1/3 innings for the White Sox, who have won two in a row on the heels of a four-game losing streak. Matt Lindstrom fired a scoreless ninth to notch his second save of the year.
Torii Hunter had two hits and scored a run for Detroit, which had won three of its last four coming in. Anibal Sanchez (0-2) surrendered three runs on five hits and a walk over 6 1/3 frames to get the loss.
The Tigers led 1-0 through six innings, but a three-run seventh put Chicago in front.
Back-to-back doubles by Connor Gillaspie and Abreu to begin the frame tied it. After Adam Dunn struck out, Abreu crossed with the go-ahead run on Viciedo's two-bagger off the top of the center field wall.
Alexei Ramirez then singled through the hole on the left side. Viciedo had originally held up at third, but the left fielder Rajai Davis overshot the cutoff man and the ball darted past catcher Alex Avila, which allowed Viciedo to score.
Sanchez, who backed up on the play, threw Viciedo out at the plate, but Viciedo was ruled safe following a review.
Avila hit a one-out, ground-rule double and pinch-hitter J.D. Martinez worked a walk in the ninth, but Davis flied out to center and Ian Kinsler grounded into a force out to end the game.
Detroit's lone run came in the second on Avila's RBI groundout.