A little overlap is to be expectedone with Box2D, try increasing the positionIterations parameter in the call to World.step (also consider experimenting with the velocityIterations parameter).
Increasing these values gives a more stable simulation with less collision overlap, but it comes at a performance cost.
You can also try stepping the World in smaller increments, Gaffer on Games's Fix Your Timestep has a good description on how to decouple the physics time from the render time.
Play around with the values and find the compromise that works best for you.