The result, which leaves Boro's play-off fate out of their own hands, came via Joe Lolley's brace either side of Alexander Milosevic's second-half strike.
Forest's margin of victory would have been greater but for a fine performance from Darren Randolph in the Boro goal, with Tony Pulis' side turning in a desperate display in which they failed to muster a meaningful shot on target.
Martin O'Neill made four changes to the side which lost to Sheffield United on Good Friday, while Pulis' men were unchanged following a run of three successive wins which had boosted their promotion hopes.
The hosts dominated from the off and Ben Osborn failed to get sufficient purchase on Matty Cash's excellent cross after 10 minutes.
Cash tried his luck after bursting clear down the right six minutes later, with Randolph comfortably saving his low effort.
Adam Clayton sent Middlesbrough's first attempt on goal high and wide after 32 minutes, while at the other end Karim Ansarifard worked himself a yard of space only to see his low effort deflect narrowly wide.
The hosts were awarded a penalty six minutes before the break when Ryan Shotton tripped Ansarifard as the Iranian was about to pull the trigger, although referee Peter Bankes only produced a yellow card for the Boro defender.
Lolley stepped up and comfortably blasted his effort from 12 yards into the roof of the net.
Pulis made a double substitution at the break, with Mo Besic and Ashley Fletcher paying the price for an insipid first 45 minute as Marcus Tavernier and Jordan Hugill entered the fray.
Only Randolph's inspired save five minutes after the break prevented Forest from doubling their lead. The Republic of Ireland keeper showed fantastic reflexes to parry away Ansarifard's effort from six yards after Joao Carvalho's clever cross without the outside of his boot found the forward unmarked.
The home side did get their second after 65 minutes, as Carvalho's quick free-kick caught out Shotton and Cash's looping cross to the back post was volleyed in by Milosevic.
Two minutes later substitute Lewis Grabban dispossessed Shotton in his own half and, after a jinking run, saw his low effort turned behind by Randolph.
Randolph denied Grabban again in the 69th minute as he beat away his powerful effort from 12 yards, and the goalkeeper had to be at his best again to save from Osborn when the winger was sent through one-on-one.
Carvalho curled a magnificent looping effort against the post from 20 yards as the home side threatened to run riot.
The third goal did come five minutes from time – Portuguese forward Carvalho went on a mesmerising run down the left before squaring to Lolley, who curled home his second.