With help of Left-handed batsman Ali Zaryab's 74 for not out, two-time champions Pakistan reached their target of 190 in 47.5 overs after the pace-duo of Musa and Shaheen had shared five scalps to help restrict South Africa to 189 for nine.
Zaryab was well accompanied by Saad to add 65 crucial runs for the sixth wicket, which proved to be decisive in a low-scoring affair.
This was Zaryab's third half-century in the tournament and second successive player of the match award after his 59 runs against Sri Lanka.
Shaheen struck as soon as he was introduced into the attack in the sixth over as he removed openers Matthew Breetzke (12) and Jiveshan Pillay (14).
With the two wickets, Shaheen's wicket tally in the tournament has reached to 11, the joint-highest along with Canada's Faisal Jamkhandi.
Musa chipped in with the wickets of captain Raynard van Tonder (4) and Hermann Rolfes (5) as South Africa were left reeling at 43 for four in the 15th over.
He also dismissed a well-set Makwetu to further reduce South Africa's chances of a fightback.