0210 GMT December 12, 2019
It took less than three minutes for France to take the lead as Lucas Digne's low cross found Antoine Griezmann, who laid the ball off for Blaise Matuidi to score from a tight angle, ESPN reported.
France lost N'Golo Kante do an apparent hamstring injury in the 33rd minute, and Bulgarians nearly equalized a few minutes later, only for Hugo Lloris to make a tremendous diving save to deny Georgi Kostadinov.
France held on to three points to maintain its one-point lead over Sweden, and Les Bleus can seal their qualification to Russia by beating Belarus at home on Tuesday.
Didier Deschamps, who now has more wins as France coach than anyone else with 42, acknowledged it was a poor display but is confident of an improved performance in Paris.
"It was a complicated match, with many faults," he told TF1.
"We did not have a great second period, and they were more aggressive. There is only one game left, and that depends only on us. We'll have to win on Tuesday. I'm confident, as I was with this game," the French man added.
Earlier, Sweden had kept up the pressure on France with an 8-0 win over Luxembourg.
Also in Group A, Netherlands needed a late penalty to escape Belarus with a 3-1 win, though its hopes of reaching a playoff spot are practically nil after Sweden's big win.
Ronaldo to the rescue
Switzerland maintained its three-point lead over Portugal with one game to play in Group B by cruising past Hungary 5-2 ahead of Tuesday's crunch clash in Portugal.
The Swiss can qualify with at least a draw against the European champion, which needed Cristiano Ronaldo to come off the bench to rescue a 2-0 victory in Andorra.
With the crucial game against Switzerland in three days' time, Portugal coach Fernando Santos opted to start with Ronaldo on the bench but was forced to bring him on at half-time after the Portugal failed to break through.
The goal finally came in the 63rd minute when defender Ildefonso Lima could only get a slight touch to Joao Mario's cross, and the ball fell to Ronaldo to score.
Ronaldo then started the play on the second goal in the 86th minute by sending a cross in for Danilo Pereira, who headed back across goal for Andre Silva to tap-in and secure the result, leaving Portugal in position to qualify over Switzerland with another win on the final day.
Ronaldo had not been able to train fully ahead of Portugal's qualifier in Andorra, explained Fernando Santos after the forward came off the bench to inspire the victory.
Ronaldo was one booking away from being suspended for the concluding game against Switzerland, but Santos said Ronaldo's suspension situation was not the only reason for his absence.
"I thought a lot. I thought, well, Ronaldo did not train 100 percent in two of the days of work," Santos told RTP.
"There were many factors that led to this decision. Games are complicated, I tried to manage and do what was best.
"Whether it was questionable or not... we ended up winning and that's what matters."