The 19-year-old Leno, who arrived in August on a four-month loan contract following a long-term injury to Leverkusen's first choice keeper Rene Adler, has had an outstanding season, helping Bayer reach the Champions League round of 16.
"I feel good here and am thankful to be playing in the Bundesliga and the Champions League," Leno said in a statement. "I want to pay back this trust in me."
He was due to return to Stuttgart in January.
"With Bernd Leno we have managed to secure the services of one of Germany's top goalkeeping talents on a long-term basis," Leverkusen sports director Rudi Voller said.
"He has done an outstanding job replacing injured Rene Adler and has a large share in the success of reaching the Champions League round of 16," Voller added.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.