The victory, coupled with Minnesota's 2-0 loss to the Cleveland Indians, allows Chicago to reduce the Twins' lead in the American League Central to five games.
The Royals committed three errors but none more costly than that by shortstop Yuniesky Betancourt in the eighth inning which started the three-run rally capped by a two-run double by A.J Pierzynski.
"Everyone knows what's going on," Pierzynski told reporters. "There are no secrets. Every single person in this clubhouse, every single person in this stadium, every single person in major league baseball knows what the situation is.
"We have to try to win every game. To come from behind in the eighth inning is a huge lift. It was a good team win and as big as everyone thought."
White Sox rookie Brent Morel opened the scoring in the bottom of the third with his first major league hit, a solo home run. Willie Bloomquist paced the Royals' offense with a run scored, two doubles and two RBI's.
Kansas City starter Bruce Chen was denied his 10th victory despite pitching seven strong innings, allowing just one run on four hits and one walk while striking out four.
Robinson Tejada was charged with the loss after allowing three runs on two hits and a walk in one inning pitched.
J.J. Putz, just activated off the 15-day disabled list, picked up the victory in relief of White Sox starter Mark Buehrle.
Putz pitched a perfect eighth inning after relieving Buehrle, who pitched seven innings allowing three runs on seven hits and two walks while striking out four. Chris Sale picked up his second save pitching the ninth inning.
(Reporting by Mike Mouat in Windsor, Ontario. Editing by Nick Mulvenney)