Title-holders India, set 339 to win, collapsed to 33 for three and 54 for five against a Pakistan side they had thrashed by 124 runs in their tournament opener at Edgbaston on June 4.
They were eventually dismissed for 158, with 19.3 overs to spare.
Amir finished with three for 16 in six overs and Hasan Ali, who kick-started Pakistan’s revival in their group-win over top-ranked South Africa, ended the match when he had Jasprit Bumrah caught by gleeful captain and wicket-keeper Sarfraz Ahmed.
Left-arm fast bowler Amir, whose career was almost ended on the other side of London’s River Thames by a ban and jail term he received for his part in a spot-fixing scam during a 2010 Test against England at Lord’s, finished with three for 16.
He dismissed Rohit Sharma (nought), India captain Virat Kohli (five) and Shikhar Dhawan (21) in a stunning new-ball spell.
Earlier, Pakistan made 338 for four after losing the toss with opener Fakhar Zaman’s 114 his maiden one-day international hundred in just his fourth match at this level.
Pakistan 338-4, 50 overs (Fakhar Zaman 114, Azhar Ali 59, Mohammad Hafeez 57 no)
India 158 all out, 30.3 overs (H Pandya 76; Mohammad Amir 3-16, Hasan Ali 3-19)
Result: Pakistan won by 180 runs