Heffernan was sin-binned for a seatbelt tackle on Jasper Wiese, leaving Saints a man down at a crucial time during the second half.
And Tigers made them pay as Freddie Steward's try and George Ford's boot made sure the hosts would be the ones who will advance to Twickenham to face Saracens next Saturday.
Saints had dominated territory and possession for long periods of the game, but they could not take their chances, particularly in the first period.
Courtnall Skosan knocked on three times when promising attacks were unfolding, costing the away side dear.
They went in level at 6-6 at half-time after Guy Porter was shown a yellow card for a shoulder to the head tackle on Rory Hutchinson.
Saints went ahead in the second half, thanks to a try from the hugely impressive Tommy Freeman, but Tigers kept coming and Ford scored.
Heffernan's yellow card tipped the game in Tigers favour, and they got a grip on it to ensure they would be the winners on a day when Saints gave it their all but just came up short.
Saints didn't look fazed at all from the off in front of a raucous crowd, with plenty of travelling fans making their presence felt.
Tigers suffered an injury blow inside three minutes as Dan Kelly had to come off with an injury, bringing traditional Saints nemesis Freddie Burns into the action.
Saints were winning plenty of early penalties, one of which Dan Biggar opted to go for goal with, slotting it superbly from close to halfway.
Tigers were rattled and Saints thought they had scored when they counter-attacked and Alex Mitchell dotted down.
But the effort was ruled out for a slight knock-on from Skosan in the build-up.
Skosan soon had a clear chance to make amends as Mitchell released him down the left, but the South African knocked on with a clear run to the line beckoning.
It was a huge chance and one you felt Saints had to take during the early stages of the game.
Leicester responded by putting pressure on at the other end, winning a penalty, which Ford kicked to level the scores.
Saints tried to react but after they got to within range, Biggar sent a drop goal wide.
The away side kept coming and Hutchinson made a brilliant break, but once again Skosan knocked on, costing his side the chance to apply pressure.
Tigers made them pay by winning a scrum penalty, which Ford slotted to put the hosts ahead for the first time in the game.
But Saints were the ones playing all of the rugby and they had enjoyed so much territory that they didn't deserve to go in behind.
It looked like they would as referee Matthew Carley blew for half-time, but there was an infringement that needed looking at and it went to the TMO.
Porter was yellow carded for a high, late tackle on Hutchinson, and it could easily have resulted in a red.
But Saints took the three points and the scores were level at 6-6 at the break.
Saints knew they needed to capitalise with a man advantage during the early part of the second half, and they did that when Hutchinson sent Freeman in for a deserved score.
Biggar missed the conversion, and the fly-half was soon forced off with a knee problem, with James Grayson coming on.
Saints soon shot themselves in the foot as Mitchell's loose pass was picked off, giving Tigers a chance to press.
And Ford made the most of the chance, skating through the Saints defence to score, before converting.
Saints almost responded instantly but Skosan lost the ball forward after a brilliant saving tackle from Porter in the corner.
A penalty had been awarded in the build-up, but Grayson wasn't able to take the chance, to the delight of the home fans who cheered as the ball flew wide.
Grayson soon made amends with a much simpler effort after Saints won a penalty at the scrum.
Tigers went back in front from a scrum penalty of their own as Ford held his nerve from the tee again.
Saints were down to 14 men when replacement prop Heffernan, in the squad due to Paul Hill being out with concussion, was shown a yellow card for a seatbelt tackle.
Ford hit the post with a penalty soon after, but Tigers had their tails up, and they made the extra man count when Steward scored out wide.
Ford missed the conversion to leave the gap at seven points with 10 minutes of the match remaining.
But the fly-half put the game beyond Saints when he slotted a drop goal with four minutes to go.
Ford also notched a penalty before the end to take his tally to 22 points on the day.
And when the ball was booted out, the home fans celebrated a victory their side were made to work so hard for.
Leicester Tigers: Steward; Potter, Moroni, Kelly (Burns 3 (Nadolo 76)), Porter; Ford, Youngs (van Poortvliet 50); Genge (c) (Leatigaga 70), Montoya (Clare 70), Cole (Heyes 56); Wells (Chessum 54), Green; Liebenberg, Reffell (Martin 64), Wiese.
Saints: Freeman; Proctor, Dingwall (Francis 71), Hutchinson, Skosan; Biggar (Grayson 51), Mitchell (James 67); Iyogun (Waller 53), Matavesi (Haywood 53), Painter (Heffernan 53); Coles (Ribbans 55), Ratuniyarawa; Lawes, Ludlam (c), Augustus (Hinkley 55).
Referee: Matthew Carley