The hosts suffered a batting collapse, dropped three straightforward catches, lost star bowler Dale Steyn to a shoulder injury and left themselves with a mountain to climb to salvage the series opener.
England finished the day 261 runs in front on 172 for three, a handsome lead on a wearing and slow-scoring Kingsmead pitch.
Moeen Ali took three wickets in the morning to finish with four for 69 and Joe Root worked hard for 60 not out to advance the cause in either innings.
For South Africa, AB De Villiers – reluctantly wearing the wicketkeeping gloves again – dropped Root on six and Nick Compton on 45, while Dean Elgar took some of the gloss off a hard-fought century by grassing Compton on 11 and failing to get a decent hand on a tough caught and bowled chance.
The judgement over Steyn was highly questionable, too. He left the field with a right shoulder strain midway through his fourth over and, despite being booked in for a scan, returned to bowl the 21st.
This time he lasted only three balls before pulling up again and heading to hospital.
South Africa are not the world’s No 1 side by chance, but this was a day that saw their performance fall well below standards on all fronts.
England’s morning session went almost exactly to plan, dismissing South Africa for 214 with six wickets tumbling for just 77 runs
Broad, for the second day in a row, needed just two deliveries to take a wicket. The ball kept a touch low outside off stump but that did not entirely account for a non-committal jab that cannoned back into Temba Bavuma’s leg stump.
Elgar, 67 not out overnight, badly needed someone to stick with him but neither JP Duminy nor Kyle Abbott were able. Moeen removed both in classical off-spinner’s fashion, the left-handed Duminy guiding to slip and Abbott lobbing one to short-leg via bat and pad.
Steyn batted with greater purpose, allowing Elgar to overtake Compton’s 85 as the highest score of the match then bring up a fourth Test hundred with a scampered three.
Steyn, though, lost his cool against Moeen, sending up a steepling catch that Chris Woakes finally controlled at the third attempt.
Finn then wrapped things up by seeing off Dane Piedt and Morkel in his first over with the new ball, leaving Elgar to carry his bat for 118no. An 89-run first-innings lead looked a good one for England, and their sense of comfort only increased when Steyn pulled up in the seventh over. The 32-year-old has just come back from three Tests out with a groin problem and the sight of their premier bowler struggling again was a tough one to take for the home fans.
In his absence there was an early look at the spinner, Piedt, and an early success too.
Alastair Cook did not repeat his first-innings duck but he managed only seven before Piedt had him lbw.
Scoring quickly was neither easy nor necessary given the match situation but Hales happily slog-swept Piedt for six, making his first boundary in Tests a maximum.
A second flourish proved less successful, picking out Abbott with a hubristic aerial stroke having reached 26.
By now Steyn had returned to the field but, with scans booked for later in the day it was still a huge surprise to see him return to his mark for the 21st over. He charged in manfully, almost persuading Compton to play on with his second ball but, after a third, he again walked off with the physio.
Things went from bad to worse before tea, Morkel having both batsmen dropped in successive overs. Both should have been straightforward catches but Compton was grassed by Elgar at second slip before De Villiers appeared to lose sight of a glove behind from Root. Compton’s second life came when De Villiers parried a catchable nick to the boundary, but he was gone next ball when the wicketkeeper finally clung on.
Root stood firm to see stumps with James Taylor (24no) and passed 50 for the 13th time in 26 innings this year, equalling the Test record.