"Medlen was absolutely fantastic," Yost said. "He was throwing strikes, pitching in, had command of his pitches."
Duffy was staked to a 3-0 lead, but could not hold it and was removed after 3 1/3 innings, his shortest outing since May 6. He allowed three runs on four hits, two walks and a hit batter.
Duffy started the third by walking second baseman Carlos Sanchez and hitting catcher Tyler Flowers with a pitch. Third baseman Gordon Beckham's single scored Sanchez.
A Duffy wild pitch moved the runners up a base, and shortstop Alexei Ramirez got them both home with a single to center.
After Duffy yielded singles to center fielder Trayce Thompson and Sanchez in the fourth, Medlen replaced him. Medlen struck out Flowers and retired Beckham on a fly ball to strand the runners on the corners.
"The long-reliever role gets a little tough sometimes," Medlen said. "You've just got to make sure you're ready out there. Duffy had a little rough patch. I'm just out there trying to do my job. That's probably the most consistent my delivery has felt. It's tough to simulate the game pitches, so I worked a lot in between. I just felt a lot better."
Omar Infante got the winning run home in the eighth inning with a soft ground ball. Second baseman Infante's grounder to first baseman Jose Abreu was enough to score right fielder Alex Rios, who led off the inning with a single and took third on left fielder Paulo Orlando's ground-rule double.
"They're a team that puts the ball in play, they get breaks like that," losing pitcher Jake Petricka said.
It was the pitch to Orlando he would like to have back.
"It was a sinker in, and I think he was sitting for that pitch and he got it and put a good swing on it," Petricka said.
Ben Zobrist gave the Royals a 4-3 lead in the fifth with a run-producing single. Center fielder Jarrod Dyson led off the fifth with a single and moved to second on shortstop Alcides Escobar's sacrifice bunt. Third baseman Zobrist singled to center on an 0-2 pitch to get Dyson home.
The White Sox, however, tied it in the eighth when left fielder Melky Cabrera's two-out single off right-hander Kelvin Herrera scored designated hitter Adam Eaton, who had opened the inning with a double.
Designated hitter Kendrys Morales highlighted the Royals' three-run first inning with a two-run homer. That pushed Morales' RBI total to 80. The last time the Royals had a player with 80s RBIs after 110 games was Mike Sweeney and Jermaine Dye in 2000.
First baseman Eric Hosmer doubled home Escobar, who led off with a walk, with the first run.
White Sox starter Jose Quintana was removed after 6 2/3 innings, allowing four runs on eight hits and two walks.
"With Q, it was tough getting out of the first inning; they knocked him around but we battled back to tie it up," White Sox manager Robin Ventura said. "We did it a couple of times. These guys grinded. Their guys just ended up chipping away."
NOTES: The Royals recalled OF Paulo Orlando from Triple-A Omaha and optioned INF Cheslor Cuthbert to the Storm Chasers. This is Orlando's third stint this season with the big-league club. ... Ben Zobrist made his first start at third base since 2010 as Royals manager Ned Yost rested 3B Mike Moustakas and CF Lorenzo Cain. Moustakas is hitless in his past 12 at-bats and in a 4-for-39 skid. He entered Sunday's game at third base in the eighth inning, but did not have an at-bat. ... White Sox CF Trayce Thompson made his first major-league start. ... Chris Sale, who leads the AL with 186 strikeouts, starts Monday against the Angels as the White Sox open a six-game homestand. ... RHP Johnny Cueto will make his third Royals' start Monday against the Tigers. The Royals have lost his first two starts since being obtained in a July 26 deal with Cincinnati. The Tigers will start LHP Matt Boyd.