Andriy Yarmolenko stepped off the bench to hit the winner as West Ham shrugged off VAR controversy to beat Chelsea 3-2 and give their Premier League survival hopes a huge boost.
The Hammers had controversially been denied an opener when Tomas Soucek's strike was scrubbed out by VAR but battled back from Willian's (42) penalty to lead when Soucek (45+2) and Michail Antonio (51) netted either side of the break.
However, a superb free-kick from Willian (72) looked to have shared the points until West Ham broke away and Antonio teed up Yarmolenko to cut past Antonio Rudiger to fire home in the 89th minute.
That goal sealed just the third win of David Moyes' second tenure at West Ham and lifts the Hammers three points above the relegation zone with six games remaining.
Chelsea, meanwhile, will be frustrated at failing to capitalise on Leicester's loss to Everton earlier in the day, when a win in east London would have moved them up to third.
- £18 Premier League and Football channel offer
- Premier League restart: The live games on Sky Sports
- NOW TV Sky Sports Month Pass for £25 a month
West Ham: Fabianski (5), Fredericks (6), Ogbonna (7), Diop (5), Cresswell (6), Soucek (8), Rice (8), Bowen (8), Fornals (6), Lanzini (6), Antonio (9).
Subs: Wilshere (6), Yarmolenko (8), Balbuena (n/a)
Chelsea: Kepa (6), Azpilicueta (4), Christensen (5), Rudiger (4), Alonso (6), Barkley (5), Kovacic (5), Kante (5), Willian (8), Abraham (6), Pulisic (9).
Subs: Mount (7), Giroud (7), Loftus-Cheek (6)
Man of the match: Michail Antonio (West Ham)
How West Ham pulled off a vital win
With only goal difference keeping West Ham out of the relegation zone at kick-off, they were pushed back early on by Chelsea, with Marcos Alonso and Willian hitting the target for the Blues, who were wearing their new home shirts.
But Antonio was a threat on the break and should have done better when he scuffed wide on 13 minutes. Pulisic then blew a good chance of his own at the other end, curling over from 15 yards out as Chelsea resumed control.
- West Ham were without the injured Mark Noble, Manuel Lanzini comes in, with Angelo Ogbonna replacing Fabian Balbuena.
- Tammy Abraham started up front for Chelsea, while Mateo Kovacic replaced Mason Mount.
However, it was West Ham who thought they'd taken the lead against the run of play on 34 minutes when Soucek finished off a goalmouth scramble - but after three and a half minutes of deliberation, VAR ruled the floored Antonio was offside.
PGMOL VAR explainer
In the 34th minute of West Ham United v Chelsea, Tomas Soucek's goal was disallowed following a VAR Review for an offside offence against Michail Antonio. The on-field decision was to award the goal, but the VAR advised the referee that Antonio was in an offside position and directly in the line of vision of Kepa Arrizabalaga.
Chelsea rubbed salt in West Ham wounds by winning a penalty at the other end moments later when Pulisic was too slick for Issa Diop and Willian made no mistake from the spot.
But West Ham refused to be denied and from another corner, Soucek once again got the better of Cesar Azpilicueta at the back post and headed the hosts level seconds before the half-time whistle with his first goal for the club.
West Ham began the second half impressively and within six minutes of the restart completed the comeback when Antonio - who had a good penalty appeal against Rudiger in the build-up - slammed home Jarrod Bowen's low centre.
But hopes of a vital win were short-lived, and when the standout Pulisic was brought down on the edge of the box Willian whipped a fantastic free-kick in off the post - although Lukasz Fabianski's positioning on his side of the wall looked questionable.
Sub Jack Wilshere - making his first appearance since October - played in Antonio for a one-on-one but Kepa Arrizabalaga was out well to deal with the danger before Chelsea replacement Olivier Giroud mis-kicked at the vital moment at the other end.
There was no mistake from Yarmolenko though. The ice-cool Ukrainian - who had left Alonso trailing - showed exemplary composure in the final moments to twist past Rudiger and fired past Kepa to grab three vital points for his side.
Neville: What are you doing, Marcos Alonso?
Neither co-commentator Gary Neville, nor former Chelsea defender and studio guest Ashley Cole were impressed with Alonso's casual tracking of Yarmolenko for West Ham's late winner.
Neville said: "Look at him, look at him! What are you doing, Marcos Alonso? There's his running back speed which has cost Chelsea the game. Alonso is level with him at the point the counter starts.
"He doesn't bother, that's why he's under pressure at this club and Frank Lampard will see that. Run back as fast as you can when your team lose the ball, you learn that aged six."
Cole added: "One of the things I hate about full-backs is when you're happy to run back but not track. I get they're pushing for it, last five minutes of the game, but you need a point here. Could he have run back, could he have run back with the intensity he ran forwards? Probably, yes. Could he anticipate earlier? Yes.
"As players, you've got to want to work and not be happy to be beaten. Alonso needs to get back quicker. They've reacted too late, but first and foremost you've got to defend."
What the managers said...
David Moyes, West Ham: "I was spewing [at VAR].
"I was thinking: 'are we ever going to get a decision here?' Everything was going against us. Some of the things that have gone against West Ham have been really poor. I can't explain it. I said to the player that we need to make our own luck and it went our way tonight. We pushed hard and did a lot of good things - the players deserve a huge amount of credit, they are sticking to it and got their rewards.
"We'd be lying if we said we weren't looking at the results, of course we are. But I hadn't thought we had been as bad as the results suggested, we'd lost 2-0 in both, but I thought the teams we played had played well and we made a couple of mistakes. Tonight we took most of the chances."
Frank Lampard, Chelsea: "I wouldn't say it's the story of our season because it's been a good season. But there have been so many of these moments. I explained it clearly to the players before the game: we had a good restart, three good results, and an opportunity today to go third. But you have to do every part of the game to get results in games like this.
"You can dominate possession, which we did for most of the game. But if there are moments where you switch off, if you go 1-0 up and then make two or three errors to them scoring and going 1-1 before half-time, you're going to encourage teams on.
"It's been there and I'm very aware of it, but the players in those moments have to show an extra mentality, an extra bit to do the bits that see a game through like this when you have a lot of domination."
- West Ham ended a 20-game losing run when conceding the first goal in Premier League fixtures, with this the first time they avoided defeat after conceding first in the competition since February 2019 - a 3-1 win over Fulham.
- Only opponents West Ham (22) and Aston Villa (19) have dropped more points from leading positions in this season's Premier League than Chelsea (18).
- This was Chelsea's 10th Premier League defeat of the season; only in 2015-16, when they finished 10th, have they suffered more in a single campaign in the Roman Abramovich era (12).
- Chelsea's Willian became the first player in Premier League history to score in all 12 calendar months in the competition.
Chelsea host Watford on Saturday - from 7.45pm on Sky Sports Premier League - while West Ham travel to Newcastle on Sunday - from 2pm on Sky Sports Premier League.