The result 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’s side turning in a desperate display in which they failed to muster a meaningful shot on target.
Forest made four changes to the side that lost to Sheffield United on Good Friday, while Boro men were unchanged following a run of three successive wins that 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.
Adam Clayton sent Boro’s first attempt on goal high and wide, then 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. 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 half as Marcus Tavernier and Jordan Hugill entered the fray.
Randolph’s inspired save five minutes after the break prevented Forest from doubling their lead. He showed fantastic reflexes to parry away Ansarifard’s effort from six yards.
The home side did get a second after 65 minutes as Joao Carvalho’s quick free-kick caught out Shotton and Cash’s looping cross to the back post was volleyed in by Milosevic.
Carvalho curled a magnificent looping effort against a post before the third goal arrived five minutes from time. Carvalho went on a mesmerising run before squaring to Lolley, who curled in his second.
Nottingham Forest: Pantilimon, Wague, Milosevic, Robinson, Cash, Yates, Pele (Yacob 84), Osborn, Lolley, Carvalho (Guedioura 88), Ansarifard (Grabban 62). Unused substitutes: Murphy, Steele, Janko, Appiah.
Middlesbrough: Randolph, McNair, Flint, Shotton, Howson, Clayton, Mikel, Besic (Tavernier 46), Saville (Downing 65), Fletcher (Hugill 46), Assombalonga. Unused substitutes: Konstantopoulos, Wood-Gordon, Gestede, Spence.
Referee: Peter Bankes (Merseyside).