The Stormers had scored two tries in the first half and, with dominance in possession and territory, seemed to have set up a comfortable victory over the Australians.
But the Stormers lost their structures after the break as the boot of Waratahs flyhalf Berrick Barnes kept them pinned in their own territory. But the much-vaunted defence of the South Africans held firm and they only conceded one try.
The kicking game of the Waratahs brought the first points of the match in the ninth minute as centre Adam Ashley-Cooper’s deft up-and-under forced a five-metre scrum, which went straight to ground, leading to a penalty by scrumhalf Brendan McKibben.
But the Stormers scored the first try of the match nine minutes later, off the platform of an attacking lineout as wing Gio Aplon burst through the defences after a wonderful inside pass from scrumhalf Dewaldt Duvenhage, and fullback Joe Pietersen, an obvious attacking threat throughout, rounded off the move in the left corner.
Duvenhage then deceived the Waratahs defence on the blindside, leading to a penalty which Pietersen kicked (8-3), and the Stormers crossed the tryline again seven minutes before half-time.
They set up a rolling maul off a lineout and, with the Waratahs distracted by another ball thrown on to the ground, hooker Tiaan Liebenberg crashed over for the second try.
Flyhalf Peter Grant then kicked an injury-time penalty to give the Stormers a commanding 16-3 lead, before they suffered another concerning second-half fade-out.
Lock Andries Bekker was chiefly to blame for a defensive failure that allowed replacement lock Kane Douglas to burst through and, with eighthman Dave Dennis carrying the ball well, outside centre Rob Horne was able to stroll over the tryline.
McKibben converted to close the gap to 16-10 and the Stormers continued to endure a hugely frustrating second half. They were pinned in their half for long periods by Barnes and this led to indecision when it came to either returning the kicks or trying to run the ball out from deep inside their own territory.
This confusion led to a McKibben penalty in the 47th minute when wing Bryan Habana was caught in possession and played the ball on the ground.
Grant provided some relief for the Stormers with a 50th-minute penalty, but the home side had to work exceptionally hard to keep the Waratahs out and secure the win.
Stormers – Tries: Joe Pietersen, Tiaan Liebenberg. Penalties: Pietersen, Peter Grant (2).
Waratahs – Try: Rob Horne. Conversion: Brendan McKibben. Penalties: McKibben (2).