South Africa was kept to a mediocre total of 231 at Harare Sports Club but was saved by its bowlers as Zimbabwe's batsmen succumbed under the pressure.
Sean Williams made 46 for Zimbabwe in the middle order but was the only Zimbabwean to threaten South Africa's attack. He was furious with himself for his error when he was caught by Hashim Amla off McLaren with the score on 138-5. Zimbabwe collapsed after that.
Zimbabwe had a good chance of a first win in the series after spinner Prosper Utseya took a hat trick in his 5-36 to restrict the Proteas at Harare Sports Club.
But Steyn, McLaren and two valuable wickets from left-arm spinner Aaron Phangiso meant Zimbabwe didn't come close to the target and took South Africa to the top of the three-team standings. Australia plays Zimbabwe in the next game on Sunday.
More From This Section
Utseya's career-best return in ODIs had given the home team a good chance of a first victory over South Africa in 14 years.
It was the second hat trick by a Zimbabwean in ODIs after Eddo Brandes against England in 1997 at the same Harare ground and Utseya celebrated by falling onto his back and kicking his feet up in the air as teammates mobbed him.
Utseya is also on report over a suspected illegal action but is allowed to bowl pending tests.