The champions started the game in typical fashion, with plenty of probing, movement and pressing, but there were no early chances inside the opening five minutes.
Although Werder hardly touched the ball in the opening exchanges, they went ahead after nine minutes. A swift counter-attacking move was ended with the marauding Theodor Gebre Selassie slamming his side in front.
The proceedings were even for a while until Claudio Pizarro had his first sight of goal on 20 minutes. His driving run and shot from the edge of the box went wide, however.
In just two more minutes Bayern were indeed level. Again Pizarro was heavily involved as he held the ball up well for Franck Ribery to make a late run and neat finish.
Ribery continued to cause problems down the left flank, but Werder were defending well for the most part and there were few chances over the next 15 minutes.
However, just after a Pizarro effort was cleared off the line the visitors went back in front on the break again. Aaron Hunt was found by Franco di Santo before he cut in to finish low for 2-1, a lead that they held to the break.
Pep Guardiola had obviously had harsh words with his side at the interval as in the second half Bayern were in complete control of the contest.
In 10 second-half minutes they were not only level, but ahead, as Pizarro netted twice inside three minutes for 3-2.
Then, on 60 minutes, Bastian Schweinseiger headed in from a Philipp Lahm cross to put the result beyond doubt before a rampant second half was complete with an Arjen Robben strike 17 minutes from time.