Hafeez hit 139 not out off 147 balls, his best in ODIs, combining with Imran Farhat (75no) to amass the highest opening stand at Harare Sports Club as the tourists chased down their target of 226 with 7.5 overs to spare.
That stand eclipsed the 104 partnership compiled by Hamilton Masakadza (68) and Brendan Taylor (50) which formed the backbone of Zimbabwe’s 225 for six but, in its pedestrian pace, ensured Pakistan would have a relatively simple chase.
The day started badly for Zimbabwe as Chamu Chibhabha drove Sohail Tanvir to mid-off and Vusi Sibanda was caught behind after edging an attempted pull off Aizaz Cheema.
That sent Taylor and, in particular, Masakadza into survival mode with boundaries at a premium.
Taylor reached 50 by glancing Junaid Khan for two but perished two balls later as his uppercut found third man having faced 76 balls.
Masakadza’s innings was even more tortuous, though he did heave Cheema for a huge six three balls before being run out, having faced 118 deliveries.
It was left for Tatenda Taibu to up the rate and he did so with 26 off 32, while Malcolm Waller, Elton Chigumbura and Prosper Utseya all reached double figures at better than a run a ball.
Pakistan were content to bide their time at the start of their reply, but once Farhat hit successive fours at the start of the ninth over, bowled by Chris Mpofu, the chase was on.
Hafeez drove Chigumbura for four to take his side past 50, and took two off the same bowler to reach the score himself, moments before Pakistan reached 100.
Farhat nudged his way to 50 and when Hafeez passed 100 with a slog sweep off Ray Price, it was the signal for a new onslaught from the batsmen.
He passed his previous best in ODIs of 121 by taking three fours off a Brian Vitori over, then hit the winning runs by pulling Mpofu for four.