Worcester ended a run of four straight Premiership defeats and dented the play-off hopes of Wasps in the process.
Chris Pennell and David Lemi scored tries within nine minutes of each other to help the hosts to a nine-point lead at half time.
Rhys Thomas and Ashley Johnson then went over after the break to swing the game in favour of the visitors.
Tries from Blair Cowan and Jonny Arr put Warriors back in control, before Jack Wallace's last-minute consolation.
Worcester's first win since Christmas moved them 13 points above bottom club Sale Sharks with just five games left.
Andy Goode and Nick Robinson exchanged early penalties before the former Wales international nudged Wasps ahead.
But Warriors hit back in style when Pennell rounded off a slick move and Goode's exquisite kick into space was caught by Lemi, who crossed near the posts.
Goode, who had earlier missed the conversion, added the extras on this occasion and Worcester led 15-6 at half time.
Wasps pinned the Warriors back in defence after the break and created enough space for Thomas to power over.
Worcester then suffered a double blow as Goode limped off and wing Josh Drauniniu was sin-binned for what referee Greg Garner ruled was a deliberate knock-on.
The visiting forwards moved to within sight of Worcester's line and Johnson's try put Wasps ahead.
Andrea Masi's yellow card for tackling Worcester substitute John Andress off the ball reduced Wasps to 14 and Warriors took full advantage.
Cowan and Arr went over in quick succession, before Wallace's score clinched a losing bonus point for Wasps.
VIEW FROM THE DRESSING ROOM
Worcester boss Richard Hill:
"There was a lack of crucial errors at crucial times by individuals. There was a coming together of set-piece, attack and defence.
"All three areas were pretty good and you could see it in the players' eyes before the game that this was a game they were determined to win.
"It was about time all parts of our game came together and there was a real excitement in the team. The intent was there to try to score tries."
Wasps assistant coach Trevor Woodman:
"We got our noses in front. Then there was a period of three penalties and they were suddenly camped on our five-metre line.
"We started the game strongly and then a lot of mistakes crept into our game up to half-time, but we played some good stuff in the second half.
"We looked very tired last weekend but tonight there are no excuses. We didn't over-train the boys this week. I don't think there was tiredness out there, just a bit of sloppiness.
"But we finished strongly and made sure we came away with something in terms of a losing bonus point."
Worcester: Pennell; Drauniniu, Grove, Clarke, Lemi; Goode, Arr; Mullan, Shervington, Murray, Percival (capt), Schofield, Best, Kvesic, Cowan.
Replacements: Gray for Goode (47), Andress for Murray (65), Gillies for Schofield (69), Hodgson for Arr (79).
Not Used: Lutui, Ceri Jones, Betty, Matavesi.
Sin Bin: Drauniniu (52).
Wasps: Southwell (capt); Daly, Masi, Bell, Varndell; Robinson, Simpson; Payne, Thomas, Swainston; Cannon, Wentzel; Johnson, Poff, Jones.
Replacements: Taulafo for Payne (55), Taylor for Swainston (65), Lindsay for R Thomas (70), Rae for Cannon (70), Wallace for Southwell (73).
Not Used: Everard, Comnins, S Jones.
Sin Bin: Masi (67).
Referee: Greg Garner (RFU).