The Bulls upset the Stormers at home 19-16 to keep their Super Rugby Finals chances alive.
Needing a victory to stay in the hunt, the Bulls went to the home of the South African Conference leaders and won a sloppy game thanks to the kicking of Morne Steyn.
The South Africa first five-eighths kicked four penalties to add to Francois Hougaard's try, which he also converted.
In a match dominated by poor handling, the Bulls took an early advantage off Steyn's boot, though he missed a chance to make it 6-0 after eight minutes.
It was one of two penalty misses by Steyn in the first half, but Kurt Coleman also missed one of his two chances for the Stormers as the visitors ended the first half 6-3 up, with Steyn nailing his second penalty seconds before the break.
Coleman missed another penalty earlier in the second half, earning a hook in favour of Dewaldt Duvenage, who quickly made a penalty to tie the game.
However, Steyn kicked the Bulls back in front and they broke clear for their only try in the 65th minute, with Hougaard racing away from a lineout for the try.
After Steyn converted, Duvenage hit back with another penalty for the Stormers, but Steyn restored their 10-point advantage with a kick in the 74th minute.
The Stormers did their best to mount a comeback as Andries Bekker crossed for a try with two minutes remaining, but their final attack failed in midfield as the Bulls hung on.