Real struggled to create anything in the final third for much of the contest, and they were made to pay as substitute Garcia netted from close range to prevent Real from going top of the table.
Julen Lopetegui has come under pressure in recent days and will continue to do so due to heading into the international break with just four wins from eight games, but the newly-appointed boss had seemingly called for a fast start from his side given their efforts during the opening stages.
Benzema came the closest of all with the Frenchman having a header cleared off the line, but Real failed to build on what had been a dominant first quarter-of-an-hour.
Alaves offered little going forward aside from a couple of crosses which came close to finding their target, but they were doing enough to make Real think twice about going all out for the first goal of the contest.
Lopetegui made the decision to bring on Mariano Diaz for Benzema at the break, but the introduction of the summer signing did little to help Real in the final third.
The substitute was presented with one opportunity having got into the penalty area, but the attacker attempted to do too much with the ball and was eventually dispossessed.
Alaves offered much more in an attacking sense than they did in the first half, but it took until the 77th minute to create anything of note with Jony breaking clear down the left before sending a shot marginally wide of the far post.
Gareth Bale had a free kick comfortably kept out by Pacheco with 11 minutes left, and the Welshman soon had to depart the action after picking up a knock.
Real would have been disappointed with a share of the spoils but in the fifth minute of added-on time, Alaves found a dramatic winner as former Manchester City midfielder Garcia converted from close range after a corner had been headed across goal by Ruben Sobrino.
Alaves now sit in third place in the La Liga table and level on points with both Real and Barcelona, who face Valencia on Sunday evening.
ALAVES (4-3-3): Pacheco; Navarro, Laguarida, Maripan (Aguierregabiria 88'), Duarte; Brasanac, Pina, Wakaso (Garcia 74'); Ibai (Sobrino 67'), Jony, Calleri
REAL MADRID (4-3-3) Courtois; Odriozola, Ramos, Varane, Nacho; Casemiro (Asensio 62'), Kroos, Modric; Ceballos, Bale (Vinicius 80'), Benzema (Mariano 46')