Eloy Jimenez went 4-for-5 and scored two runs as the White Sox reached the 10-run mark for the third time since the All-Star break, doing so in six innings after erasing an early four-run hole.
Anthony Santander homered and doubled for Baltimore, which continues to lead the American League East.
The Orioles were aiming for their third sweep of a three-game series in August. Instead, they won the first two games and dropped the finale - just as they did over the weekend vs. Colorado. Still, Baltimore wrapped up a 6-3 homestand.
The White Sox, who had lost two straight and four of their previous six games, cranked out three home runs in three innings against Orioles starter Kyle Gibson (13-8), who was charged with seven runs and nine hits in 4 1/3 innings. Gibson suffered a loss for just the second time since July 4.
Despite a rough first inning, Chicago starter Dylan Crease (6-7) worked six innings and gave up five runs on six hits with seven strikeouts and three walks. He notched his second win in his last six decisions.
Jimmy Lambert pitched two shutout innings in relief before Gregory Santos worked a scoreless ninth despite giving up two hits before recording an out.
Baltimore scored four first-inning runs with four players collecting a run batted in, beginning with Santander's run-scoring double.
Vaughn hit his 17th homer in the second and, later in the inning, Colas went deep for the fourth time this year. Both homers were two-run shots.
Chicago took the lead in the third when Robert connected on his 35th home run. The lead grew to 7-4 with Vaughn knocking in a run with a double and Elvis Andrus supplying an RBI single.
Santander countered in the bottom of the third with his 26th homer.
In the sixth, Chicago's Tim Anderson rapped a two-run triple and Andrew Benintendi had a run-scoring double.
Jorge Mateo and Adam Frazier joined Santander with two hits for the Orioles.
— Field Level Media