Bring a large pot of salted water to a boil. Cook the spaghetti until just al dente according to the package directions. Reserve 1 cup of pasta water, then drain.
Warm the olive oil in a large skillet or Dutch oven over medium heat. Cook the onion for 4 to 5 minutes until soft. Add the garlic and cook for 30 seconds.
Add the ground beef, break it into small pieces, and cook until browned, stirring often. Drain excess fat if needed.
Stir in the tomato paste, oregano, basil, salt, and pepper. Cook for 1 minute, then add the crushed tomatoes and bring to a gentle simmer.
Reduce the heat and simmer uncovered for 20 to 25 minutes, stirring occasionally. Confirm the ground beef reaches 160°F (71°C) with a food thermometer.
Toss the spaghetti with enough sauce to coat, adding a splash of pasta water if needed. Serve with more sauce, Parmesan, and fresh basil.