Second-half goals from the hosts - the latter from the penalty spot - stunned Didier Deschamps' side in Kiev and put Mikhail Fomenko's charges on the brink of the World Cup
Zozulya's well-taken finish and Yarmolenko's late penalty condemned the lacklustre Bleus to defeat and left Franck Ribery and Co. with a mountain to climb to reach the finals next summer, especially after Laurent Koscielny was sent off late on.
Mikhail Fomenko's men went into the game having never beaten France before, but having secured their place in the play-offs after finishing just a point behind England in Group H.
Only world and European champions Spain prevented France from automatically qualifying for next year's showpiece in Brazil.
However, it was the supposed underdogs Ukraine who dictated play in a tight encounter, with striker Zozulya giving them the lead midway through the second half.
And the hosts wrapped up the win with a penalty from Yarmolenko seven minutes from time, before Laurent and Olexandr Kucher both saw red as the two sides ended the game with 10 men.
Newcastle United striker Loic Remy made his first start in a competitive match for France since October 2011, while captain Hugo Lloris was also included in Didier Deschamps' starting XI, having not played since being knocked unconscious in Tottenham's Premier League draw with Everton earlier this month.
Meanwhile, Ukraine made five changes from the side that beat San Marino 8-0 in their final group-stage game, Dnipro striker Zozulya leading the line in front of attacking midfielder Edmar.
Both sides created chances early on, with Olivier Giroud seeing his header comfortably saved by Andriy Pyatov, before Yarmolenko had the hosts' first effort on goal with a low shot that forced Lloris into action.
But from there, opportunities proved to be rare in what was a tense first half, although Ukraine wasted a good chance to take the lead when Edmar headed narrowly wide from close range just before the half-hour mark.
France began to exert more control in the opening forays of the second half, although Ukraine remained a threat on the counter, with defender Artem Fedetskiy shooting just over from long range.
And it was Fomenko's men who finally broke the deadlock after 61 minutes when Zozulya's effort squirmed under Lloris and over the line to delight the home crowd at the Olympic Stadium.
Deschamps' men responded well, Samir Nasri denied being by Pyatov following Giroud's throughball, before Paul Pogba saw his low effort easily handled by the Ukraine shot-stopper.
France continued to search for an equaliser and a much-needed away goal as the contest headed towards its conclusion, but Yarmolenko made their task even harder when he converted from the spot after Arsenal defender Koscielny was ruled to have bundled over Zozulya in the area.
Koscielny's miserable night was completed when he was dismissed for an off-the-ball fracas with Kucher and, although the latter was also sent off soon after for a second bookable offence, it is the 1998 world champions who have a mountain to climb ahead of the second leg at Stade de France on Tuesday.