The Dutchman ran third behind battling leaders James Calado (Lotus) and Fabio Leimer (Racing Engineering) at first, and initially had to fend off charging Coloni driver Stefano Coletti.
But whereas most of the field changed all four tyres in their pitstops, Caterham opted to switch just two of van der Garde's, and the time saved - plus Calado and Leimer having emerged into traffic - allowed the Dutchman to jump to the front.
Van der Garde was able to hang on thereafter and win by just 0.8 seconds over poleman Calado. Leimer was given a drive-through penalty for an unsafe pit release after a close call with Calado when they pitted in unison, dropping him to 12th, and allowing Coletti to join the lead fight for a while before having to settle for third.
Championship leader Davide Valsecchi (DAMS) was a lonely fourth, while Nathanael Berthon salvaged something for Racing Engineering in fifth, with Coloni's Stefano Coletti fending off Max Chilton (Carlin) and Luiz Razia (Arden) to complete the top six.
Ocean's Nigel Melker was on course for eighth and race two pole until being penalised for pitlane speeding.
Assertive drives from iSport man Jolyon Palmer and Lotus's Esteban Gutierrez earned them the final points.