Scottish striker McCormack put last season's finalists on the road to Wembley again with a close-range header in the 57th minute.
Cardiff captain Joe Ledley added a second with seven minutes remaining to sink their Championship rivals at Ninian Park.
Bluebirds boss Dave Jones made two changes with the fit-again Peter Whittingham and McCormack returning to the side after Michael Chopra and Wayne Routledge ended their loan spells.
While Royals manager Steve Coppell signalled his intention on securing promotion back to the Premier League by making eight changes and rested stars Kevin Doyle, Stephen Hunt and James Harper.
The hosts dominated the early possession but failed to test Royals goalkeeper Adam Federici, who bizarrely scored a last-gasp equaliser in the league encounter on Boxing Day.
Reading came closest to the opener on 16 minutes when Bobby Convey sliced wide from the penalty spot after James Henry's incisive cross.
Cardiff hit back and had a strong penalty claim turned down by referee Anthony Taylor ten minutes later when Andre Bikey appeared to handle Whittingham's cross, with Jay Bothroyd ready to pounce.
The opening period petered out but Reading should have broken the deadlock within 60 seconds of the re-start through Shane Long, but Cardiff goalkeeper Peter Enckleman blocked out the Irishman's close-range shot following Convey's neat cross.
Bikey was booked for a trip on McCormack and the Scottish striker made the Cameroon international pay dearly from the free-kick.
Reading pushed out for offside from Whittingham's deep free-kick but Roger Johnson's late arrival into the box caught the visitors napping.
The centre-back squared to McCormack who headed home his 15th goal of the season.
McCormack nearly doubled the lead after 63 minutes but his toe-poke flew wide of the post.
Cardiff were in the ascendancy and two minutes later Reading midfielder Jem Karacan was lucky to see his volley crash against his own crossbar from Whittingham's cross.
But Jones' men made the game safe when Ledley's cool finish beat Federici after a simple one-two with McCormack.