Saints leapfrogged their opponents and into 15th place after recording their first win in five matches and only their second away win of the season thanks to skipper Rickie Lambert.
The decisive moment in the game was tinged with controversy as Enda Stevens appeared to make little contact challenging Jay Rodriguez in the penalty area but Mark Halsey was in little doubt as he pointed to the spot.
Lambert made no mistake from 12 yards, scoring his ninth Premier League goal of the campaign and his 97th goal in 179 games. The striker also maintained his 100 per cent career record from the spot - a perfect 29 out of 29.
Villa boss Lambert brought on Barry Bannan for Brett Holman at the start of the second period and his side showed more purpose.
Artur Boruc parried Andreas Weimann's left-footed effort and then Christian Benteke hooked the ball over the bar after the 'keeper had denied Stevens.
Brad Guzan was relieved when Jason Puncheon crashed a fierce low drive against the near post.
Villa then staged a late rally as Boruc kept out Benteke's towering header.
The Pole was powerless to stop Nathan Baker's header but it crashed against the crossbar from Bannan's corner.
Benteke then shot wide after Boruc had bravely saved at the feet of Gabriel Agbonlahor as the Saints survived to seal all three points and complete a league double over their opponents.
The harsh reality is Villa have now taken only one point from their last five league games and look set for a season-long battle to stay up. It completed a miserable week after the Capital One Cup semi-final, first leg setback at Bradford.
Saints have now collected 17 points from their last 11 games - a sharp contrast to losing eight of their initial 10 games back in the top flight.