Karunaratne had not scored a Test fifty in his previous three Tests, but hit an unbeaten 65 as Sri Lanka advanced to 111 for three in their second innings, giving them an overall lead of 275.
The Zimbabweans were able to restrict the Sri Lankan scoring early on as the tourists resumed on five without loss, with Carl Mumba bowling Kaushal Silva in the seventh over of the day.
As the field spread, Sri Lanka's momentum was sustained by Karunaratne and Kusal Mendis, until the latter perished off the final ball of the session as he was caught at mid-on for 19 off Mumba.
Zimbabwe captain Graeme Cremer's unexpected Test century had headlined the third day's play, which saw Zimbabwe bowled out for 373 in response to Sri Lanka's first innings total of 537.