Preheat oven to 325°F. Pat short ribs dry and season all over with salt and pepper.
Heat olive oil in a Dutch oven over medium-high heat. Brown short ribs on all sides, about 5-7 minutes total. Remove to a plate.
Reduce the heat to medium. Add onion, carrots, and celery to the pot. Cook, stirring occasionally, until vegetables are softened and beginning to brown, about 5-7 minutes. Add the garlic and cook just until fragrant, about 30 seconds to 1 minute.
Stir in tomato paste and cook for 1 minute, stirring constantly.
Add the wine, increase the heat to high, and bring to a boil. Scrape up any browned bits from the bottom. Simmer until the wine is reduced by half, about 10-12 minutes.
Add beef stock, bay leaf, and thyme sprigs. Return the short ribs to the pot, nestling them into the liquid (they should come about ¾ of the way up the meat). Bring to a simmer, cover, and transfer to the oven.
Braise for 2½-3 hours, until meat is very tender and can be easily pulled apart with a fork.
Remove ribs carefully to a serving platter and keep warm. Strain the sauce through a fine-mesh strainer into a measuring cup. Skim fat from the surface. Return the sauce to the pot, and adjust the seasoning with salt and pepper if needed.
Spoon sauce over short ribs. Serve over mashed potatoes, polenta, or risotto.