a workaround would be Jim’s method, but a real fix would be to use the restoring force of a constant-force spring, i.e. attaching a spring like this or like described and linked here, or a positioner/retractor/balancer. The other, more common fix is to replace the stepper with a motor with a brake that blocks the motor mechanically as soon it is powered off.
Another fix for homing not working correctly is retrofitting limit sensors (like found on more expensive machines and machines in the industry), and to put stall homing out of service.
Stall homing measures the voltage the motor produces by its motion when it acts as a generator (=when it produces a voltage by the counter-electromotive force (“back EMF”). Stall detection, which is a capability provided by the Texas Instruments DRV8711 stepper drivers found in the Buildbotics/Onefinity controllers, means to measure when this voltage suddenly disappears, which means the motor does not move anymore, so is homed). This voltage can, of course, only be measured in the short period when the current from the controller which makes the motor move pauses for a short period, which makes it possible to measure this. It is clear that when the motor does not receive electric power during this short moment, considering the weight of the carriage on the only vertical axis, the Z axis, it is not held by the electromagnetic force anymore and left running free, in which case it is attracted by gravity and can move by itself (the friction in the ball screw may, depending on the pitch of the screw and some other parameters, prevent this to some amount). As explained in the video Adjusting Stall Homing On The Onefinity CNC, in case of the motor not stopping to bounce against the axis end when trying to stall-home, you would decrease the ‘stall-current’ value, but this works well on horizontal axes where gravity has no effect. Here, on a vertical axis, you could experiment not only with ‘stall-current’ in the Motor → Homing section, but also with ‘stall-microstep’ and with the ratio of ‘stall-microstep’ to ‘stall-sample-value’. What these settings are for is explained in the link.
But if it is the case that the motor has difficulties to hold the position outside of the stallhoming (e.g. when stall condition just was detected), the values under “Motor → Power” are responsible: ‘drive-current’ and ‘idle-current’. I would try to increase them if your Z axis is heavier than the default settings expect.