The Pakistan Cricket Board (PCB) cited a lack of cricket facilities in Peshawar and Rawalpindi as reasons for the change, but sources inside the governing body said the fragile security situation in both cities was the main reason.
The match previously fixed for northwestern Peshawar will now be shifted to the eastern city of Lahore. The other match will move from Rawalpindi near the capital Islamabad to the southern port city of Karachi.
"The changes have nothing to do with security concerns," PCB director operations Zakir Khan told AFP.
A PCB source however said the South African cricket management was concerned about security levels at the two venues.
Peshawar has been a security concern for foreigners with its close proximity to the violence-plagued tribal regions of the Pakistan-Afghan border.
A spate of suicide bomb attacks have targeted security forces in the northwest since the government raided a radical mosque in Islamabad last month.
More than 230 people, mostly policemen and soldiers, have died in violence across Pakistan since the mosque raid.
South Africa is due to start the Pakistan tour from Sept 27 and play two Test matches in Karachi and Lahore.
They will also play five one-day internationals with two matches now scheduled for Lahore and one each in Faisalabad, Multan and Karachi.
Khan said the stadium in Peshawar lacked international-level facilities.
"A PCB official has ascertained facilities in Peshawar which were not as per the international standards and that's why we shifted the match from Peshawar to Lahore," said Khan.
"As far as the Rawalpindi match was concerned the stadium there too needs some refurbishment and we hope to get it ready for next year's Champions Trophy to be held in Pakistan," he added.
Pakistan became a perceived danger zone for international teams in the wake of 9/11 attacks in the United States. The West Indies and Australia refused to tour Pakistan and played their series at neutral venues.
New Zealand's team were also forced to cut short a tour after a bomb blast near their hotel in Karachi killed 14 people, including 11 French naval staff, in May 2002.
South Africa also refused to play a Test in Karachi and a one-dayer in Peshawar on their 2003 tour due to security fears.
India finally broke the deadlock by playing a one-dayer in the port city in 2004 and then another match in Peshawar in 2006.