Heat oil in a medium pot over medium.
Add shallots, garlic, lemongrass, and chiles and cook, stirring occasionally, until aromatics start to soften but have not taken on any color, about 5 minutes.
Add tomatoes and cook, smashing and stirring, until tomatoes have burst and fallen apart and mixture is slightly thickened, about 5 minutes.
Pour 5 cups cold water into pot and bring to a boil.
Reduce heat to medium-low so broth is at a bare simmer.
Add fish to pot; season lightly with salt (you’ll finish soup with fish sauce).
Cook until fish is opaque and cooked through, about 4 minutes.
Remove from heat; add lime juice and fish sauce.
Taste and season with more salt and/or fish sauce if needed.
Stir in herbs and ladle into bowls.
