Maholm (4-2) allowed three hits in seven innings and combined with James Russell and Rafael Dolis on a four-hitter.
Maholm walked three and struck out three as Chicago took two of three from Atlanta after doing the same in the previous series against the Dodgers.
After Maholm came out to warm up for the eighth, Russell replaced him and gave up a two-out double to Martin Prado and a walk to Freddie Freeman, then retired Dan Uggla on a flyout. Dolis worked the ninth for his third save in four chances.
Hudson (1-1), in his third start this season, allowed one run and five hits in seven innings. He gave up only three hits through the first six innings and - thanks to a pair of double plays - faced the minimum 18 batters.
David DeJesus hit a leadoff single in the seventh, and Tony Campana bunted him to second and he reached third on Starlin Castro's grounder to first. LaHair then hit a hard grounder under shortstop Jack Wilson's glove to give the Cubs the lead.
Castro was tagged out near the plate on an inside-the-park homer attempt that ended the fourth inning.
Castro hit a ball near the right field line that a diving Jason Heyward couldn't reach and it rolled all the way to the wall. Castro kept running and third-base coach Pat Listach waved him home, but Castro was tagged out easily by catcher David Ross on second baseman Dan Uggla's relay.
Atlanta threatened with one out in the fifth when Heyward walked and Ross reached on a single when Campana lost his high fly to center on an overcast day at Wrigley Field and it dropped in. Maholm retired the next two batters.
Prado doubled and reached third in the sixth and after Uggla walked with two outs, Chipper Jones lined out to second baseman Darwin Barney, who was positioned behind the bag at second in a defensive shift.
NOTES: Atlanta's Jones, who is retiring at the end of the season, was presented with a Braves flag before the game by Cubs pitcher Ryan Dempster. ... LaHair has reached base in 27 straight games dating to April 8. He also singled in the second. ... Cubs manager Dale Sveum said he didn't see Kerry Wood toss his glove and cap into the stands Tuesday night after issuing two walks and giving up a go-ahead single in the eighth. Sveum said he didn't condone it but said "there are frustrations that happen" and people sometimes do things they regret because they aren't perfect. Wood has allowed two runs in both of his appearances since coming off the DL with a tired shoulder. ... Cubs LF Alfonso Soriano was out of the lineup for the second time in three games to rest a sore knee.