Jonathan Sexton missed an early penalty to give the hosts the lead, but he made amends soon after as his kick sailed through the posts.
As both sides scrapped for supremacy, Exeter fly-half Gareth Steenson missed two penalties of his own.
He was successful a minute before the break, though, as the teams went in level 3-3 at half time.
Sexton kicked his side into a 52nd-minute lead but missed another attempt minutes later.
The hosts were made to pay just after the hour as Steenson landed his second penalty of the afternoon to bring his side deservedly level.
However, with only seven minutes left on the clock, Sexton kicked over for the third time to get his side out of trouble.