The Royals were trailing 5-3 in the ninth when Billy Butler's two-out, two-run double against White Sox closer Addison Reed forged a tie.
Then in the 10th, Cain led off with a single off Brian Omogrosso (0-1), and, after Mike Moustakas struck out, stole second and went to third on Jeff Francoeur's groundout.
Chris Getz was intentionally walked and George Kottaras drew an unintentional base-on-balls to load the bases.
That brought up Gordon, who smashed pitch over the glove of right-fielder Alex Rios as the Royals clinched their rain-delayed three-game series with a seventh win in eight contests.
The rally made a winner of Greg Holland (1-1), who tossed a scoreless top of the 10th.
Rios cracked a two-run homer for the Chisox.
Boston schools pull out free condoms over wrapping complaints
Aaron Carter is still in love with Hilary Duff