Bremen, who are 10th in Germany's top flight, took a fifth minute lead through Milot Rashica but Dortmund captain Marco Reus levelled in first half stoppage time from a free kick but had to be substituted due to injury after the interval.
U.S international Christian Pulisic put the home side ahead at the end of the first half of extra time, but Claudio Pizarro promptly levelled for Bremen after the second interval.
Bundesliga
Haaland on target as Dortmund brush aside Union Berlin
19/09/2021 AT 14:44
A strike from Achraf Hakimi looked to have clinched Dortmund's place in the next round but Martin Harnik netted in the 119th minute, forcing a penalty shootout.
Bremen prevailed 4-2, scoring all their kicks while Dortmund's Paco Alcacer and Maximilian Philipp failed to convert.
Transfers
Man Utd eye ambitious swoop for Dortmund duo - Paper Round
15/09/2021 AT 23:09
Champions League
Opinion: Bellingham on course to becoming next £100m Englishman
15/09/2021 AT 20:34