Boro began the game in second place and a point behind leaders Leeds, who drew 1-1 with Brentford in the earlier kick-off.
However, Tony Pulis’ side never found their rhythm against a Forest outfit who climbed into the play-off places with this victory.
Joe Lolley was central to it, scoring the first goal and setting up substitute Lewis Grabban to score the second, extending Forest’s unbeaten league run to six games.
They had the upper hand from an early stage, Boro making a sloppy start and giving the ball away cheaply.
Jack Colback, the former Newcastle midfielder, tried an optimistic effort by letting fly from 25 yards and Lolley cut through the centre, taking the ball past three or four Boro players and seeing a low effort saved by Darren Randolph.
The home fans were becoming frustrated and Pulis was pontificating on the sidelines.
Middlesbrough improved, winning four corners before half-time and Martin Braithwaite hit the bar with a shot deflected by Colback.
Michael Dawson had to be replaced before the break, the Forest centre-back having come off second-best when challenging George Friend.
But losing the experienced defender did nothing to unsettle Forest, who took the lead early in the second half – and it was a rocket by Lolley.
After Daryl Murphy turned Daniel Ayala on halfway, the striker also evaded Ryan Shotton and fed the overlapping Lolley who took a touch before unleashing a powerful rising effort that Randolph had no chance of stopping.
It was the first time Boro had conceded at home this season and Pulis reacted by making a treble change, sending on Adam Clayton, Rudy Gestede and former Forest striker Britt Assombalonga, who was booed by the visiting supporters.
They were almost cheering when Lolley volleyed at goal after Aden Flint had headed a cross into his path.
Assombalonga wasted a great opportunity of an equaliser, his team’s best chance of the game, midway through the second half when Jonny Howson fed him in a central position, his first touch was good, taking him into the area, but his shot was too close to Costel Pantilimon.
Grabban grabbed the goal to seal the points after 77 minutes, tapping in from close range after ghosting unmarked into the six-yard box to meet Lolley’s pass from the left.
Boro were give some hope when Jack Robinson was red-carded having been shown a second yellow, but, aside from Gestede having an effort ruled out for a push on the goalkeeper, the home side did not come close to an unlikely comeback.