Germany international Max Kruse calmly converted a spot-kick in the 81st minute after Dortmund defender Mats Hummels was sent off with a red card and Raffael added another with four minutes left to play.
The result left Dortmund, champions in 2011 and 2012, on 19 points ahead of Bayern Munich on goal difference, with Bayern in action later on Saturday against third-placed Bayer Leverkusen. Gladbach moved up to fourth on 13.
Dortmund should have scored several goals after wasting a bagful of chances and twice hitting the woodwork in a largely one-sided affair.
Hummels was left unmarked in the box early in the first half, only to fire straight at keeper Marc-andre ter Stegen, and Kevin Grosskreutz's thunderous drive was saved by the Germany international.
In the 33rd minute it was Marco Reus's turn to fire narrowly wide as the visitors completely dominated the encounter.
It was a similar story in the second half with Gladbach shackled at the back and Dortmund carving out chance after chance.
But in a stunning final 10 minutes Gladbach struck twice with Hummels bringing down Havard Nordtveid for a penalty.
After Kruse had give them the lead from the spot, Gladbach found more space and it was another quick break that sealed the win with Raffael slotting in from the right.
Fellow Champions League competitors Schalke 04 came from a goal down against 10-man Augsburg to crush them 4-1, Adam Szalai notching two goals. The win lifted them to eighth place on 11 points.
Promoted Eintracht Braunschweig secured their first Bundesliga win in 28 years when they beat hosts VfL Wolfsburg 2-0 to move off the bottom place for the first time this season.
- Sports & Recreation
- Mats Hummels
- Bayern Munich
- Bayer Leverkusen