Haberer speelde in de jeugd voor FC Wangen, FV Ravensburg, FC Memmingen en SpVgg Unterhaching. Hij maakte tijdens het seizoen 2011/12 zijn debuut in het eerste elftal van SpVgg Unterhaching, op dat moment actief in de 3. Liga. Het seizoen erna speelde hij 14 competitiewedstrijden en in 2013/14 was hij volwaardig basisspeler. Haberer verruilde Unterhaching in juli 2014 voor 1899 Hoffenheim. Daarmee klom hij in een keer twee divisies omhoog, naar de Bundesliga.[2] Het lukte hem niet om aan te haken. Hij speelde in 2014/15 geen minuut in het eerste elftal. Hoffenheim verhuurde Haberer in juli 2015 voor een jaar aan VfL Bochum. Hiervoor speelde hij dat jaar 33 speelronden in de 2. Bundesliga, het grootste deel als basisspeler.
Na zijn terugkeer verruilde Haberer Hoffenheim in juli 2016 definitief voor SC Freiburg. Hiervoor maakte hij op 28 augustus 2016 dan toch zijn debuut in de Bundesliga. Freiburg-coach Christian Streich liet hem dat seizoen spelen in 32 speelronden, in 22 vanaf de aftrap. Het bleek het eerste van zes seizoenen waarin Haberer voor Freiburg uitkwam op het hoogste niveau. Hierin speelde hij elk jaar tussen de 25 en 33 speelronden. De enige uitzondering hierop was 2020/21. Dat seizoen was hij een half jaar afwezig vanwege een gebroken kuitbeen. In 2021/22 was hij bovendien hoofdzakelijk invaller.
Haberer verruilde Freiburg in juli 2022 transfervrij voor Union Berlin. Coach Urs Fischer maakte hier weer een basisspeler van hem. Hij speelde dat seizoen voor het eerst in zijn carrière in het hoofdtoernooi van de Europa League. Daarin kwamen de club en hij tot de achtste finales. Haberer behoorde in 2022/23 tot de vaste kern van spelers die met Union Berlin vierde werden in de Bundesliga. Daarmee plaatste de club zich voor het eerst voor de Champions League.
Haberer speelde één interland voor Duitsland –19 en elf voor Duitsland –20. Hij won met Duitsland –21 het EK –21 van 2017. Haberer kwam tijdens de groepsfase van dit toernooi niet verder dan een invalbeurt van vier minuten. In zowel de halve finale als de finale was hij basisspeler, in plaats van Mahmoud Dahoud.