Tunisian Wahbi Khazri gave the hosts the lead after three minutes when his wide free kick from 30 metres eluded everyone on its way to the far corner of the net.
Anthony Martial grabbed the equaliser six minutes before halftime, the young French striker dinking the ball in from a tight angle after Sunderland keeper Vito Mannone had saved Juan Mata’s firm shot.
De Gea made fine saves to deny Dame N’Doye and Lamine Kone but the Spanish keeper failed to deal with Kone’s powerful header eight minutes from time, deflecting the ball over the line to leave United six points behind fourth-placed Manchester City.
“Today was very similar to the way the Manchester City game went but this time we got what we deserved from the chances we created,” Sunderland manager Sam Allardyce told BT Sport, referring to his team’s 1-0 defeat by Manuel Pellegrini’s men.
“I thought we might be punished for not taking them and wondered whether it was going to go our way but it ended up being an unbelievable win for us.”
United captain Wayne Rooney said his team had not done enough to win the match and were now struggling to qualify for next season’s Champions League.
“We know it wasn’t good enough today,” Rooney said. “We weren’t aggressive enough and it’s very disappointing.
“We did not win enough second balls and did not defend set-pieces properly and it has cost us,” the England striker added.
“It will be difficult for us to make the top four now, we know that.”