Duffy (4-8), who hadn't won in six starts since July 31 -- gave up three runs on four hits over 6 1/3 innings.
Eric Hosmer and Jeff Francoeur homered for the Royals, who have won the first two games of a three-game set with the Athletics. Francoeur and Salvador Perez each finished with three hits, one RBI and two runs scored.
Jemile Weeks had three hits and two RBI, and Cliff Pennington drove in two runs for the A's, who lost for the first time in their last five games.
Gio Gonzalez (12-12) gave up seven runs on 10 hits in five innings.
Oakland scored a run on a ninth-inning bases-loaded walk but Royals' reliever got Hideki Matsui out on a grounder to end the game and pick up his 26th save.