Michael Bourn had three hits and scored twice as the Astros finally provided enough offense to get Paulino his first win. Lance Berkman drove in two runs.
Houston was averaging 1.97 runs in games started by Paulino (1-7) this season, the lowest support in the majors for any regular starter.
Matt Lindstrom pitched a perfect ninth to earn his 12th save after blowing his previous two chances.
The Cubs have lost four in a row and scored only one or two runs in six of their last seven games.
Zambrano (1-4) allowed three runs and six hits over 4 1-3 innings in his first start since April 20. The $91.5 million right-hander was moved to Chicago's shaky bullpen after opening the season with a 1-2 record and a 7.45 ERA in four starts.
Zambrano was 2-0 with a 0.90 ERA in four previous starts against the Astros, including a no-hitter in September 2008, but he struggled with his control early on, leading to a short outing.
Bourn led off the first with a single, advanced on Jeff Keppinger's groundout and scored on Berkman's drive to the left-field corner. Left fielder Alfonso Soriano threw the ball to the infield in time for the Cubs to catch Berkman in a rundown between first and second.
Houston loaded the bases when Zambrano gave up a double to Carlos Lee and two-out walks to Cory Sullivan and Geoff Blum. Pitching coach Larry Rothschild visited the mound, and Pedro Feliz popped up to end Zambrano's 34-pitch inning.
Paulino escaped a bases-loaded jam in the third when Aramis Ramirez fouled out to Berkman to end the inning.
The Cubs had a scare in the fifth when rookie shortstop Starlin Castro was shaken up sliding into third on Zambrano's bunt up the third-base line. Third baseman Feliz threw out Zambrano and catcher Humberto Quintero ran to third to take the throw from first.