Pushing is an issue in physics simulations because when an object moves, it actually teleports by small distances. When you try to push a box with another box, they are actually just overlapping, and then reacting according to your algorithms. There are a bunch of ways that established physics engines deal with this, but I’ll save you the trouble.
Just use box2D, it’s simple enough to learn in a couple of hours, and it’s a really well behaved engine. Ive created physics engines using SAT detection and triangulation for complex polygons, and to be honest it was a waste of my time. People have been optimizing these things for years, so it makes more sense to use an established engine.