After allowing the Cardinals to erase a 4-0 deficit in the sixth, the Cubs went back ahead when Tony Campana reached second base with two outs and Soriano's hit to shallow left off Mitchell Boggs (0-1) drove him in for a 5-4 lead.
Chicago added an unearned run in the ninth while Shawn Camp (2-1) picked up the victory with two scoreless relief frames as the Cubs won the first of a two-game set at Busch Stadium.
Bryan LaHair raised his average to .356 with a 3-for-4 performance, including a two-run homer, while Starlin Castro and Geovany Soto each added two hits and an RBI in the win.
Jake Westbrook was raked for 11 hits over five innings as National League Central-leading St. Louis lost its fourth straight.
Yadier Molina led the Cards at the plate with a pair of RBI.