Pakistan will now face title-holders India in Sunday's final at the Oval if their arch-rivals beat Bangladesh in Thursday's second semi-final at Edgbaston.
Azhar Ali (76) and Fakhar Zaman (57) all but ended previously unbeaten tournament hosts England's slim hopes of victory with an opening stand of 118.
But the real damage was done when England collapsed to 211 all out after Pakistan captain Sarfraz Ahmed won the toss on a used pitch that played more like a sub-continental surface than a British one.
Paceman Hasan Ali led a disciplined attack with a man-of-the-match return of three for 35 from his maximum 10 overs.
“Credit goes to the bowlers and the batters who finished it very well,” said Sarfraz at the presentation ceremony.
“We adapted to conditions, we knew if we restrict them we could easily chase it down,” he added.
"Every game is a knockout game and I told my boys to play their game and not worry about the result."
Defeat extended England's long wait for a maiden major one-day international title until at least 2019 — when they stage the next World Cup.
“One thing we didn't do was adapt to conditions, which I thought Pakistan did extremely well,” said England captain Eoin Morgan.
“We did prepare for a used wicket but 211 wasn't a good score. 250/270 would have been.”
He added: “The fact we've produced brilliant performances in this tournament and then play like that on this wicket is extremely disappointing.”
Pakistan's openers compounded England's misery to the delight of their supporters at a sun-drenched Cardiff.
Left-hander Fakhar hit a six — something England didn't manage in their entire innings — when a top-edge off fast bowler Mark Wood flew safe.
The dashing Fakhar completed a 49-ball fifty to follow his 50 against Sri Lanka.
Azhar, who pulled all-rounder Ben Stokes for six, followed him to the landmark in 68 balls.
On a Cardiff ground where they chased more than 300 to beat England in an ODI last year, Pakistan completed Wednesday's pursuit with a mammoth 77 balls to spare when Mohammad Hafeez pulled Stokes for four.
England did avoid a 10-wicket defeat when Jos Buttler stumped Fakhar off leg-spinner Adil Rashid and Azhar too fell before the finish, pulling Jake Ball into his stumps.
Pakistan, however, had the game all but won at 173 for two.
India thrashed Pakistan by 124 runs in the teams' Champions Trophy tournament opener at Edgbaston on June 4.
But three days later Pakistan returned to the Birmingham ground to make a mockery of the rankings by beating South Africa in a bottom versus top clash.
Pakistan then held their nerve in a three-wicket win over Sri Lanka in Cardiff on Monday — a virtual quarter-final for both sides.
England didn't manage a single individual fifty in their innings.
Joe Root top-scored with 46 and Yorkshire team-mate Jonny Bairstow, recalled in place of dropped opener Jason Roy, managed 43.
Rumman Raees, in for injured fellow left-arm quick Mohammad Amir, took two for 44 on his ODI debut. England, who were 128 for two, lost their last eight wickets for just 83 runs.
Bairstow replaced Roy after the Surrey opener had managed just 51 runs in eight ODI innings this season. Dropped twice, Bairstow's luck ran out when a misjudged pull off Hasan sailed gently to Hafeez at deep square leg.
Root fell when well set after an edged cut off leg-spinner Shadab Khan was well held by wicket-keeper Sarfraz.
Morgan, who made 87 in a 40-run win against Australia last time out, fell for 19 when he charged down the pitch to Hasan and edged behind.
Stokes, fresh from his career-best 102 not out against Australia, took 64 balls to score a 34 that, remarkably for the usually big-hitting all-rounder, did not include a single boundary.
He eventually holed out to cover when deceived by Hasan's slower ball.
Pakistan belied their reputation as a poor fielding side, with Fakhar holding a brilliant diving catch at deep square leg to dismiss Moeen Ali, while substitute Ahmed Shehzad ran out Rashid with a direct hit.
Sarfraz rescued Pakistan with an unbeaten 61 after they collapsed against Sri Lanka but, two days on, there was no repeat of that batting slump.
England: 211, 49.5 overs (Hasan Ali 3-35)
Pakistan: 215-2, 37.1 overs (Azhar Ali 76, Fakhar Zaman 57)
Result: Pakistan won by eight wickets
Pakistan: Azhar Ali, Fakhar Zaman, Babar Azam, Mohammad Hafeez, Shoaib Malik, Sarfraz Ahmed (w + c), Imad Wasim, Rumman Raees, Shadab Khan, Hasan Ali, Junaid Khan
England: JM Bairstow, AD Hales, JE Root, EJG Morgan (c), JC Buttler (w), BA Stokes, MM Ali, AU Rashid, LE Plunkett, MA Wood, JT Ball
. Tags: #Pakistan #
At least 123 people have been burnt alive and dozens of others injured after an oil tanker caught fire and exploded near Bahawalpur in Pakistan's ... More
Four Arab states that imposed a boycott on Qatar have issued an ultimatum to Doha to close Al Jazeera television, curb ties with Iran, shut a Turkish ... More
Four Arab states boycotting Qatar over alleged support for terrorism have sent Doha a list of 13 demands including closing Al Jazeera television and r... More
The following is a transcript of Kulbhushan Jadhav's 'second confessional statement', as issued by Inter-Services Public Relations. &qu... More
The likelihood that the leader of the militant Islamic State (IS), Abu Bakr al-Baghdadi, has been killed is "close to 100 per cent", Interfa... More
India fired a rocket carrying 31 small satellites into space on Friday, several of them for European countries looking for high resolution earth image... More
A police officer was beaten to death by an angry mob outside a mosque in India-held Kashmir, police said Friday, as tensions in the volatile region ra... More
Saudi women no longer need a man's consent to carry out certain activities, local media reported on Friday. The Arab News said a royal decree i... More
NASA says its planet-hunting telescope has found 10 new planets outside our solar system that are likely the right size and temperature to potentially... More