Maholm (3-9) scattered eight baserunners while throwing 108 pitches _ he walked three batters and hit two _ as the Pirates won for the fourth time in his 14 starts this season.
He was erratic early, loading the bases with one out in the first on two walks and a Jermaine Dye single to left. A.J. Pierzynski's sacrifice fly to center scored Andy Gonzalez, but Maholm shut down the White Sox over the next six innings.
Shawn Chacon, in his first outing since being removed from the starting rotation after a poor start Sunday at Yankee Stadium, pitched a perfect eighth for the Pirates.
Matt Capps loaded the bases in the ninth, then walked Alex Cintron to score Pierzynski and make it 4-2. But Capps got Gonzalez to ground out for his fourth save.
Josh Fields had two hits for Chicago, which has lost four in a row and 16 of 19.
The Pirates took the lead for good in the bottom of the first with three consecutive two-out hits off White Sox starter Jon Garland (4-4). Nady's double scored Jason Bay and Adam LaRoche.