Preheat oven to 450°F Spray a 13x9-inch glass baking dish with cooking spray.
In a large pot of boiling water, cook penne for 8 to 10 minutes or until tender but firm. Drain.
To make meat sauce: In a nonstick saucepan, heat oil over medium heat; cook onions and garlic for 4 minutes or until softened. Stir in beef; cook, stirring to break up meat, for 4 minutes, or until no longer pink. Stir in tomato sauce and stock. Cover and cook for 10 minutes or until thickened. Set aside.
To make cheese sauce: In a nonstick saucepan, whisk together flour, milk, and stock until flour dissolves. Place over medium heat; simmer until mixture begins to boil. Reduce heat to low; cook, stirring occasionally, for 5 minutes, or until thickened. Stir in Cheddar. Remove from heat. Stir cheese sauce into meat sauce.
Toss pasta with sauce. Pour into prepared baking dish. Sprinkle with mozzarella and Parmesan.
Bake in centre of oven for 10 minutes or until bubbly.