Ray tracing scene with 2 lights and sphere
I think what you're describing is what happens when you mix colours in gamma space. You should be using linear colour space when mixing.

When reading colours of lights and materials, convert them from gamma->linear using the inverse gamma function.

colourLin = pow(colourLight, 2.2);
... do lambert calculation here and accumulate in 'colour' variable ..

// On output (linear-&gt;gamma conversion)
gl_FragColor = pow(colour, 1.0/2.2);


There is an in depth chapter in GPU Gems on this topic: The Importance of Being Linear.