
German footballer of the year Mario Gomez was the Stuttgart hero with two goals while Yildiray Basturk grabbed the other. Munich got a consolation goal from Luca Toni but had defender Lucio sent off.
Bayern have all but thrown away what was a six-point league lead in the past weeks, winless in their last three matches. They were also held 2-2 by Bolton in the UEFA Cup on Thursday, which prompted harsh criticism from club chairman Karl-heinz Rummenigge on coach Ottmar Hitzfeld.
Munich have 28 points and northern German rivals Werder Bremen and SV Hamburg are right on their heels with 27 apiece. Stuttgart, meanwhile, have 19 points as they slowly climb up the standings following a poor season start.
Bremen defeated high-flying newcomers SC Karlsruhe 2-0. Hamburg missed a possible league lead in their 1-1 draw at last year's runners-up Schalke 04.
"We were badly organised in defence and non-existent in attack," admitted Hitzfeld after Munich's disaster. Captain and goalkeeper Oliver Kahn named the showing "lethargic" as Munich lost for the first time since a 2-0 loss in the same stadium on April 22.
Gomez opened the scoring in the 10th, pushing the ball over the line with his chest after nice work from Ludovic Magnin in the left wing.
Basturk then doubled the lead in spectacular fashion in the 32nd, driving the ball high into the net from 20m off Roberto Hilbert's pass. It was all over for Munich when Gomez tapped in his seventh season goal in the 43rd.
Lucio's red card for elbowing and kicking out at Magnin highlighted Munich's frustration. Toni's goal in the 85th at least avoided a third scoreless match in a row.
Bremen, by contrast, had no trouble with Karlsruhe three days after the poor 2-1 Champions League defeat at Italy's Lazio. Diego set the stage for the big win with a first-half double, Huga Almeida and Naldo were on target after the break.
Schalke continued where they left off in the strong 0-0 Champions League showing with Chelsea, and scored this time around when Mladen Krstajic nodded home in the 12th against Hamburg.
But Schalke's hopes of a first league win in five games ended in the 35th when Ivica Olic headed home from short range after an artistic effort from fellow-striker Paulo Guerrero. Hamburg are unbeaten in 12 competitive matches.
Elsewhere, Hansa Rostock won an eastern German duel 3-2 over bottom club Energie Cottbus, Hertha Berlin got a late 1-0 against Hanover 96 while Borussia Dortmund and Eintracht Frankfurt drew 1-1.
VfL Bochum won 2-0 at MSV Duisburg on Friday. Sunday's games are Arminia Bielefeld vs. Nuremberg and VfL Wolfsburg vs. Bayer Leverkusen.
DPA