French winger Diaby’s early opener was cancelled out by a 67th-minute equaliser from Julian Brandt against his former club.
Dortmund were left to rue a host of missed chances when Diaby then set up a superb goal by Leverkusen’s 17-year-old midfielder Florian Wirtz for the winner 10 minutes from time.
The victory was Leverkusen’s first in five league games and puts them second on goal difference, level on 32 points with RB Leipzig, who host Union Berlin on Wednesday.
Leverkusen are four points behind leaders Bayern Munich, who are away to Augsburg on Wednesday in the Bavarian derby.
The away defeat was a fresh blow to Dortmund’s title hopes, leaving them seven points adrift of Bayern.
Leverkusen took the lead in the 14th minute when they returned a clearance kick by Dortmund goalkeeper Roman Buerki, which was snapped up by Leon Bailey on the halfway line.
The Jamaica winger put in a superb diagonal pass to Diaby who sprinted away from the Dortmund defence and fired past Buerki on 14 minutes.
Dortmund equalised midway through the second-half when Brandt hit the far bottom corner from 25 yards out and squandered another chance moments later.
England winger Jadon Sancho also fired wide as both sides had a string of chances.
Diaby then put in superb work to put Wirtz in enough space to fire the winner past Buerki.
Wolfsburg are fifth, level with Dortmund on 29 points, after a 2-0 win at Mainz thanks to goals by Polish midfielder Bartosz Bialek and Dutch striker Wout Weghorst.
Hertha Berlin have not scored in their last three matches as Hoffenheim earned their first victory in four games this year with a 3-0 win in the capital.
Hertha’s Polish striker Krzysztof Piatek had his early penalty attempt saved by a superb dive from visiting goalkeeper Oliver Baumann.
Sebastian Rudy put Hoffenheim ahead with half an hour played, then Croatia striker Andrej Kramaric added two second-half goals.
Earlier, Borussia Moenchengladbach climbed to seventh thanks to a 1-0 home win over Werder Bremen.
Gladbach dropped Swiss striker Breel Embolo for what head coach Marco Rose described as a ‘senseless’ breach of the Bundesliga’s hygiene rules.
Embolo, 23, was dropped amid allegations he attended a private party, reportedly attended by 23 people, on Saturday.
The event at a restaurant in Essen was broken up by police with Germany currently in lockdown due to the coronavirus pandemic.
Embolo insists he was instead at a friend’s house watching basketball, but his behaviour still breaches the league’s hygiene rules as players are not allowed to meet people outside their team’s bubble during the pandemic.
Embolo must now submit two negative tests for Covid-19 before he can train again with the Gladbach squad.
ryj/td
© Agence France-Presse
"What Stu (McConnachie) and the trail community have done to put South African trail running…
by Stephen Granger RMB Ultra Trail Cape Town (UTCT) celebrates its 10th anniversary this weekend,…
by Stephen Granger The eyes of the trail world will be focused on the southern…
Competitive racing was the order of the day at the TCS New York City Marathon…
A coaching team from Bundesliga club 1.FSV Mainz 05 has visited the Totalsport Safe-Hub in…
An NBA season packed with African talent and colourful courts is underway, with games available…