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 #
South Korean President Moon Jae-In hopes to “normalise” ties with giant neighbour China on his first state visit to the country this week,... More
Israeli Prime Minister Benjamin Netanyahu said on Monday that recognising Jerusalem as his country's capital "makes peace possible", aft... More
After a year marked by devastating cyber attacks and breaches, online attackers are expected to become even more destructive in 2018, security researc... More
GENEVA: Talks aimed at ending the war in Syria restarted on Tuesday with the government enforcing its will, warning the United Nations it would not to... More
KARANGASEM, Indonesia (AP) An erupting volcano with a deadly history on Indonesia's Bali, one of the world's most popular resort islands... More
WASHINGTON (Reuters) – The top U.S. general in Afghanistan said on Tuesday that he had not seen a change in Pakistan’s support for militan... More
US President Donald Trump clashed with Democratic leaders in dramatic fashion on Tuesday, heaping pressure on Congress to craft a compromise on federa... More
Pope Francis spread a message of forgiveness in a historic open-air mass before a sea of worshippers in Yangon on Wednesday, during a visit to conflic... More
Riding a horse or nailing an archery target is tough at the best of times it's even harder when you're wearing a niqab. But that isn't ... More