In a large pot, heat oil and sauté onions until golden brown.
Add garlic and ginger, stirring until fragrant.
Stir in cumin, coriander, turmeric, paprika, and chili powder. Toast for a minute.
Add beef cubes and brown them on all sides.
Mix in tomatoes and vinegar. Cook until tomatoes break down.
Pour in beef stock, bring to a simmer, then cover and cook for 1.5 to 2 hours until beef is tender.
Stir in garam masala at the end. Adjust salt to taste.
Garnish with cilantro and serve hot with rice or naan.