The bowling unit struggled to take regular wickets whilst they also failed to slow the scoring rate down and despite needing 193 from 24 overs in their adjusted run chase, Sri Lanka couldn't score runs quickly enough as they fell well short in their quest.
De Kock followed up his century in the previous game with 51 from 57 balls as he blasted South Africa to a fast start in pursuit of the win.
Sri Lanka have lost all eight ODIs under Malinga's captaincy and the veteran was dismissed in nearly embarrassing circumstances.
The recalled Aiden Markram was due to bat at number three while JP Duminy was set to make his first appearance since suffering a shoulder injury in November.
Sri Lanka were 131 for nine when Malinga was out but Udana smashed 55 runs in a 58-run last-wicket partnership with Kasun Rajitha. Not only did he fail to sprint in attempting a single but his bat was in the air when a throw from Reeza Hendricks hit the stumps at the bowler's end.More news: Messi hails Ronaldo's 'magical' night for Juventus after Barcelona win
More news: Could an eye test help detect Alzheimer's?
More news: Full house star Lori Loughlin arrested for bribery
"I have been working on my batting", he said.
Udana's assault spoilt what was promising to be an excellent day for Nortje, playing in his home town.
Udana was the sole aggressor in the partnership, and was especially severe on Nortje, smashing 37 runs off his last two overs.
Proteas skipper Faf du Plessis contributed a brush 43.
South Africa, leading the five-match series 3-0, made four changes to their team, while Sri Lanka had three changes.