Goal-shy Bayern beaten by Dortmund
Paraguay forward Lucas Barrios and Turkey midfielder Nuri Sahin struck in the second half to leave Bayern 12th in the table, 13 points behind leaders Mainz 05 and facing a tough battle to retain their title.
Bayern, who sorely missed injured forwards Arjen Robben and Franck Ribery, have the worst attacking record in the league with only five goals scored.
"We created the better chances in the first half and we have to keep on fighting," Bayern captain Mark van Bommel told reporters.
Dortmund's sixth win in seven league games kept them second with 18 points, three adrift of leaders Mainz 05.
VfB Stuttgart remained rooted to the bottom after losing 2-1 at home to Eintracht Frankfurt, making it six defeats out of seven, and Werder Bremen drew 2-2 at fourth-placed Bayer Leverkusen.
Bayern coach Louis van Gaal had hoped last week's 2-1 Champions League win at FC Basel could prove a turning point for his side.
But, as soon often this season, Bayern lacked the finishing touch to their good approach work with Mario Gomez the main culprit.
Gomez, the Bundesliga's most expensive signing when he joined last season, missed a chance when his first touch let him down as he was clean through on goalkeeper Roman Weidenfeller.
Gomez broke clear again in the 36th minute and cut inside, only to be denied by a superb Weidenfeller save and he then sent a free header wide.
Defender Martin Demichelis came on for Bayern at half-time but he failed to clear his lines at a throw-in and the ball fell for Barrios to score with a deflected shot.
The Argentine then gave away the free-kick from which Sahin scored the second with a curling effort from 25 metres.
Stuttgart's woes continued when Greek forward Theofanis Gekas headed in a cross by Brazilian Chris to put Eintracht ahead in the 18th minute with his fifth league goal of the season. Chris scored the second with another header after a corner in the 69th minute.
Coached by former Tottenham Hotspur manager Christian Gross, Stuttgart had captain Matthieu Delpierre sent off in the 84th minute for a crude challenge on Patrick Ochs but then started a late fightback.
Pavel Pogrebnyak pulled one back and Cacau had the ball in the net in the 88th minute only to see his effort disallowed for offside.