Thomas Tuchel's side suffered a 2-1 defeat in Germany three weeks ago but they got their campaign back on track at Parc des Princes despite an underwhelming display.
Neymar sealed all three points from the spot after 11 minutes, with the Ligue 1 champions then failing to have another shot on target until the closing stages of the match.
The result means the two sides are level on six points after four games, with PSG ahead courtesy of a better goal difference.
Neymar opened his Champions League account for the season early on, slotting home from 12 yards after Angel Di Maria had been fouled just inside the penalty area by Marcel Sabitzer.
Leipzig midfielder Sabitzer then saw an effort deflected narrowly wide soon after, with Keylor Navas tipping over Dayot Upamecano's header from the resulting corner.
Di Maria whipped a free-kick wide of Peter Gulacsi's right-hand post after 30 minutes as the hosts ended the first half with just 37.2 per cent possession, their lowest total at half-time in a Champions League game since facing Bayern Munich in September 2017.
The visitors continued to look bright after the interval, with Emil Forsberg and Sabitzer sending efforts just wide.
Yussuf Poulsen should have done better with a header from a corner with 10 minutes remaining as Leipzig looked the more likely to score.
PSG managed to hold on and claim maximum points, though, condemning Leipzig to a second consecutive away Champions League defeat following their 5-0 thumping by Manchester United in October.