Castillo's drive to the right field wall scored Jose Abreu and Tyler Saladino as Kansas City's bullpen failed to hold the lead.
Chicago won its second game in a row to start the season.
Lucas Duda went 1-for-3 with a walk and two RBIs to lead the Royals at the plate. Cheslor Cuthbert also drove in a run.
White Sox right-hander Danny Farquhar (1-0) pitched a scoreless inning of relief to earn the win. Farquhar followed starting right-hander Lucas Giolito, who allowed three runs in six innings.
Royals right-hander Brandon Maurer (0-1) surrendered three runs in one inning to draw the loss. His performance spoiled a strong outing by starting right-hander Ian Kennedy, who limited the White Sox to one run in six innings.
White Sox right-hander Joakim Soria survived the ninth despite giving up a hit and a walk to record his first save of the season against his former team.
Matt Davidson went 1-for-3 and notched his sixth RBI in the first two games after clubbing three home runs in the opening game. Yoan Moncada added his first home run of the season.
The White Sox opened the scoring with one run in the top of the first. Moncada drew a leadoff walk and advanced to third base on a single by Avisail Garcia. Two batters later, Davidson singled to right field to drive in Moncada.
Kansas City quickly struck back to grab a 2-1 lead in the bottom of the first. Giolito loaded the bases with nobody out before walking Duda on a 3-2 count. Cuthbert followed with a sacrifice fly to put the Royals ahead.
In the third, the Royals plated another run to make it 3-1. Mike Moustakas tripled to right field and scored on Duda's single during the next at-bat. The two-out hit by Moustakas marked his first triple since 2015.
Chicago cut the deficit to 3-2 on the second pitch of the eighth. Moncada yanked Maurer's breaking ball over the right field wall.
Castillo put the White Sox on top when he doubled with runners on second and third and two outs.
--Field Level Media
Chi. White Sox | Kansas City | |
Lucas Giolito | Player | Ian Kennedy |
No Decision | W/L | No Decision |
6.0 | IP | 6.0 |
1 | Strikeouts | 5 |
4 | Hits | 4 |
4.50 | ERA | 1.50 |
Chi. White Sox | Kansas City | |
Avisail Garcia | Player | Jon Jay |
2 | Hits | 2 |
0 | RBI | 0 |
0 | HR | 0 |
2 | TB | 2 |
.500 | Avg | .500 |
Team | Hits | HR | TB | Avg | LOB | K | RBI | BB | SB | Errors |
Chi. White Sox | 8 | 1 | 12 | .235 | 17 | 8 | 4 | 3 | 1 | 0 |
Kansas City | 6 | 0 | 8 | .194 | 15 | 5 | 3 | 5 | 1 | 0 |