Begin by cleaning the beef bones under running water and patting them dry. Cut the flank steak into 1-inch cubes. Quarter the onions and mince the garlic. Mix cornstarch with 4 tablespoons of water in a small bowl until smooth.
Heat oil in a large pot over medium heat. Add half of the minced garlic and quartered onions. Cook until fragrant and the onions turn translucent, about 2 minutes. Add the beef pieces and bones, then cook until all sides are nicely browned, around 5-7 minutes.
Pour in 8 cups of water and add a small pinch of salt. Bring everything to a boil, then lower the heat. Let it simmer gently for 1½ hours. Keep an eye on the water level - add more hot water if needed to maintain the same amount of liquid.
After this time, carefully remove just the flank steak pieces from the pot, leaving the bones behind. Keep the bones simmering on very low heat for another hour - this makes the broth even richer.
Now make the pares sauce in a separate pot. Heat some oil and cook the remaining garlic until golden brown. Take out the garlic and save it for later. In the same pot, add 1 cup of the beef broth from your simmering bones, the cooked flank steak, soy sauce, brown sugar, star anise, bay leaves, black pepper, and your cornstarch mixture. Let this simmer for 30 minutes until the meat is very tender. Add fish sauce to taste.
Go back to your bone broth and add the chopped cabbage. Cook for just 5 minutes until the cabbage is tender but still has some crunch.
To serve, fill each bowl with the hot bone broth and cabbage. Add a generous portion of the flank steak with its pares sauce. Top with sliced hard-boiled eggs, spring onions, and the crispy garlic you set aside earlier.
Serve while hot with your choice of steamed rice or noodles. For the best experience, let everyone add extra fish sauce or soy sauce to their own taste.
Remember: For extra-clear broth, keep the heat low and steady. The soup only gets better the next day, so don't worry about making too much!