I solved this.
The bright color is look like rectangle because the light that is reflected by Lambertian material is scattered randomly in unit cube (with center is the unit normal) . I fixed this by just allow ray is scattered randomly point in unit sphere.


Final result

Example code :
Function to generate random vector
vec3 random(float min, float max)
{
return { Random(min, max), Random(min, max), Random(min, max) };
}
Code show generate random position in unit sphere, with using dot product to check the the vector is in radius of unit sphere, and reject it when vector is generated outside the unit sphere.
vec3 random_in_unit_sphere()
{
vec3 v = random(-1.0f, 1.0f);
while (dot(v, v) >= 1)
v = random(-1.0f, 1.0f);
return v;
}
Then from the hit point we just use normal vector of hit surface like the center of unit sphere, and add with random vector position in unit sphere. This random vector will work as direction vector that bend normal vector to direction of scatter ray.
scatter_ray.direction = hit_surface.normal + random_in_unit_sphere();