Ryan Weaver (Ray Liotta) is arrested in New York City in connection to a series of murders that he says he did not commit. Even though police lieutenant Aldo Hines (Héctor Elizondo) at one point broke protocol during the arrest (which later enraged Weaver), the authorities have enough hard evidence to have Weaver transported to Los Angeles to face trial. He and another prisoner, Stubbs (Brendan Gleeson), are escorted by four US marshals on a Boeing 747-200 on a commercial flight. Even though it is Christmas Eve, the 747 is nearly empty, with only eleven people on board.
During the flight, Stubbs breaks free while using the bathroom and begins a shootout with the marshals. A stray bullet fired from one of the marshals’ sidearms punches a hole in the fuselage, instantly triggering an explosive decompression. Amidst the chaos, the captain is fatally shot and the first officer dies when his head slams into the yoke, disengaging the autopilot in the process. Weaver frees himself and attempts to save the last remaining marshal, but fails when both Stubbs shoots the marshal dead, after being shot himself.
Weaver appears to be horrified by the ordeal, increasing the passengers’ trust in him. With the pilots dead, Teri Halloran (Lauren Holly), a flight attendant, makes her way into the cockpit and learns she is the only one left capable of keeping the 747 from crashing. To make matters worse, the plane is heading into a storm which threatens severe turbulence.
Weaver’s behavior becomes increasingly erratic since he is paranoid of being sentenced to death upon landing and occasionally suffers nervous breakdowns. He then locks the passengers in the crew’s cabin; and sexually assaults and strangles Maggie (Catherine Hicks), one of the other flight attendants, to death. He then calls the FBI control center at LAX and threatens to crash the 747 into their facility since he is now willing to do anything to avoid being arrested. His motives had become clear to Teri after she speaks, via the aircraft’s radio, with Hines.
Teri must be instructed by radio from Captain Bowen (Ben Cross) how to reprogram the autopilot to land at LAX, but her task is complicated by Weaver’s obscene and constant interruptions. After the plane barely survives turbulence during the storm, Weaver breaks into the avionics bay and smashes the server running the primary autopilot software, rendering the first landing attempt unsuccessful, and forcing a last second go-around. It skims a rooftop Japanese restaurant and a multi-story parking garage, but regains the air. The plane’s landing gear picks up an SUV, which hinders the next landing at LAX. The backup autopilot has now engaged, and Teri makes efforts to turn the plane around. The LAX airport chief sends an F-14 Tomcat to intercept the 747.
Teri begs LAX not to have her shot down, insisting she can land the plane. Weaver breaks into the cockpit with an axe and tries to kill her, but the F-14 destroys the SUV instead, shaking the 747 and giving Teri a chance to attack. She grabs one of the marshal’s guns and, in the midst of Weaver’s assault, manages to load a spare bullet. She finally shoots Weaver through the head and kills him. Teri returns to the pilot’s seat and with Bowen’s radio assistance, safely lands the 747 using the autopilot. Despite Weaver’s claims that he killed them all, the other crew and passengers are found alive.