The defender headed home a Frank Lampard free kick midway through the second half, but could have seen red after appearing to elbow Christian Benteke just two minutes earlier
Jose Mourinho had previously gone four Premier League games without registering a victory over Villa, but he finally bucked that trend at Stamford Bridge courtesy of Branislav Ivanovic's thumping header.
Chelsea made a flying start when Antonio Luna inadvertently scored past his own goalkeeper before Christian Benteke levelled proceedings on the stroke of half-time.
And it looked like the home side would be frustrated until Ivanovic met Frank Lampard's free-kick with 17 minutes remaining.
Mourinho made two changes to the Chelsea team that beat Hull City on Sunday, with Juan Mata and Demba Ba replacing Kevin De Bruyne and Fernando Torres, the Spaniard omitted from the squad altogether.
Paul Lambert had to make one enforced change from the Villa side that opened with a win against Arsenal on Saturday, as Ciaran Clark came in for the injured Nathan Baker.
Chelsea started with plenty of intent and caused the Villa backline plenty of trouble, and they were rewarded with the breakthrough after just six minutes.
Oscar threaded a through-ball into the path of Eden Hazard on the left-hand side of the box and his curling effort was saved by Brad Guzan only to unluckily rebound off Luna and into the back of the net.
After scarcely touching the ball in the opening 20 minutes, Villa finally started to settle into the game. They had their first glimpse of goal in the 22nd minute when Benteke picked up the ball in midfield and the Belgian laid into the path of Karim El Ahmadi but his long-range effort went harmlessly wide.
But Chelsea's inability to convert possession into goals cost them dearly deep into first-half stoppage time.
Gabriel Agbonlahor beat Ivanovic for pace on the left and picked out Benteke, who took one touch before firing home a left-foot strike that squeezed inside Petr Cech's near post.
The second half continued in a similar fashion with Chelsea enjoying the majority of the play but unable to break down a stubborn Villa defence.
And they were nearly punished in the 61st minute when Matthew Lowton broke on the right and played a pass along the floor that Benteke stepped over before Agbonlahor hit a first-time strike that curled just over the crossbar.
Just two minutes later and Villa once more came desperately close.
Benteke picked up the ball on the left and crossed deep to the far post where Andreas Weimann connected well with a right-foot volley but he was denied by a smart save from Cech.
Chelsea made a double change with Andre Schurrle and Romelu Lukaku replacing Mata and Ba.
And the changes sparked the home side into life when Ivanovic found the breakthrough in the 73rd minute.
Lampard played a teasing outswinging free-kick from the right and the Serbian timed his run well to head beyond Guzan.
There was almost time for one more twist when Weimann hit a half-volley from Benteke's assist but he was thwarted by Cech.
Chelsea now turn to their attention to Monday's trip to face Manchester United at Old Trafford, while Lambert's side welcome Liverpool to Villa Park on Saturday.