A fine second-half free-kick from Shaun Maloney denied Sunderland a much-needed win at the Stadium of Light.
Maloney's effort gave the keeper no chance at all
Danny Higginbotham met Ross Wallace's corner with a powerful header on 10 minutes to give his side the lead.
Villa enjoyed the lion's share of the ball but could not find a way through until Maloney's 71st-minute free-kick soared into the top corner.
Sunderland thought they had won in injury-time, but Danny Collins's header was ruled out for a foul.
The match was classic end-to-end Premiership fare with a shocking raised-foot tackle from Craig Gardner that caught Dwight Yorke in the stomach setting the tone for a frenetic encounter after two minutes.
Sunderland took the lead their energetic start had merited when Higginbotham - rising above the static figures of Gardner and Martin Laursen in the six-yard box - got on the end of Wallace's inviting corner.
The goal actually sparked a period of concerted period for Villa as they dominated possession, with Ashley Young seeing plenty of the ball down the left flank.
Young's speed and trickery caused the home side serious problems, but Villa could not quite find the breakthrough despite a series of chances.
John Carew went closest for the visitors with an inventive flick after getting on the end of a Young cross, but his effort rebounded back off the post.
Sunderland should have doubled their lead moments later but they made a meal of a three-on-two attack with Kenwyne Jones ignoring two better-placed team-mates to have a strike at goal.
Wallace tried to snap up the rebound but was denied by a last-ditch Wilfred Bouma tackle, and Stokes's diving header at the far post was ruled out for offside.
Jones's five-game run without a goal seemed to be weighing heavily on his mind in the dying moments of the half, with the striker deciding to go for goal - and again failing to score - despite Stokes waiting in space.
Higginbotham's first-half header put Sunderland in the lead
Villa started the second half with tremendous urgency, and enjoyed a string of chances as Sunderland struggled to keep up.
Goalkeeper Darren Ward spilled the ball in the air, but Carew's shot lacked any conviction and was comfortably cleared by Higginbotham and the same striker had a glancing header saved soon afterwards.
Sunderland were defending for their lives, but the resistance finally broke when Paul McShane conceded a senseless free-kick on the edge of the box by barging into Maloney.
The substitute picked himself up off the floor and curled a delightful effort into the top corner with Ward left rooted to the spot.
With the volume in the stadium reaching a crescendo, both sides went seeking the winner and it was Sunderland who enjoyed the better chances with Grant Leadbitter heading straight at Carson after good work from Andy Cole.
Deep into injury-time, Collins nodded home at the far post to spark huge celebrations only for referee Steve Bennett to rule out the goal for a foul on the keeper.
Sunderland's players were incensed by the decision, while Roy Keane's furious reaction suggested Bennett should not hold his breath waiting for a Christmas card from the Black Cats boss.
Sunderland boss Roy Keane on Steve Bennett's decision to disallow Danny Collin's injury-time goal:
"It's the Sunderland fans I feel sorry for - they deserve better.
"It sums up (the referee's) day. He was giving everything against us and to say we're disappointed would be an unbelievable understatement.
"You could sense he was waiting to blow his whistle. It would be nice to see him later.
"We started well and managed to score from the set piece. Villa are a good team and put us under a lot of pressure and we had to defend very well.
"We always felt we would create something special in the last 10 minutes and that's what we did. We did score and but for the ref we would have had three points."
Aston Villa boss Martin O'Neill on the same incident:
"They may feel aggrieved but I think it was a foul.
"And if you told me we didn't deserve something from the game then I'd take issue with you.
"We were terrific. We showed plenty of resilience and character and were full value for the result away from home."
Sunderland: Ward, Whitehead, McShane, Higginbotham, Collins, Wallace (Cole 83), Etuhu (Leadbitter 61), Yorke, Murphy, Jones, Stokes (Chopra 70).
Subs Not Used: Gordon, O'Donovan.
Booked: Whitehead, Yorke.
Goals: Higginbotham 10.
Aston Villa: Carson, Mellberg, Laursen, Knight, Bouma, Gardner (Maloney 67), Reo-Coker, Barry, Young, Agbonlahor, Carew.
Subs Not Used: Taylor, Harewood, Berger, Osbourne.
Booked: Gardner, Young.
Goals: Maloney 73.
Ref: Steve Bennett (Kent).